📄 canpredef.h
字号:
// File :CANPreDef.h
// Describe :The LPC2119/2129/2194/2292/2294 CAN block driver.
// Author :exdata
// Ver :0.95
// Update :2004.06.27
// Copyright:zlgmcu
#ifndef __CANPREDEF_H__
#define __CANPREDEF_H__
//////////////////////////////////////////////////////////////////////
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#define NULL ((void *)0)
#endif
#if 1
typedef unsigned int BOOL;
typedef unsigned int UINT32;
#endif
//////////////////////////////////////////////////////////////////////
#define UNREFERENCED_PARAMETER(P) \
{ \
(P) = (P); \
} \
/////////////////////////////////////////////////////////////////////
// CAN register typedef
typedef union tag_CANMOD
{
UINT32 dwValue;
struct tagBits
{
UINT32 RM :1; //复位
UINT32 LOM :1; //只听
UINT32 STM :1; //自测
UINT32 TPM :1; //优先权指定
UINT32 SM :1; //睡眠
UINT32 RPM :1; //翻转极性模式
UINT32 RSV1 :1; //保留
UINT32 TM :1; //测试模式
UINT32 RSV24 :24; //保留
}Bits;
}_CANMOD,*P_CANMOD;
typedef union tag_CANCMR
{
UINT32 dwValue;
struct tagBits
{
UINT32 TR :1; //发送请求
UINT32 AT :1; //中止发送
UINT32 RRB :1; //释放接收缓冲区
UINT32 CDO :1; //清除数据溢出
UINT32 SRR :1; //自接收请求
UINT32 STB1 :1; //选择发送Tx 缓冲区1 的内容
UINT32 STB2 :1; //选择发送Tx 缓冲区2 的内容
UINT32 STB3 :1; //选择发送Tx 缓冲区3 的内容
UINT32 RSV24 :24; //保留
}Bits;
}_CANCMR,*P_CANCMR;
typedef union tag_CANGSR
{
UINT32 dwValue;
struct tagBits
{
UINT32 RBS :1; //接收缓冲区状态
UINT32 DOS :1; //数据溢出状态
UINT32 TBS :1; //发送缓冲区状态
UINT32 TCS :1; //发送结束状态
UINT32 RS :1; //接收状态
UINT32 TS :1; //发送状态
UINT32 ES :1; //错误状态
UINT32 BS :1; //总线状态
UINT32 RSV8 :8; //...
UINT32 RXERR :8; //Rx 错误计数器的当前值。
UINT32 TXERR :8; //Tx 错误计数器的当前值。
}Bits;
}_CANGSR,*P_CANGSR;
typedef union tag_CANICR
{
UINT32 dwValue;
struct tagBits
{
UINT32 RI :1; //接收中断
UINT32 TI1 :1; //发送中断1
UINT32 EI :1; //出错警告中断
UINT32 DOI :1; //数据溢出中断
UINT32 WUI :1; //唤醒中断
UINT32 EPI :1; //错误认可中断
UINT32 ALI :1; //仲裁丢失中断
UINT32 BEI :1; //总线错误中断
UINT32 IDI :1; //ID 准备就绪中断
UINT32 TI2 :1; //发送中断2
UINT32 TI3 :1; //发送中断3
UINT32 RSV5 :5; //...
UINT32 ERRBIT :5; //错误码捕获
UINT32 ERRDIR :1; //传输方向捕获
UINT32 ERRC :2; //错误类型被捕获
UINT32 ALCBIT :5; //仲裁丢失,数据帧的位编号被捕获
UINT32 RSV3 :3; //...
}Bits;
}_CANICR,*P_CANICR;
typedef union tag_CANIER
{
UINT32 dwValue;
struct tagBits
{
UINT32 RIE :1; //接收器中断使能
UINT32 TIE1 :1; //发送中断使能(1)
UINT32 EIE :1; //出错警告中断使能
UINT32 DOIE :1; //数据溢出中断使能
UINT32 WUIE :1; //唤醒中断使能
UINT32 EPIE :1; //错误认可中断使能
UINT32 ALIE :1; //仲裁丢失中断使能
UINT32 BEIE :1; //总线错误中断使能
UINT32 IDIE :1; //ID 准备就绪中断使能
UINT32 TIE2 :1; //发送中断使能(2)
UINT32 TIE3 :1; //发送中断使能(3)
UINT32 RSV21 :21; //...
}Bits;
}_CANIER,*P_CANIER;
typedef union tag_CANBTR
{
UINT32 dwValue;
struct tagBits
{
UINT32 BRP :10; //波特率预分频器
UINT32 RSV4 :4; //...
UINT32 SJW :2; //同步跳变宽度
UINT32 TSEG1 :4; //指定同步点到采样点的延时时间
UINT32 TSEG2 :3; //采样点到下个指定同步点的延时时间
UINT32 SAM :1; //总线采样3
UINT32 RSV8 :8; //..
}Bits;
}_CANBTR,*P_CANBTR;
typedef union tag_CANEWL
{
UINT32 dwValue;
struct tagBits
{
UINT32 EWL :8; //出错警告界限
UINT32 RSV24 :24; //...
}Bits;
}_CANEWL,*P_CANEWL;
typedef union tag_CANSR
{
UINT32 dwValue;
struct tagBits
{
UINT32 RBS1 :1; //这些位与GSR 寄存器的RBS 位相同
UINT32 DOS1 :1; //这些位与GSR 寄存器的DOS 位相同
UINT32 TBS1 :1; //软件可以向这个Tx 缓冲区
UINT32 TCS1 :1; //这个Tx 缓冲区的所有发送请求都已经成功处理
UINT32 RS1 :1; //这些位与GSR 寄存器的RS 位相同
UINT32 TS1 :1; //CAN 控制器正在发送Tx 缓冲区的信息
UINT32 ES1 :1; //这些位与GSR 寄存器的ES 位相同
UINT32 BS1 :1; //这些位与GSR 寄存器的BS 位相同
UINT32 RBS2 :1; //这些位与GSR 寄存器的RBS 位相同
UINT32 DOS2 :1; //这些位与GSR 寄存器的DOS 位相同
UINT32 TBS2 :1; //软件可以向这个Tx 缓冲区
UINT32 TCS2 :1; //这个Tx 缓冲区的所有发送请求都已经成功处理
UINT32 RS2 :1; //这些位与GSR 寄存器的RS 位相同
UINT32 TS2 :1; //CAN 控制器正在发送Tx 缓冲区的信息
UINT32 ES2 :1; //这些位与GSR 寄存器的ES 位相同
UINT32 BS2 :1; //这些位与GSR 寄存器的BS 位相同
UINT32 RBS3 :1; //这些位与GSR 寄存器的RBS 位相同
UINT32 DOS3 :1; //这些位与GSR 寄存器的DOS 位相同
UINT32 TBS3 :1; //软件可以向这个Tx 缓冲区
UINT32 TCS3 :1; //这个Tx 缓冲区的所有发送请求都已经成功处理
UINT32 RS3 :1; //这些位与GSR 寄存器的RS 位相同
UINT32 TS3 :1; //CAN 控制器正在发送Tx 缓冲区的信息
UINT32 ES3 :1; //这些位与GSR 寄存器的ES 位相同
UINT32 BS3 :1; //这些位与GSR 寄存器的BS 位相同
UINT32 RSV8 :8; //...
}Bits;
}_CANSR,*P_CANSR;
typedef union tag_CANRFS
{
UINT32 dwValue;
struct tagBits
{
UINT32 IDIN :10; //验收滤波器利用该值来匹配接收标识符
UINT32 BP :1; //当前接收的信息处于AF 旁路(Bypass)模式
UINT32 RSV5 :5; //...
UINT32 DLC :4; //信息的数据长度代码
UINT32 RSV10 :10; //...
UINT32 RTR :1; //远程发送请求位
UINT32 FF :1; //信息包含29 位标识符。
}Bits;
}_CANRFS,*P_CANRFS;
typedef union tag_CANID
{
UINT32 dwValue;
UINT32 ID11Bits;
UINT32 ID29Bits;
}_CANID,*P_CANID;
typedef union tag_CANDA
{
UINT32 dwValue;
struct tagBits
{
UINT32 DATA1 :8; //
UINT32 DATA2 :8; //
UINT32 DATA3 :8; //
UINT32 DATA4 :8; //
}Bits;
}_CANDA,*P_CANDA;
typedef union tag_CANDB
{
UINT32 dwValue;
struct tagBits
{
UINT32 DATA5 :8; //
UINT32 DATA6 :8; //
UINT32 DATA7 :8; //
UINT32 DATA8 :8; //
}Bits;
}_CANDB,*P_CANDB;
typedef union tag_CANTFI
{
UINT32 dwValue;
struct tagBits
{
UINT32 PRIO :8; //使能的Tx缓冲区将竞争信息的发送权
UINT32 RSV8 :8; //...
UINT32 DLC :4; //DLC
UINT32 RSV10 :10; //...
UINT32 RTR :1; //该值将从下一条发送信息的RTR 位中发送出去
UINT32 FF :1; //发送的下一条信息包含29 位的标识符
}Bits;
}_CANTFI,*P_CANTFI;
typedef union tag_CANTxSR
{
UINT32 dwValue;
struct tagBits
{
UINT32 TS1 :1; //CAN 控制器正在发送信息
UINT32 TS2 :1; //CAN 控制器正在发送信息
UINT32 TS3 :1; //CAN 控制器正在发送信息
UINT32 TS4 :1; //CAN 控制器正在发送信息
UINT32 RSV4A :4; //...
UINT32 TBS1 :1; //Tx 缓冲区均可供CPU 使用
UINT32 TBS2 :1; //Tx 缓冲区均可供CPU 使用
UINT32 TBS3 :1; //Tx 缓冲区均可供CPU 使用
UINT32 TBS4 :1; //Tx 缓冲区均可供CPU 使用
UINT32 RSV4B :4; //...
UINT32 TCS1 :1; //所有请求发送都已成功处理
UINT32 TCS2 :1; //所有请求发送都已成功处理
UINT32 TCS3 :1; //所有请求发送都已成功处理
UINT32 TCS4 :1; //所有请求发送都已成功处理
UINT32 RVS12 :12; //...
}Bits;
}_CANTxSR,*P_CANTxSR;
typedef union tag_CANRxSR
{
UINT32 dwValue;
struct tagBits
{
UINT32 RS1 :1; //CAN 控制器正在接收数据
UINT32 RS2 :1; //CAN 控制器正在接收数据
UINT32 RS3 :1; //CAN 控制器正在接收数据
UINT32 RS4 :1; //CAN 控制器正在接收数据
UINT32 RSV4A :4; //...
UINT32 RBS1 :1; //CAN 控制器接收到可用的信息
UINT32 RBS2 :1; //CAN 控制器接收到可用的信息
UINT32 RBS3 :1; //CAN 控制器接收到可用的信息
UINT32 RBS4 :1; //CAN 控制器接收到可用的信息
UINT32 RSV4B :4; //...
UINT32 DOS1 :1; //由于前面传输到CAN 控制器的数据未被尽快读出而引起信息丢失
UINT32 DOS2 :1; //由于前面传输到CAN 控制器的数据未被尽快读出而引起信息丢失
UINT32 DOS3 :1; //由于前面传输到CAN 控制器的数据未被尽快读出而引起信息丢失
UINT32 DOS4 :1; //由于前面传输到CAN 控制器的数据未被尽快读出而引起信息丢失
UINT32 RSV12 :12; //...
}Bits;
}_CANRxSR,*P_CANRxSR;
typedef union tag_CANMSR
{
UINT32 dwValue;
struct tagBits
{
UINT32 ES1 :1; //错误计数器两者或其中之一的计数值达到EWL
UINT32 ES2 :1; //错误计数器两者或其中之一的计数值达到EWL
UINT32 ES3 :1; //错误计数器两者或其中之一的计数值达到EWL
UINT32 ES4 :1; //错误计数器两者或其中之一的计数值达到EWL
UINT32 RSV4 :4; //...
UINT32 BS1 :1; //CAN 控制器正在处理总线活动
UINT32 BS2 :1; //CAN 控制器正在处理总线活动
UINT32 BS3 :1; //CAN 控制器正在处理总线活动,仅用于LPC2294
UINT32 BS4 :1; //CAN 控制器正在处理总线活动,仅用于LPC2294
UINT32 RSV20 :20; //...
}Bits;
}_CANMSR,*P_CANMSR;
typedef union tag_CANAFMR
{
UINT32 dwValue;
struct tagBits
{
UINT32 AccOff :1; //如果AccBP 为0,验收滤波器不工作。所有CAN 总线上的Rx 信息均被忽略。
UINT32 AccBP :1; //所有Rx 信息被使能的CAN 控制器接收。ByPass
UINT32 eFCAN :1; //由验收滤波器自身来处理所选CAN 总线上指定标准ID 值的信息的接收和保存。
UINT32 RSV29 :29; //...
}Bits;
}_CANAFMR,*P_CANAFMR;
/////////////////////////////////////////////////////////////////////////
typedef struct tag_CANTxBUF
{
_CANTFI fi; //CAN发送信息
_CANID id; //标识符
_CANDA da; //数据前4字节
_CANDB db; //数据后4字节
}_CANTxBUF,*P_CANTxBUF;
typedef struct tag_CANRxBUF
{
_CANRFS fs; //CAN接收信息
_CANID id; //标识符
_CANDA da; //数据前4字节
_CANDB db; //数据后4字节
}_CANRxBUF,*P_CANRxBUF;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -