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

📄 canreg.h

📁 基于LPC2119的CAN驱动及例子 循环发送实例程序 简单的CAN中继器实例
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**                                 http://www.zlgmcu.com
**-------------------------------------文件信息--------------------------------------------------------
**	文   件  	名:	CANREG.H
** 	版  		本:	v1.0
** 	日		期:	2004年2月23日
**	描		述:	CAN模块寄存器类型定义、地址定义头文件
********************************************************************************************************/
#ifndef	_CANREG_H_
#define	_CANREG_H_
/*
**********************************************************************************************************************
**   验收滤波器RAM首地址
**********************************************************************************************************************
*/
#define	CANAFRAM_BADR				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;		

//#define REGAFRAM         (*((volatile INT32U *) 0xE0038000))      /* lpc2119\lpc2129\lpc2292\lpc2294 only */

/*
*********************************************************************************************************************
**   定义 CANMOD 寄存器:
1.This register controls the basic operating mode of the CAN Controller. 
2.Bits not listed read as 0 and should be written as 0.
*********************************************************************************************************************
*/
typedef	union		_canmod_
{
	INT32U	Word;
	struct	{
		INT32U	RM 		:1;		//定义RM位(复位位)
		INT32U	LOM 	:1;		//定义LOM位(只听模式位)
		
		INT32U	STM		:1;		//定义STM位 "0"发送的信息必须被应答才被认可
									//			"1"自测试模式,CANCMR的SRR位一起使用,可以达到自发自收的效果
									
		INT32U	TPM 	:1;		//定义TPM位 "0"3个发送缓冲区的优先级由各自的CAN ID决定
									//			"1"3个发送缓冲区的优先级由各自的Tx优先级域决定
									
		INT32U	SM 		:1;		//定义SM位(睡眠模式位)
		
		INT32U	RPM 	:1;		//定义RPM位 "0"如果传输的是显性位,Rx和Tx脚为低电平
									//			"1"翻转极性模式--如果传输的是显性位,Rx脚为高电平
									
		INT32U	RSV1 	:1;		//保留位
		INT32U	TM 		:1;		//定义TM位(测试模式)
		INT32U	RSV24	:24;	//保留位
	}Bits;
}uCANMod,*P_uCANMod;

#define 	CANMOD(CanNum)		(*((volatile P_uCANMod)(CANMOD_BADR+CanNum* CAN_OFFSET_ADR)))

/*
**********************************************************************************************************************
**   定义 CANCMR 寄存器:
1.Writing to this write-only register initiates an action. 
2.Bits not listed should be written as 0. Reading this register yields zeroes.
**********************************************************************************************************************
*/
typedef	union		_cancmr_
{
	INT32U	Word;
	struct	
	{
		INT32U	TR 		:1;		//定义TR位(发送请求)
		INT32U	AT 		:1;		//定义AT位(发送中止)
		INT32U	RRB 	:1;		//定义RRB位(接收缓冲区释放)
		INT32U	CDO 	:1;		//清除数据溢出位
		INT32U	SRR 	:1;		//定义SRR位(自接收请求)
		INT32U	STB1 	:1;		//定义SEND TxBUF1位(选择BUF1发送)
		INT32U	STB2 	:1;		//定义SEND TxBUF2位(选择BUF2发送)
		INT32U	STB3 	:1;		//定义SEND TxBUF3位(选择BUF3发送)
		INT32U	RSV24	:24;	//保留位
	}Bits;
}uCANCMR,*P_uCANCMR;

#define 	CANCMR(CanNum)		(*((volatile P_uCANCMR)(CANCMR_BADR+CanNum* CAN_OFFSET_ADR )))
/*
************************************************************************************************************************
**   定义 CANGSR 寄存器:
1.This register is read-only, except that the Error Counters can be written when the RM bit in the CANMOD register is 1.
2.Bits not listed read as 0 and should be written as 0.
************************************************************************************************************************
*/
typedef	union		_cangsr_
{
	INT32U	Word;				//字操作定义
	struct	
	{
		INT32U	RBS 	:1;	//接收缓冲区状态位
		INT32U	DOS 	:1; //数据溢出状态位
		INT32U	TBS 	:1;	//发送缓冲区状态锁定位
		INT32U	TCS 	:1;	//发送完成状态位
		INT32U	RS 		:1;	//正在接收状态
		INT32U	TS 		:1;	//正在发送状态
		INT32U	ES	 	:1;	//错误状态
		INT32U	BS 		:1;	//总线关闭
		INT32U	RSV8	:8;	//保留位
		INT32U	RXERR 	:8;	//接收错误计数
		INT32U	TXERR 	:8;	//发送错误计数
	}Bits;
}uCANGSR,*P_uCANGSR;

