📄 zlg_can.h
字号:
/****************************************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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -