📄 sja1000.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 + -