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

📄 sja1000.h

📁 at91rm9200下的sja1000的linux驱动程序
💻 H
字号:
/* Board/System/Debug information/definition ---------------- */
#ifndef _SJA1000_H
#define _SJA1000_H


//CAN通道号基址
#define NUMBASE	0x05//0x000	//通道号从0~5 

#include <linux/ioctl.h>

#define GPIO_PIN_LOW        0
#define GPIO_PIN_HIGH       1
#define GPIO_PIN_ERR        (~0)
#define GPIO_IOC_MAGIC      0xd0


#define WR_SJA1000            			_IO(GPIO_IOC_MAGIC,     0)       //write sja register
#define RD_SJA1000            			_IO(GPIO_IOC_MAGIC,     1)       //read sja register
#define CMD_SJA1000             	        _IO(GPIO_IOC_MAGIC,     2)       //Send can data

#define CAN_RD            			_IO(GPIO_IOC_MAGIC,     3)       //write sja register#define CAN_WR            			_IO(GPIO_IOC_MAGIC,     4)       //read sja register#define CAN_CMD             	    _IO(GPIO_IOC_MAGIC,     5)       //Send can data


#define GPIO_MAXNR       12 /* max command */

#define SJA1000_PHYSICAL_REG_SIZE      10	//SZ_1K
#define SJAINDEX       	    0X80000002
//#define SJA_HW_BASE      (0X80000000|(NUMBASE<<20)) 	
#define SJA1000_HW_BASE(num)      (0X80000000|(num<<20))  //num :0~5 		
#define NR_CAN_DEVICES  	6	/* number of devices on can chanel */


struct can_local
{
	u8 frameInfo;			/* frame infomation */
	u16 identifier;
	char* pData;			/* data pointer */
	u8 len;				//data length
	char* rdata;			//receive can data 
	unsigned char cmd;
};



//////////////////////////////////
/************************************************************************
 *SJA1000与微处理器的接口是以外部存储器的方式,所以以下的基址定义,用户 *
 *应根据自己的实际电路来进行调整(ADS环境中用)                                        *
 ************************************************************************/
 #define  SJA1000ADRR(num)   (0x80000001|((num+NUMBASE)<<20))
#define  SJA1000DATA(num)    (0x80000000|((num+NUMBASE)<<20))

//#define         SJA_DATA      (0x80000000+0)   //定义sja1000的数据基址:
//#define         SJA_ADRR      (0x80000000+1)   //定义sja1000的地址基址:

//计算SJA1000在电路中的实际地址:基址+内部寄存器地址

/************************************************************************
 * 以下的定义为SJA1000的内部寄存器的地址,不可修改                      *
 *     各寄存器的具体功能清参阅sja1000的数据手册                        *
 ************************************************************************/
#define         REG_CONTROL       (0x00)      //内部控制寄存器

#define         REG_COMMAND       (0x01)       //命令寄存器

#define         REG_STATUS        (0x02)       //状态寄存器

#define         REG_INTERRUPT     (0x03)       //中断寄存器

#define	    REG_IER		  (0x04)		 //中断使能寄存器

#define         REG_ACR           (0x10)       //验收代码寄存器

#define         REG_AMR           (0x14)       //验收屏蔽寄存器

#define         REG_BTR0          (0x06)       //总线定时寄存器0 

#define         REG_BTR1          (0x07)       //总线定时寄存器1 

#define         REG_OCR           (0x08)       //输出控制寄存器

#define         REG_TEST          (0x09)       //测试寄存器

#define         REG_RCN          (0x0e)       //RX错误计数器寄存器

#define         REG_TCN          (0x0f)       //TX错误计数器寄存器

#define 		REG_EMLR 		  (0x0d)		 //出错报警界限寄存器
  


//Pelican & SFF
#define	REG_TxFrameInfo		0x10
#define	REG_TxIdentifier1		0x11
#define	REG_TxIdentifier2		0x12
#define	REG_TxBuffer1			0x13
#define	REG_TxBuffer2			0x14
#define	REG_TxBuffer3			0x15
#define	REG_TxBuffer4			0x16
#define	REG_TxBuffer5			0x17
#define	REG_TxBuffer6			0x18
#define	REG_TxBuffer7			0x19
#define	REG_TxBuffer8			0x1a

//Pelican & SFF
#define	REG_RxFrameInfo		0x10
#define	REG_RxIdentifier1		0x11
#define	REG_RxIdentifier2		0x12
#define	REG_RxBuffer1			0x13
#define	REG_RxBuffer2			0x14
#define	REG_RxBuffer3			0x15
#define	REG_RxBuffer4			0x16
#define	REG_RxBuffer5			0x17
#define	REG_RxBuffer6			0x18
#define	REG_RxBuffer7			0x19
#define	REG_RxBuffer8			0x1a


/************************************************************************
 *内部地址 01EH 备用                                                    *
 ************************************************************************/

/************************************************************************
 *时钟分频寄存器(内部地址01FH)                                          *
 ************************************************************************/
#define         REG_CDR           0x1F          //时钟分频寄存器

/************************************************************************
 *定义指针                                                              *
 ************************************************************************/
// unsigned        char       xdata  *SJA_BCANAdr;    
 //volatile u8 *SJA_BCANAdr; 

/************************************************************************
 *定义命令字                                                            *
 ************************************************************************/ 
#define         TR_CMD           0x01          //发送请求命令
#define	    SRR_CMD	     0x12		   //自接收请求	
#define         AT_CMD           0x02          //中止发送命令
#define         RRB_CMD          0x04          //释放接收缓冲区
#define         COS_CMD          0x08          //清除超载状态
#define         GTS_CMD          0x10          //进入睡眠状态命令  

/************************************************************************
 *定义12M的晶体下,CAN总线波特率                                        *
 ************************************************************************/
#define         ByteRate_20k      0x00          //波特率20kbps
#define         ByteRate_40k      0x01          //波特率40kbps
#define         ByteRate_50k      0x02          //波特率50kbps
#define         ByteRate_80k      0x03          //波特率80kbps
#define         ByteRate_100k     0x04          //波特率100kbps
#define         ByteRate_125k     0x05          //波特率125kbps
#define         ByteRate_200k     0x06          //波特率200kbps
#define         ByteRate_250k     0x07          //波特率250kbps
#define         ByteRate_400k     0x08          //波特率400kbps
#define         ByteRate_500k     0x09          //波特率500kbps
#define         ByteRate_666k     0x0a          //波特率666kbps
#define         ByteRate_800k     0x0b          //波特率800kbps
#define         ByteRate_1000k    0x0c          //波特率1000kbps

/*-------------------------------------------------------------------------------------------
 *  以下为BASICCAN SJA1000的错误字                                                          *
 -------------------------------------------------------------------------------------------*/
#define     CAN_INTERFACE_0K    0                                                        /*SJA1000接口正常                       */
#define     CAN_BUS_0K          0                                                       /*CAN总线工作正常                       */
#define     CAN_INTERFACE_ERR   0XFF                                                    /*SJA1000接口错误

⌨️ 快捷键说明

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