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

📄 drv_can.h

📁 该模板使用于周立功公司研发的EasyARM2100系列开发板
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __drv_can_h
#define __drv_can_h


#define	UINT8	unsigned	char
#define	UINT16	unsigned	short
#define	UINT32	unsigned	int
#define	UINT32L	unsigned	long
#define	INT8	char
#define	INT16	short
#define	INT32	int
#define	INT32L	long
#define	INT64L	long 		long
#define	F32		float
#define	F64		double
#define	FL64	long 		double






//=============================================================================
#define	BPS_125K				0x002b4005			//CAN的波特率500Kbps时总线时序器的值(12MHZ晶振)

//全局应用定义
#define	CAN_MAX_NUM				2					//微处理器所含有的最大CAN模块的数目
#define	CAN_OFFSET_ADR			0x4000				//CAN各模块寄存器之间的线性差异
#define	USE_CAN_RCV_BUF_SIZE	0x20				//驱动程序使用的接收环形缓冲区的大小

//各路CAN独立应用定义
#define	USE_MODE_CAN1			0x00				//CAN模块1的工作模式定义
#define	USE_MODE_CAN2			0x00				//CAN模块2的工作模式定义

#define	USE_EWL_CAN1			0x60				//CAN模块1的错误报警界限值
#define	USE_EWL_CAN2			0x60				//CAN模块2的错误报警界限值

#define	USE_INT_CAN1			0x7FF				//CAN模块1的中断使能方式
#define	USE_INT_CAN2			0x7FF				//CAN模块2的中断使能方式

#define	USE_TPM_CAN1			0x01				//CAN模块1的发送优先级模式
#define	USE_TPM_CAN2			0x01				//CAN模块2的发送优先级模式

#define	USE_BTR_CAN1			BPS_125K			//CAN模块1的总线波特率
#define	USE_BTR_CAN2			BPS_125K			//CAN模块2的总线波特率


//=============================================================================
//验收滤波器RAM首地址
#define	CANAFRAM_GADR			0xE0038000

//CAN寄存器基地址定义
#define 	CANMOD_BADR			0xE0044000     									//模式寄存器
#define 	CANCMR_BADR			0xE0044004      								//命令寄存器
#define 	CANGSR_BADR			0xE0044008      								//全局状态寄存器
#define 	CANICR_BADR			0xE004400C     									//中断及捕获寄存器
#define 	CANIER_BADR			0xE0044010      								//中断使能寄存器
#define 	CANBTR_BADR			0xE0044014      								//总线时序寄存器
#define 	CANEWL_BADR			0xE0044018      								//报警限制寄存器
#define 	CANSR_BADR  		0xE004401C      								//状态寄存器
#define 	CANRFS_BADR			0xE0044020      								//接收帧信息寄存器
#define		CANRID_BADR			0xE0044024      								//接收报文ID寄存器

#define 	CANRDA_BADR			0xE0044028      								//接收数据1~4
#define 	CANRDB_BADR 		0xE004402C      								//接收数据5~8
#define 	CANTFI1_BADR		0xE0044030      								//CAN发送缓冲区1帧信息寄存器
#define 	CANTID1_BADR		0xE0044034      								//CAN发送缓冲区1报文ID寄存器
#define 	CANTDA1_BADR		0xE0044038      								//CAN发送缓冲区1发送数据1~4寄存器
#define 	CANTDB1_BADR		0xE004403C      								//CAN发送缓冲区1发送数据5~8寄存器
#define 	CANTFI2_BADR		0xE0044040      								//CAN发送缓冲区2帧信息寄存器
#define 	CANTID2_BADR		0xE0044044      								//CAN发送缓冲区2报文ID寄存器
#define 	CANTDA2_BADR		0xE0044048     									//CAN发送缓冲区2发送数据1~4寄存器
#define 	CANTDB2_BADR		0xE004404C      								//CAN发送缓冲区2发送数据5~8寄存器
#define 	CANTFI3_BADR		0xE0044050      								//CAN发送缓冲区3帧信息寄存器
#define 	CANTID3_BADR		0xE0044054      								//CAN发送缓冲区3报文ID寄存器
#define 	CANTDA3_BADR		0xE0044058      								//CAN发送缓冲区3发送数据1~4寄存器
#define 	CANTDB3_BADR		0xE004405C      								//CAN发送缓冲区3发送数据5~8寄存器

//定义RxBUF的基地址
#define	RxBUF_BADR				0xE0044020		

//定义TxBUF的基地址
#define	TxBUF1_BADR				0xE0044030										//CAN发送缓冲区1首地址
#define	TxBUF2_BADR				0xE0044040										//CAN发送缓冲区2首地址
#define	TxBUF3_BADR				0xE0044050										//CAN发送缓冲区3首地址

