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

📄 drv_can.h

📁 该模板使用于周立功公司研发的EasyARM2100系列开发板
💻 H
📖 第 1 页 / 共 2 页
字号:
		UINT32	DLC_BIT 	:4;													//数据长度
		UINT32	RSV_BIT10	:10;												//保留
		UINT32	RTR_BIT 	:1;													//远程帧、数据帧识别位
		UINT32	FF_BIT 		:1;													//扩展帧、标准帧识别位
	}Bits;
}uCANRFS,*P_uCANRFS;

//CANID寄存器的数据类型定义
typedef	union		_canid_
{
	UINT32		Word;															//字操作定义
	union	_frame_format
	{
		struct		_strFrameFm_												//标准帧结构
		{
			UINT32	ID_BIT 		:11;
			UINT32	RSV_BIT21	:21;
		}stcSTRFRFM;
		struct		_etxFrameFm_												//远程帧结构
		{
			UINT32	ID_BIT 		:29;
			UINT32	RSV_BIT3 	:3;
		}stcETXFRFM;
	}FrameFm;
}uCANID,*P_uCANID;

//数据寄存器数据类型定义
typedef	union		_candf_
{
	UINT32		Word;															//字操作定义
	struct	
	{
		UINT32	Data1_BIT 	:8;													//数据字节
		UINT32	Data2_BIT 	:8;	
		UINT32	Data3_BIT 	:8;	
		UINT32	Data4_BIT 	:8;	
	}Bits;
}uCANDF,*P_uCANDF;

//CANTFI寄存器的数据类型定义
typedef	union		_cantfi_
{
	UINT32		Word;															//字节操作定义
	struct	
	{
		UINT32	PRIO_BIT 	:8;													//缓冲区数据发送优先级的值
		UINT32	RSV_BIT8	:8;																
		UINT32	DLC_BIT 	:4;													//发送数据长度
		UINT32	RSV_BIT10	:10;        										
		UINT32	RTR_BIT 	:1;													//远程帧、数据帧辨别位
		UINT32	FF_BIT 		:1;													//扩展帧、标准帧辨别位
	}Bits;
}uCANTFI,*P_uCANTFI;

//定义发送帧结构
typedef	struct		_stcTXBUF_
{
	uCANTFI		TxFrameInfo;													//发送帧信息结构
	uCANID		TxCANID;														//发送帧信息ID
	uCANDF		CANTDA;															//发送数据1~4字节
	uCANDF		CANTDB;															//发送数据5~8字节
}*P_stcTxBUF,stcTxBUF;

//定义集中发送状态寄存器结构
typedef	union		_uCANTxSR_
{
	UINT32		Word;															//字操作定义
	struct	                            										
	{                                   										
		UINT32	TS1_BIT 		:1;												//CAN1正在发送状态
		UINT32	TS2_BIT 		:1;												//CAN2正在发送状态
		UINT32	TS3_BIT 		:1;												//CAN3正在发送状态
		UINT32	TS4_BIT 		:1;												//CAN4正在发送状态
		UINT32	RSV_BIT1		:4;												//保留
		UINT32	TBS1_BIT 		:1;												//CAN1发送缓冲区锁定状态
		UINT32	TBS2_BIT 		:1;												//CAN2发送缓冲区锁定状态
		UINT32	TBS3_BIT 		:1;												//CAN3发送缓冲区锁定状态
		UINT32	TBS4_BIT 		:1;												//CAN4发送缓冲区锁定状态
		UINT32	RSV_BIT2 		:4;												// 
		UINT32	TCS1_BIT 		:1;												//CAN1发送完成状态
		UINT32	TCS2_BIT 		:1;												//CAN2发送完成状态
		UINT32	TCS3_BIT 		:1;												//CAN3发送完成状态
		UINT32	TCS4_BIT 		:1;												//CAN4发送完成状态
		UINT32	RSV_BIT12		:12;											//保留
	}Bits;                              										
}*P_uCANTxSR,uCANTxSR;                  										
                                        										
//定义集中接收状态寄存器结构            										
typedef	union		_uCANRxSR_          										
{                                       										
	UINT32		Word;															//字操作定义
	struct	                            										
	{                                   										
		UINT32	RS1_BIT 		:1;												//CAN1正在接收状态
		UINT32	RS2_BIT 		:1;												//CAN2正在接收状态
		UINT32	RS3_BIT 		:1;												//CAN3正在接收状态
		UINT32	RS4_BIT 		:1;												//CAN4正在接收状态
		UINT32	RSV_BIT1		:4;												//保留
		UINT32	RBS1_BIT 		:1;												//CAN1接收缓冲区有效
		UINT32	RBS2_BIT 		:1;												//CAN2接收缓冲区有效
		UINT32	RBS3_BIT 		:1;												//CAN3接收缓冲区有效
		UINT32	RBS4_BIT 		:1;												//CAN4接收缓冲区有效
		UINT32	RSV_BIT2 		:4;												// 
		UINT32	DOS1_BIT 		:1;												//CAN1接收缓冲区溢出
		UINT32	DOS2_BIT 		:1;												//CAN2接收缓冲区溢出
		UINT32	DOS3_BIT 		:1;												//CAN3接收缓冲区溢出
		UINT32	DOS4_BIT 		:1;												//CAN4接收缓冲区溢出
		UINT32	RSV_BIT12		:12;											//保留
	}Bits;
}*P_uCANRxSR, uCANRxSR;

//RxBuf Struct
typedef	struct	_stcRXBUF_
{
	uCANRFS	CANRcvFS;
	uCANID	RxCANID;
	uCANDF	CANRDA;
	uCANDF	CANRDB;
}*P_stcRxBUF,stcRxBUF;

//定义集中其他状态寄存器结构
typedef	union		_uCANMSR_
{
	UINT32		Word;															//字操作定义
	struct	                            										
	{                                   										
		UINT32	ES1_BIT 		:1;												//CAN1错误报警
		UINT32	ES2_BIT 		:1;												//CAN2错误报警
		UINT32	ES3_BIT 		:1;												//CAN3错误报警
		UINT32	ES4_BIT 		:1;												//CAN4错误报警
		UINT32	RSV_BIT1		:4;												//保留
		UINT32	BS1_BIT 		:1;												//CAN1总线脱离
		UINT32	BS2_BIT 		:1;												//CAN2总线脱离
		UINT32	BS3_BIT 		:1;												//CAN3总线脱离
		UINT32	BS4_BIT 		:1;												//CAN4总线脱离
		UINT32	RSV_BIT20		:20;											//保留
	}Bits;
}*P_uCANMSR, uCANMSR;

//定义验收滤波模式寄存器结构
typedef	union		_canafmr_
{
	UINT32	Word;
	struct	
	{
		UINT32	AccOff_BIT 	:1;	
		UINT32	AccBP_BIT 	:1;									
		UINT32	eFCAN_BIT 	:1;	
		UINT32	RSV_BIT29 	:29;
	}Bits;
}uCANAFMR,*P_uCANAFMR;

//验收滤波器表格单个标志符表格起始地址数据结构定义
typedef	union	_canF_sa_
{
	UINT32	Word;
	struct	
	{
		UINT32	RSV_BIT2 	:2;
		UINT32	SADR_BIT 	:9;	
		UINT32	RSV_BIT21 	:21;
	}Bits;
}uCANF_sa,*P_uCANF_sa;

//验收滤波器表格标志符组表格起始地址数据结构定义
typedef	union	_canGRP_sa_
{
	UINT32	Word;
	struct	
	{
		UINT32	RSV_BIT2 	:2;
		UINT32	SADR_BIT 	:10;
		UINT32	RSV_BIT20 	:20;
	}Bits;
}uCANGRP_sa,*P_uCANGRP_sa;

//LUT错误寄存器数据结构定义
typedef	union	_canLUTerr
{
	UINT32	Word;
	struct	
	{
		UINT32	LERR_BIT 	:1;
		UINT32	RSV_BIT31 	:31;
	}Bits;
}uCANLUTerr,*P_uCANLUTerr;





//=============================================================================
//定义所有CAN模块模式寄存器的数据类型
#define 	regCANMOD(CanNum)		(*((volatile P_uCANMod)(CANMOD_BADR+CanNum* CAN_OFFSET_ADR)))

//定义所有CAN模块命令寄存器的数据类型
#define 	regCANCMR(CanNum)		(*((volatile P_uCANCMR)(CANCMR_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块全局状态寄存器的数据类型
#define 	regCANGSR(CanNum)		(*((volatile P_uCANGSR)( CANGSR_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块中断和捕获寄存器的数据类型
#define 	regCANICR(CanNum)		(*((volatile P_uCANICR)( CANICR_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块中断使能寄存器的数据类型
#define 	regCANIER(CanNum)		(*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块总线时序寄存器的数据类型
#define 	regCANBTR(CanNum)		(*((volatile P_uCANBTR)( CANBTR_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块出错警告界限寄存器的数据类型
#define 	regCANEWL(CanNum)		(*((volatile P_uCANEWL)( CANEWL_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块CANSR寄存器的数据类型
#define 	regCANSR(CanNum)		(*((volatile P_uCANSR)( CANSR_BADR+CanNum* CAN_OFFSET_ADR )))    

//所有CAN模块的CANRFS数据类型定义
#define 	regCANRFS(CanNum)		(*((volatile P_uCANRFS)( CANRFS_BADR+CanNum* CAN_OFFSET_ADR )))    

//所有CAN模块的CANRID数据类型定义
#define 	regCANRID(CanNum)		(*((volatile P_uCANID)( CANRID_BADR+CanNum* CAN_OFFSET_ADR )))    

//所有CAN模块的CANRDA数据类型定义
#define 	regCANRDA(CanNum)		(*((volatile P_uCANDF)( CANRDA_BADR+CanNum* CAN_OFFSET_ADR )))    

//所有CAN模块的CANRDB数据类型定义
#define 	regCANRDB(CanNum)		(*((volatile P_uCANDF)( CANRDB_BADR+CanNum* CAN_OFFSET_ADR )))    

//定义所有CAN模块的发送缓冲区分量
#define 	regCANTFI1(CanNum)		(*((volatile P_uCANTFI)(CANTFI1_BADR+CanNum* CAN_OFFSET_ADR)))    
#define 	regCANTID1(CanNum)		(*((volatile P_uCANID)(CANTID1_BADR+CanNum*CAN_OFFSET_ADR)))   
#define 	regCANTDA1(CanNum)		(*((volatile P_uCANDF)(CANTDA1_BADR+CanNum*CAN_OFFSET_ADR)))   
#define 	regCANTDB1(CanNum)		(*((volatile P_uCANDF)(CANTDB1_BADR+CanNum*CAN_OFFSET_ADR)))  
#define 	regCANTFI2(CanNum)		(*((volatile P_uCANTFI)(CANTFI2_BADR+CanNum*CAN_OFFSET_ADR)))    
#define 	regCANTID2(CanNum)		(*((volatile P_uCANID)(CANTID2_BADR+CanNum*CAN_OFFSET_ADR))) 
#define 	regCANTDA2(CanNum)		(*((volatile P_uCANDF)(CANTDA2_BADR+CanNum*CAN_OFFSET_ADR)))
#define 	regCANTDB2(CanNum)		(*((volatile P_uCANDF)(CANTDB2_BADR+CanNum*CAN_OFFSET_ADR)))  
#define 	regCANTFI3(CanNum)		(*((volatile P_uCANTFI)(CANTFI3_BADR+CanNum*CAN_OFFSET_ADR)))    
#define 	regCANTID3(CanNum)		(*((volatile P_uCANID)(CANTID3_BADR+CanNum*CAN_OFFSET_ADR)))
#define	 	regCANTDA3(CanNum)		(*((volatile P_uCANDF)(CANTDA3_BADR+CanNum*CAN_OFFSET_ADR))) 
#define 	regCANTDB3(CanNum)		(*((volatile P_uCANDF)(CANTDB3_BADR+CanNum*CAN_OFFSET_ADR)))

//定义所有CAN模块的TxBUF
#define		regTxBUF1(CanNum)		(*((volatile P_stcTxBUF)( TxBUF1_BADR+CanNum*CAN_OFFSET_ADR)))
#define		regTxBUF2(CanNum)		(*((volatile P_stcTxBUF)( TxBUF2_BADR+CanNum*CAN_OFFSET_ADR)))
#define		regTxBUF3(CanNum)		(*((volatile P_stcTxBUF)( TxBUF3_BADR+CanNum*CAN_OFFSET_ADR)))

//集中状态寄存器
#define 	regACANTxSR				(*((volatile P_uCANTxSR)( CANTxSR_GADR)))
#define 	regACANRxSR				(*((volatile P_uCANRxSR)( CANRxSR_GADR)))
#define 	regACANMSR				(*((volatile P_uCANMSR) ( CANMSR_GADR)))

//验收滤波器部分
#define 	regCANAFMR				(*((volatile P_uCANAFMR) CANAFMR_GADR))
#define 	regCANSFF_sa			(*((volatile P_uCANF_sa)(CANSFF_sa_GADR)))    
#define 	regCANSFF_GRP_sa		(*((volatile P_uCANGRP_sa)(CANSFF_GRP_sa_GADR)))    
#define 	regCANEFF_sa			(*((volatile P_uCANF_sa)(CANEFF_sa_GADR)))    
#define 	regCANEFF_GRP_sa		(*((volatile P_uCANGRP_sa)(CANEFF_GRP_sa_GADR))) 
#define 	regCANENDofTable		(*((volatile P_uCANGRP_sa)(CANENDofTable_GADR)))
#define 	regCANLUTerrAd			(*((volatile P_uCANF_sa)(CANLUTerrAd_GADR)))
//LUT错误寄存器访问方式定义
#define 	regCANLUTerr			(*((volatile P_uCANLUTerr)( CANLUTerr_GADR)))

//验收滤波器表格
#define		regCANSFF_TAB(i)		(*((volatile P_uFullCANSFFLine)( CANAFRAM_GADR + USE_SFF_sa_VAL +i*4)))	
#define 	regCANSFF_GRP_TAB(i)	(*((volatile P_uFullCANSFFLine)( CANAFRAM_GADR + USE_SFF_GRP_sa_VAL +i*4)))
#define		regCANEFF_TAB(i)		(*((volatile P_uFullCANEFFLine)( CANAFRAM_GADR + USE_EFF_sa_VAL +i*4)))	
#define 	regCANEFF_GRP_TAB(i)	(*((volatile P_uFullCANEFFLine)( CANAFRAM_GADR + USE_EFF_GRP_sa_VAL +i*4)))

//定义所有CAN模块的RxBUF
#define		RxBUF(CanNum)		(*((volatile P_stcRxBUF)( RxBUF_BADR+CanNum*CAN_OFFSET_ADR)))




//=============================================================================
#ifndef		_CANFUNC_GLOBAL_
#define		CANFUNC_GLOBAL		extern
#else
#define		CANFUNC_GLOBAL	
#endif


#define	NOM_SEND_CMD				0
#define	SIG_SEND_CMD				1
#define	SLF_SEND_CMD				2
#define	SSR_SEND_CMD				3
#define	SEND_TX_BUF1				1
#define	SEND_TX_BUF2				2
#define	SEND_TX_BUF3				4
#define	RelCanRecBuf(CanNum)		regCANCMR(CanNum).Bits.RRB_BIT=1
#define	ClrCanDataOver(CanNum)		regCANCMR(CanNum).Bits.CDO_BIT=1
#define	CanBufOffLinePrg(CanNum)	if(regCANMOD(CanNum).Bits.RM_BIT != 0)		\
									{										    \
										regCANGSR(CanNum).Word=0;				\
										regCANMOD(CanNum).Bits.RM_BIT=0x00;	    \
										regCANCMR(CanNum).Word=0x02;			\
									}	

CANFUNC_GLOBAL	void			HwRstCAN(eCANNUM CanNum);
CANFUNC_GLOBAL	void			HwEnCAN(eCANNUM CanNum);
CANFUNC_GLOBAL	unsigned int	SoftRstCAN(eCANNUM CanNum);
CANFUNC_GLOBAL	unsigned int	SoftEnCAN(eCANNUM CanNum);
CANFUNC_GLOBAL	unsigned int	CanEntrySM(eCANNUM	CanNum);
CANFUNC_GLOBAL	unsigned int 	CanQuitSM(eCANNUM	CanNum);
CANFUNC_GLOBAL	void			CanSendCmd(eCANNUM CanNum,UINT32 Cmd,UINT32 TxBuf);
CANFUNC_GLOBAL	unsigned int	WriteCanTxBuf(eCANNUM CanNum,UINT32 TxBufNum,UINT32 TPM,P_stcTxBUF Buf) ;
CANFUNC_GLOBAL	void			ReadCanRxBuf(eCANNUM CanNum,P_stcRxBUF Buf);
	




#endif

⌨️ 快捷键说明

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