⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canpredef.h

📁 一个基于arm的can通讯的源代码 目前还没有使用任何rtos 可以很方便的嵌入到任何rtos中去
💻 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 + -