//定义全局应用的寄存器
#define 	CANTxSR_GADR   		0xE0040000      								//发送状态寄存器
#define 	CANRxSR_GADR      	0xE0040004      								//接收状态寄存器
#define 	CANMSR_GADR       	0xE0040008      								//错误状态寄存器
#define 	CANAFMR_GADR      	0xE003C000      								//验收滤波控制
#define 	CANSFF_sa_GADR      0xE003C004      								//标准帧表格
#define 	CANSFF_GRP_sa_GADR 	0xE003C008      								//标准帧组表格
#define 	CANEFF_sa_GADR      0xE003C00C      								//扩展帧表格
#define 	CANEFF_GRP_sa_GADR 	0xE003C010      								//扩展帧组表格
#define 	CANENDofTable_GADR  0xE003C014      								//表格结束地址
#define 	CANLUTerrAd_GADR   	0xE003C018      								//LUT错误地址地址寄存器
#define 	CANLUTerr_GADR      0xE003C01C										//LUT错误寄存器


//CAN控制器通道定义
typedef 	enum		_cannum_				
{ 
#if 	CAN_MAX_NUM==4															//微处理器中含有4路CAN
	CAN1 = 0, 																	//CAN1模块
	CAN2,																		//CAN2模块
	CAN3,																		//CAN3模块
	CAN4																		//CAN4模块
#elif	CAN_MAX_NUM==2															//微处理器中含有2路CAN
	CAN1 = 0, 																	//CAN1模块
	CAN2																		//CAN2模块
#endif
}eCANNUM;		

//CAN滤波器标准帧表格数据类型定义
typedef	union		_fullcansffline_
{
	UINT32	Word;
	struct	
	{
		UINT32	CANSFFID1 	:11;	
		UINT32	RSV_BIT1	:1;	
		UINT32	EN_BIT1 	:1;	
		UINT32	Num_BIT1 	:3;	
		UINT32	CANSFFID2 	:11;
		UINT32	RSV_BIT2	:1;	
		UINT32	EN_BIT2 	:1;	
		UINT32	Num_BIT2 	:3;	
	}Bits;
}uFullCANSFFLine,*P_uFullCANSFFLine;

//CAN滤波器扩展帧表格数据类型定义
typedef	union		_fullcaneffline_
{
	UINT32	Word;
	struct	
	{
		UINT32	CANEFFID1 	:29;
		UINT32	Num_BIT 	:3;	
	}Bits;
}uFullCANEFFLine,*P_uFullCANEFFLine;

//CAN模式寄存器数据类型定义
typedef	union		_canmod_
{
	UINT32	Word;
	struct	{
		UINT32	RM_BIT 		:1;													//定义RM位
		UINT32	LOM_BIT 	:1;													//定义LOM位
		UINT32	STM_BIT		:1;													//定义STM位
		UINT32	TPM_BIT 	:1;													//定义TPM位
		UINT32	SM_BIT 		:1;													//定义SM位
		UINT32	RPM_BIT 	:1;													//定义RPM位
		UINT32	RSV_BIT1 	:1;													//保留位
		UINT32	TM_BIT 		:1;													//定义TM位
		UINT32	RSV_BIT24	:24;												//保留位
	}Bits;
}uCANMod,*P_uCANMod;

//命令寄存器的数据类型定义
typedef	union		_cancmr_
{
	UINT32	Word;
	struct	
	{
		UINT32	TR_BIT 		:1;													//定义TR位
		UINT32	AT_BIT 		:1;													//定义AT位
		UINT32	RRB_BIT 	:1;													//定义RRB位
		UINT32	CDO_BIT 	:1;	
		UINT32	SRR_BIT 	:1;													//定义SRR位
		UINT32	STB1_BIT 	:1;													//定义SEND TxBUF1位
		UINT32	STB2_BIT 	:1;													//定义SEND TxBUF2位
		UINT32	STB3_BIT 	:1;													//定义SEND TxBUF3位
		UINT32	RSV_BIT24	:24;												//保留位
	}Bits;
}uCANCMR,*P_uCANCMR;

//全局状态寄存器的数据类型定义
typedef	union		_cangsr_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	RBS_BIT 	:1;													//接收缓冲区状态位
		UINT32	DOS_BIT 	:1; 												//数据溢出状态位
		UINT32	TBS_BIT 	:1;													//发送缓冲区状态锁定位
		UINT32	TCS_BIT 	:1;													//发送完成状态位
		UINT32	RS_BIT 		:1;													//正在接收状态
		UINT32	TS_BIT 		:1;													//正在发送状态
		UINT32	ES_BIT	 	:1;													//错误状态
		UINT32	BS_BIT 		:1;													//总线关闭
		UINT32	RSV_BIT8	:8;													//保留位
		UINT32	RXERR_BIT 	:8;													//接收错误计数
		UINT32	TXERR_BIT 	:8;													//发送错误计数
	}Bits;
}uCANGSR,*P_uCANGSR;