#define 	CANGSR(CanNum)		(*((volatile P_uCANGSR)( CANGSR_BADR+CanNum* CAN_OFFSET_ADR ))) 
/*
**********************************************************************************************************************
**   定义 CANICR 寄存器:
1.Bits in this register indicate information about events on the CAN bus. This register is read-only.
2.Bits not listed read as 0 and should be written as 0.
3.The clearing of bits 1-9 and the releasing of bits 16-23 and 24-31 all occur on any read from CANICR,
  regardless of whether part or all of the register is read.This means that software should always read CANICR as a word,
  and and process and deal with all bits of the register as appropriate for the application.
**********************************************************************************************************************
*/
typedef	union		_canicr_
{
	INT32U	Word;				//字操作定义
	struct	
	{
		INT32U	RI 		:1;	//接收中断位
		INT32U	TI1 	:1;	//TxBUF1发送成功中断位
		INT32U	EI 		:1;	//错误报警中断位
		INT32U	DOI 	:1;	//数据溢出中断位
		INT32U	WUI 	:1;	//睡眠唤醒中断位
		INT32U	EPI 	:1;	//错误认可中断位
		INT32U	ALI 	:1;	//仲裁错误中断位
		INT32U	BEI 	:1;	//总线错误中断
		INT32U	IDI 	:1;	//接收到CAN标识符中断位
		INT32U	TI2 	:1;	// TxBUF2发送成功中断位
		INT32U	TI3 	:1;	// TxBUF3发送成功中断位
		INT32U	RSV5	:5;	//保留位
		INT32U	ERRBIT 	:5;	//错误代码捕获
		INT32U	ERRDIR 	:1;	//错误方向
		INT32U	ERRC 	:2;	//错误类型
		INT32U	ALCBIT 	:5;	//仲裁错误代码捕获
		INT32U	RSV3	:3;	//保留
	}Bits;
}uCANICR,*P_uCANICR;

#define 	CANICR(CanNum)		(*((volatile P_uCANICR)( CANICR_BADR+CanNum* CAN_OFFSET_ADR ))) 
/*
**********************************************************************************************************************
**   定义 CANIER 寄存器:
1.This read/write register controls whether various events on the CAN controller will result in an interrupt.
2.Bits 7:0 in this register correspond 1-to-1 with bits 7:0 in the CANICR register.
**********************************************************************************************************************
*/
typedef	union		_canier_
{
	INT32U	Word;			//字操作定义
	struct	
	{
		INT32U	RIE 	:1;	//接收中断使能位
		INT32U	TIE1 	:1;	//TxBUF1发送完成中断使能位
		INT32U	EIE 	:1;	//错误报警中断使能位
		INT32U	DOIE 	:1;	//数据溢出中断使能位
		INT32U	WUIE 	:1;	//睡眠模式唤醒中断使能位
		INT32U	EPIE 	:1;	//错误认可中断使能位
		INT32U	ALIE 	:1;	//仲裁丢失中断使能位
		INT32U	BEIE 	:1;	//总线错误中断使能位
		INT32U	IDIE	:1;	//接收到CAN标识符中断使能位
		INT32U	TIE2 	:1;	//TxBUF2发送完成中断使能位
		INT32U	TIE3	:1;	//TxBUF3发送完成中断使能位
		INT32U	RSV21	:21;//保留位
	}Bits;
}uCANIER,*P_uCANIER;

#define 	CANIER(CanNum)		(*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))
/*
**********************************************************************************************************************
**   定义 CANBTR 寄存器:
1.This register controls how various CAN timings are derived from the VPB clock.
2.It can be read at any time, but can only be written if the RM bit in CANmod is 1.
**********************************************************************************************************************
*/
typedef	union		_canbtr_
{
	INT32U	Word;					//字操作定义
	struct	
	{
		INT32U	BRP 	:10;	//预分频位组合定义
		INT32U	RSV4	:4;		//保留位
		INT32U	SJW 	:2;		//同步跳转宽度
		INT32U	TSEG1 	:4;		//时间段1
		INT32U	TSEG2 	:3;		//时间段2
		INT32U	SAM 	:1;		//采样模式位
		INT32U	RSV8	:8;		//保留
	}Bits;
}uCANBTR,*P_uCANBTR;

#define 	CANBTR(CanNum)		(*((volatile P_uCANBTR)( CANBTR_BADR+CanNum* CAN_OFFSET_ADR )))
/*
**********************************************************************************************************************
**   定义 CANEWL 寄存器:
1.This register sets a limit on Tx or Rx errors at which an interrupt can occur.
2.It can be read at any time, but can only be written if the RM bit in CANmod is 1.
**********************************************************************************************************************
*/
typedef	union	_canewl_
{
	INT32U	Word;					//字操作定义
	struct	
	{
		INT32U	EWL 	:8;		///出错警告界限值
		INT32U	RSV24	:24;	//保留位
	}Bits;
}uCANEWL,*P_uCANEWL;

#define 	CANEWL(CanNum)		(*((volatile P_uCANEWL)( CANEWL_BADR+CanNum* CAN_OFFSET_ADR )))
/*
**********************************************************************************************************************
**   定义 CANSR 寄存器:
1.This register contains three status bytes, in which the bits not related to tranmission are identical to the 
  corresponding bits in the Global Status Register, while those relating to transmission reflect the status of 
  each of the 3 Tx Buffers.
**********************************************************************************************************************
*/
typedef	union	_cansr_
{
	INT32U	Word;					//字操作定义
	struct	
	{
		INT32U	RBS1 	:1;		//接收缓冲区有效
		INT32U	DOS1 	:1;		//数据溢出
		INT32U	TBS1 	:1;		//TxBUF1锁定位  "0":锁定
		INT32U	TCS1 	:1;		//TxBUF1的数据发送完成 
		INT32U	RS1 	:1;		//正在接收
		INT32U	TS1 	:1;		//TxBUF1的数据正在发送 "1"正在发送
		INT32U	ES1 	:1;		//错误认可
		INT32U	BS1 	:1;		//总线错误
		INT32U	RBS2 	:1;		//
		INT32U	DOS2 	:1;		//
		INT32U	TBS2 	:1;		// TxBUF2锁定
		INT32U	TCS2 	:1;		// TxBUF2的数据发送完成
		INT32U	RS2 	:1;		//
		INT32U	TS2 	:1;		// TxBUF2的数据正在发送
		INT32U	ES2 	:1;		//
		INT32U	BS2 	:1;		//
		INT32U	RBS3 	:1;		//
		INT32U	DOS3 	:1;		//
		INT32U	TBS3 	:1;		// TxBUF3锁定
		INT32U	TCS3 	:1;		// TxBUF3的数据发送完成
		INT32U	RS3 	:1;		//
		INT32U	TS3 	:1;		// TxBUF3的数据正在发送
		INT32U	ES3 	:1;		//
		INT32U	BS3 	:1;		//
		INT32U	RSV8	:8;		//
	}Bits;
}uCANSR,*P_uCANSR;

#define 	CANSR(CanNum)		(*((volatile P_uCANSR)( CANSR_BADR+CanNum* CAN_OFFSET_ADR )))
/*
**********************************************************************************************************************
**   定义 CANRFS 寄存器:
1.This register defines the characteristics of the current received message. 
2.It is read-only in normal operation, but can be written for testing purposes if the RM bit in CANMOD is 1.
**********************************************************************************************************************
*/
typedef	union		_canrfs_
{
	INT32U		Word;				//字操作定义
	struct	
	{
		INT32U	IDIN 	:10;	//ID索引值
		INT32U	BP 		:1;		//BP
		INT32U	RSV5 	:5;		//保留
		INT32U	DLC 	:4;		//数据长度

⌨️ 快捷键说明

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