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

📄 lpc2300canreg.c

📁 周立功smartArm2300开发板中CAN总线示例程序。
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                    广州致远电子有限公司
**                                     工业通信网络事业部
**                                http://www.embedcontrol.com
**-------------------------------------文件信息--------------------------------------------------------
**	文   件  	名:	LPC2300CANReg.C
** 	当  前  版  本:	v2.0
** 	日		    期:	2007年4月26日
**	描		    述:	
**-------------------------------------历史创建--------------------------------------------------------
**	文   件  	名:	LPC2300CANReg.C
** 	版  		本:	v1.0
** 	日		    期:	2007年4月26日
**	创    建    人:	滕欣欣
**	描		    述:	全新版本的LPC系列CAN控制器驱动函数库,CAN控制器寄存器定义
**-------------------------------------历史修改--------------------------------------------------------
**	文   件  	名:	
** 	版  		本:	
** 	日		    期:	
**	修   改     人:	
**	描		    述:	
********************************************************************************************************/
#define LPC2300PCONP	(*((volatile unsigned long*)0xE01FC0C4))
#define LPC2300PINSEL0	(*((volatile unsigned long*)0xE002C000))
#define LPC2300PINSEL1	(*((volatile unsigned long*)0xE002C004))
#define LPC2300PINSEL4	(*((volatile unsigned long*)0xE002C010))

#define LPC2300_CAN_CTRLRAG_BASEADDR	0xE0044000
#define LPC2300_CANCTRLOR_ADDR_OFFSET	0x4000
#define LPC3200REG(CH, REGOFFSET)	(*((volatile unsigned long*)(LPC2300_CAN_CTRLRAG_BASEADDR + LPC2300_CANCTRLOR_ADDR_OFFSET*CH + REGOFFSET*4)))

enum LPC2300CANCTRLOR_REGOFFSET {MOD=0,CMR,GSR,ICR,IER,BTR,EWL,SR,RFS,RID,RDA,RDB,TFI1,TID1,TDA1,TDB1,TFI2,TID2,TDA2,TDB2,TFI3,TID3,TDA3,TDB3};

/*
*********************************************************************************************************************
**   定义 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_
{
	unsigned long DWord;
	struct	{
		unsigned int	RM 		:1;		//定义RM位(复位位)
		unsigned int	LOM 	:1;		//定义LOM位(只听模式位)

		unsigned int	STM		:1;		//定义STM位 "0"发送的信息必须被应答才被认可
		//"1"自测试模式,CANCMR的SRR位一起使用,可以达到自发自收的效果

		unsigned int	TPM 	:1;		//定义TPM位 "0"3个发送缓冲区的优先级由各自的CAN ID决定
		//"1"3个发送缓冲区的优先级由各自的Tx优先级域决定

		unsigned int	SM 		:1;		//定义SM位(睡眠模式位)

		unsigned int	RPM 	:1;		//定义RPM位 "0"如果传输的是显性位,Rx和Tx脚为低电平
		//"1"翻转极性模式--如果传输的是显性位,Rx脚为高电平

		unsigned int	RSV1 	:1;		//保留位
		unsigned int	TM 		:1;		//定义TM位(测试模式)
		unsigned int	RSV24	:24;	//保留位
	}Bits;
}REG_CANMOD;
/*
**********************************************************************************************************************
**   定义 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_
{
	unsigned long	DWord;				//字操作定义
	struct	
	{
		unsigned int	BRP 	:10;	//预分频位组合定义
		unsigned int	RSV4	:4;		//保留位
		unsigned int	SJW 	:2;		//同步跳转宽度
		unsigned int	TSEG1 	:4;		//时间段1
		unsigned int	TSEG2 	:3;		//时间段2
		unsigned int	SAM 	:1;		//采样模式位
		unsigned int	RSV8	:8;		//保留
	}Bits;
}REG_CANBTR;
/*
**********************************************************************************************************************
**   定义 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_
{
	unsigned long	DWord;
	struct	
	{
		unsigned int	TR 		:1;		//定义TR位(发送请求)
		unsigned int	AT 		:1;		//定义AT位(发送中止)
		unsigned int	RRB 	:1;		//定义RRB位(接收缓冲区释放)
		unsigned int	CDO 	:1;		//清除数据溢出位
		unsigned int	SRR 	:1;		//定义SRR位(自接收请求)
		unsigned int	STB1 	:1;		//定义SEND TxBUF1位(选择BUF1发送)
		unsigned int	STB2 	:1;		//定义SEND TxBUF2位(选择BUF2发送)
		unsigned int	STB3 	:1;		//定义SEND TxBUF3位(选择BUF3发送)
		unsigned int	RSV24	:24;	//保留位
	}Bits;
}REG_CANCMR;
/*
**********************************************************************************************************************
**   定义 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_
{
	unsigned long		DWord;				//字操作定义
	struct	
	{
		unsigned int	IDIN 	:10;	//ID索引值
		unsigned int	BP 		:1;		//BP
		unsigned int	RSV5 	:5;		//保留
		unsigned int	DLC 	:4;		//数据长度
		unsigned int	RSV10	:10;	//保留
		unsigned int	RTR 	:1;		//远程帧、数据帧识别位
		unsigned int	FF 		:1;		//扩展帧、标准帧识别位
	}Bits;
}REG_CANRFS;
/*
******************************************************************
	CAN控制器结构体定义
******************************************************************
*/
typedef struct _CANCONTROLLOR
{
	unsigned char	m_Channel;		//CAN通道
	//unsigned char	m_bIsLOM;		//只听模式标志
	//unsigned char	m_bSLPM;		//睡眠模式标志
	unsigned long	m_SysClk;		//系统时钟
	unsigned char	m_Status;		//状态
	
	/*INT8U	m_EWL;			//出错警告值
	INT32U	m_CAN_Baud;		//CAN波特率值
	INT32U	m_RegBaseAddr;	//CAN控制器的起始基址
	REG_CANRxBUF *m_RxBufAddr;	//接收缓冲区首地址指针
	INT16U	m_iCAN_RxBufLen;//接收缓冲区数量长度	
	INT16U	m_iRdPoint;		//接收缓冲区读入口
	INT16U	m_iWrPiont;		//接收缓冲区写入口
	INT16U	m_iDataCout;	//接收缓冲区有效数据数目
	BOOL	m_bIsFull;		//接收缓冲区满标志
	BOOL	m_IsSendOK;		//发送成功标志
	void	*pSendSem;		//发送信号量
	void	*pRecvSem;		//接收信号量
	void	*pRcvMutexSem;	//接收独占信号量
	void	*pSndMutexSem;	//发送独占信号量*/
}CANCONTROLLOR;

⌨️ 快捷键说明

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