//中断捕获寄存器的数据类型定义
typedef	union		_canicr_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	RI_BIT 		:1;													//接收中断位
		UINT32	TI1_BIT 	:1;													//TxBUF1发送成功中断位
		UINT32	EI_BIT 		:1;													//错误报警中断位
		UINT32	DOI_BIT 	:1;													//数据溢出中断位
		UINT32	WUI_BIT 	:1;													//睡眠唤醒中断位
		UINT32	EPI_BIT 	:1;													//错误认可中断位
		UINT32	ALI_BIT 	:1;													//仲裁错误中断位
		UINT32	BEI_BIT 	:1;													//总线错误中断
		UINT32	IDI_BIT 	:1;													//接收到CAN标识符中断位
		UINT32	TI2_BIT 	:1;													// TxBUF2发送成功中断位
		UINT32	TI3_BIT 	:1;													// TxBUF3发送成功中断位
		UINT32	RSV_BIT5	:5;													//保留位
		UINT32	ERRBIT_BIT 	:5;													//错误代码捕获
		UINT32	ERRDIR_BIT 	:1;													//错误方向
		UINT32	ERRC_BIT 	:2;													//错误类型
		UINT32	ALCBIT_BIT 	:5;													//仲裁错误代码捕获
		UINT32	RSV_BIT3	:3;													//保留
	}Bits;
}uCANICR,*P_uCANICR;

//中断使能寄存器的数据类型定义
typedef	union		_canier_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	RIE_BIT 	:1;													//接收中断使能位
		UINT32	TIE1_BIT 	:1;													//TxBUF1发送完成中断使能位
		UINT32	EIE_BIT 	:1;													//错误报警中断使能位
		UINT32	DOIE_BIT 	:1;													//数据溢出中断使能位
		UINT32	WUIE_BIT 	:1;													//睡眠模式唤醒中断使能位
		UINT32	EPIE_BIT 	:1;													//错误认可中断使能位
		UINT32	ALIE_BIT 	:1;													//仲裁丢失中断使能位
		UINT32	BEIE_BIT 	:1;													//总线错误中断使能位
		UINT32	IDIE_BIT	:1;													//接收到CAN标识符中断使能位
		UINT32	TIE2_BIT 	:1;													//TxBUF2发送完成中断使能位
		UINT32	TIE3_BIT	:1;													//TxBUF3发送完成中断使能位
		UINT32	RSV_BIT21	:21;												//保留位
	}Bits;
}uCANIER,*P_uCANIER;

//总线时序寄存器的数据类型定义
typedef	union		_canbtr_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	BRP_BIT 	:10;												//预分频位组合定义
		UINT32	RSV_BIT4	:4;													//保留位
		UINT32	SJW_BIT 	:2;													//同步跳转宽度
		UINT32	TSEG1_BIT 	:4;													//时间段1
		UINT32	TSEG2_BIT 	:3;													//时间段2
		UINT32	SAM_BIT 	:1;													//采样模式位
		UINT32	RSV_BIT8	:8;													//保留
	}Bits;
}uCANBTR,*P_uCANBTR;

//出错警告界限寄存器的数据类型定义
typedef	union	_canewl_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	EWL_BIT 	:8;													//出错警告界限值
		UINT32	RSV_BIT24	:24;												//保留位
	}Bits;
}uCANEWL,*P_uCANEWL;

//状态寄存器的数据类型定义
typedef	union	_cansr_
{
	UINT32	Word;																//字操作定义
	struct	
	{
		UINT32	RBS1_BIT 	:1;													//接收缓冲区有效
		UINT32	DOS1_BIT 	:1;													//数据溢出
		UINT32	TBS1_BIT 	:1;													//TxBUF1锁定
		UINT32	TCS1_BIT 	:1;													//TxBUF1的数据发送完成
		UINT32	RS1_BIT 	:1;													//正在接收
		UINT32	TS1_BIT 	:1;													//TxBUF1的数据正在发送
		UINT32	ES1_BIT 	:1;													//错误认可
		UINT32	BS1_BIT 	:1;													//总线错误
		UINT32	RBS2_BIT 	:1;													//
		UINT32	DOS2_BIT 	:1;													//
		UINT32	TBS2_BIT 	:1;													// TxBUF2锁定
		UINT32	TCS2_BIT 	:1;													// TxBUF2的数据发送完成
		UINT32	RS2_BIT 	:1;													//
		UINT32	TS2_BIT 	:1;													// TxBUF2的数据正在发送
		UINT32	ES2_BIT 	:1;													//
		UINT32	BS2_BIT 	:1;													//
		UINT32	RBS3_BIT 	:1;													//
		UINT32	DOS3_BIT 	:1;													//
		UINT32	TBS3_BIT 	:1;													// TxBUF3锁定
		UINT32	TCS3_BIT 	:1;													// TxBUF3的数据发送完成
		UINT32	RS3_BIT 	:1;													//
		UINT32	TS3_BIT 	:1;													// TxBUF3的数据正在发送
		UINT32	ES3_BIT 	:1;													//
		UINT32	BS3_BIT 	:1;													//
		UINT32	RSV_BIT8	:8;													//
	}Bits;
}uCANSR,*P_uCANSR;

//CANRFS寄存器的数据类型定义
typedef	union		_canrfs_
{
	UINT32		Word;															//字操作定义
	struct	
	{
		UINT32	IDIN_BIT 	:10;												//ID索引值
		UINT32	BP_BIT 		:1;													//BP
		UINT32	RSV_BIT5 	:5;													//保留

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -