/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File Name: zlg_can.h ** Last modified Date: 2010.02.25 ** Version: 1.0 ** Description: zlg_can.c的接口文件 **-------------------------------------------------------------------------------------------------------- ** Created By: 张展威 ** Created date: 2010.02.25 ** Version: 1.0 ** Descriptions: The original version 初始版本 **-------------------------------------------------------------------------------------------------------- *********************************************************************************************************/ #ifndef __ZLG_CAN_H #define __ZLG_CAN_H #include "dataType.h" /********************************************************************************************************* 选择CAN 模块时钟 *********************************************************************************************************/ #define FCAN8M 8000000UL #define FCAN6M 6000000UL #define FCAN2M 2000000UL #define FCAN48M 48000000UL #define FCAN FCAN48M /* 定义CAN模块时钟 */ /********************************************************************************************************* 宏定义接收、发送报文对象 *********************************************************************************************************/ #define RE_DATA_SN 0x00FFFFFFUL /* 按位选择接收数据帧的报文对象 */ #define RE_REMOTE_SN 0x7F000000UL /* 按位选择接收远程帧的报文对象 */ #define TX_MSG_SN 32 /* 发送报文对象编号 */ /********************************************************************************************************* 宏定义CAN报文缓冲区长度 *********************************************************************************************************/ #define CAN_BUF_RE_LENGTH 50 #define CAN_BUF_TX_LENGTH 50 /********************************************************************************************************* CAN 引脚连接配置(通常不需要更改) *********************************************************************************************************/ #define CAN0_GPIO_PERIPH SYSCTL_PERIPH_GPIOD /* CAN0Rx = PD0 CAN0Tx = PD1 */ #define CAN0_GPIO_BASE GPIO_PORTD_BASE #define CAN0_GPIO_PIN GPIO_PIN_0 | GPIO_PIN_1 #define CAN1_GPIO_PERIPH SYSCTL_PERIPH_GPIOF /* CAN1Rx = PF0 CAN1Tx = PF1 */ #define CAN1_GPIO_BASE GPIO_PORTF_BASE #define CAN1_GPIO_PIN GPIO_PIN_0 | GPIO_PIN_1 #define CAN2_GPIO_PERIPH SYSCTL_PERIPH_GPIOE /* CAN2Rx = PE4 CAN2Tx = PE5 */ #define CAN2_GPIO_BASE GPIO_PORTE_BASE #define CAN2_GPIO_PIN GPIO_PIN_4 | GPIO_PIN_5 /********************************************************************************************************* 函数返回值 *********************************************************************************************************/ #define CAN_ERROR 0 #define CAN_OK 1 #define BUSY 2 /* 表示当前队列正在发送 */ /********************************************************************************************************* CAN中断回调函数的消息类型(CAN节点状态) *********************************************************************************************************/ #define CAN_FRAM_RECV 0x01 /* 成功接收到数据帧或远程帧 */ #define CAN_FRAM_SEND 0x02 /* 发送完成 */ #define CAN_BUS_OFF 0x04 /* 节点脱离总线 */ #define CAN_SEND_FAIL 0x08 /* 发送失败 */ #define CAN_NO_ERROR 0x00 /* 没有错误 */ /********************************************************************************************************* 定义验收过滤验收方式 *********************************************************************************************************/ #define EXT_ID_FILTER 1 /* 验收扩展帧 */ #define STD_ID_FILTER 2 /* 验收标准帧 */ #define STD_EXT_FILTER 3 /* 验收标准帧和扩展帧 */ #define UNMASK 0x00000000UL /* 不使用ID滤波 */ #define MASK 0x1FFFFFFFUL /* 所有ID均参与验收滤波 */ /********************************************************************************************************* 波特率表索引宏定义 *********************************************************************************************************/ #define CANBAUD_1M 0 #define CANBAUD_500K 1 #define CANBAUD_250K 2 #define CANBAUD_125K 3 #define CANBAUD_100K 4 #define CANBAUD_50K 5 #define CANBAUD_25K 6 #define CANBAUD_20K 7 #define CANBAUD_10K 8 #define CANBAUD_5K 9 #define CANBAUD_2K5 10 /********************************************************************************************************* 帧类型及格式 *********************************************************************************************************/ #define STD_DATA 0xF0 /* 标准格式数据帧 */ #define XTD_DATA 0xF2 /* 扩展格式数据帧 */ #define STD_RMRQS 0xF1 /* 标准格式远程帧 */ #define XTD_RMRQS 0xF3 /* 扩展格式远程帧 */ #define XTD_MASK 0x02 /* 扩展帧掩码 */ #define RMRQS_MASK 0x01 /* 远程帧掩码 */ #define BUF_BLANK 0x00 /* 标记空白帧,用于队列写保护 */ /********************************************************************************************************* 定义CAN报文结构体 *********************************************************************************************************/ typedef struct { unsigned char ucTtypeFormat; /* 0~3 帧类型及格式 */ unsigned char ucDLC; /* 数据场长度 */ unsigned long ulID; /* CAN报文ID */ unsigned char ucDatBuf[8]; /* 报文数据场 */ }CANFRAME; /********************************************************************************************************* 定义CAN接收环形缓冲区结构 *********************************************************************************************************/ typedef struct { unsigned long ulWriteIndex; /* 缓存Buffer[]写下标 */ unsigned long ulReadIndex; /* 缓存Buffer[]读下标 */ BOOLEAN bIsFull; unsigned long ulLength; /* 记录缓存深度 */ CANFRAME *ptCanFramBuf; /* 指向数据场缓冲区 */ }CANCIRBUF; /********************************************************************************************************* 定义CAN控制器外设结构 *********************************************************************************************************/ typedef struct { unsigned long ulSysPeriph; /* CAN控制器系统外设 */ unsigned long ulBase; /* CAN控制器基址 */ unsigned long ulGpioPeriph; /* GPIO外设 */ unsigned long ulGpioBase; /* GPIO对应基址 */ unsigned long ulGpioPin; /* 对应引脚连接 */ } CANHARDWARE; /********************************************************************************************************* 定义CAN节点结构体 *********************************************************************************************************/ typedef struct { unsigned long ulBaseAddr; /* CAN控制器基址 */ unsigned char ucNodeState; /* 用于记录节点状态 */ unsigned char ucBaudIndex; /* 波特率参数索引 */ unsigned long ulBofTimer; /* 本节点脱离总线后的计时变量 */ unsigned long ulDaReObjMsk; /* 接收数据帧的报文对象,按位选通*/ unsigned long ulRmReObjMsk; /* 接收远程帧的报文对象,按位选通*/ unsigned long ulTxMsgObjNr; /* 按位标记发送报文对象 */ CANCIRBUF *ptCanReCirBuf; /* 指向本节点的接收缓冲区 */ CANCIRBUF *ptCanTxCirBuf; /* 指向本节点的发送缓冲区 */ void (*pfCanHandlerCallBack)(unsigned long ulMessage, long lParam1, long lParam2); //提供给中断处理函数canHandler()的回调函数,在收到数据帧或远程帧时调用 void (*pfIsrHandler)(void); /* CAN节点的中断服务函数 */ }CANNODEINFO; /********************************************************************************************************* 用于定义并初始化CAN节点结构体变量的宏 *********************************************************************************************************/ #define CANNODE(ulBaseAddr, ucBaudIndex, ulDaReObjMsk, ulRmReObjMsk, \ ulTxMsgObjNr,ptReCirBuf, pfCanHandlerCallBack, \ pfIsrHandler) \ { \ ulBaseAddr, \ 0, \ ucBaudIndex, \ 0, \ ulDaReObjMsk, \ ulRmReObjMsk, \ ulTxMsgObjNr, \ (CANCIRBUF *)ptReCirBuf, \ (CANCIRBUF *)0, \ pfCanHandlerCallBack, \ pfIsrHandler, \ } /********************************************************************************************************* 接口函数 *********************************************************************************************************/ extern INT8U canCirBufRead(CANCIRBUF *ptCanCirBuf, CANFRAME *ptCanFrame); extern INT8U canCirBufWrite(CANCIRBUF *ptCanCirBuf, CANFRAME *ptCanFrame); extern INT8U canCirBufSend(CANNODEINFO *ptCanNode, CANCIRBUF *ptCanCirBuf); extern void canFrameSend(CANNODEINFO *ptCanNode, CANFRAME *pCANFrame); extern void canIntEnable (CANNODEINFO *ptCanNode); extern void canHandler(CANNODEINFO *ptCanNode); extern void canNodeBusOn(CANNODEINFO *ptCanNode); extern void canNodeCreate(CANNODEINFO *ptCanNode, unsigned long ulBaseAddr, unsigned char ucBaudIndex, unsigned long ulDaReObjMsk, unsigned long ulRmReObjMsk, unsigned long ulTxMsgObjNr, CANCIRBUF *ptReCirBuf, void (*pfCanHandlerCallBack)(unsigned long ulMessage, long lParam1, long lParam2), void (*pfIsrHandler)(void)); extern void canNodeCallBackSet(CANNODEINFO *ptCanNode, void (*pfHandlerCallBack)(unsigned long ulMessage, long lParam1, long lParam2)); extern void canAcceptFilterSet(CANNODEINFO *ptCanNode, unsigned long ulFrameID, unsigned long ulFrameIDMask, unsigned char ucFramType); extern void canReMsgObjSet(CANNODEINFO *ptCanNode, unsigned long ulMsgObjMask, unsigned long ulFrameID, unsigned long ulFrameIDMask, unsigned char ucFramType, unsigned char ucMsgType); extern INT8U canApplyInit(CANNODEINFO *ptCanNode, unsigned long ulFrameID, unsigned long ulFrameIDMsk, unsigned char ucFramType); /********************************************************************************************************* 提供给外部引用的结构体常量 *********************************************************************************************************/ extern const CANFRAME GtCanFrameInit; /* 已初始化为空白的CAN缓存块 */ #endif