📄 sja1000.h
字号:
/***********************************
汽车电控系统诊断仪CAN总线诊断座程序头文件
SJA1000工作在Peli CAN模式
***********************************/
/**********************************
定义SJA1000片选基地址
**********************************/
#define SJA1000_BASEADDR 0x7f00
/*********************************
定义SJA1000内部寄存器地址
*********************************/
#define SJA1000_MODEL SJA1000_BASEADDR+0x00 //内部控制寄存器
#define SJA1000_COMMAND SJA1000_BASEADDR+0x01 //命令寄存器
#define SJA1000_STATE SJA1000_BASEADDR+0x02 //状态寄存器
#define SJA1000_INTERR SJA1000_BASEADDR+0x03 //中断寄存器
#define SJA1000_ENINTERR SJA1000_BASEADDR+0x04 //中断使能寄存器
#define SJA1000_BUSTIME0 SJA1000_BASEADDR+0x06 //总线定时0寄存器
#define SJA1000_BUSTIME1 SJA1000_BASEADDR+0x07 //总线定时1寄存器
#define SJA1000_OUTCONTR SJA1000_BASEADDR+0x08 //输出控制寄存器
#define SJA1000_TEST SJA1000_BASEADDR+0x09 //测试寄存器
#define SJA1000_CLOCKDIR SJA1000_BASEADDR+0x1f //时钟分频寄存器
#define SJA1000_ALC SJA1000_BASEADDR+0x0b //仲裁丢失捕捉寄存器
#define SJA1000_ECC SJA1000_BASEADDR+0x0c //错误代码捕捉寄存器
#define SJA1000_EWLR SJA1000_BASEADDR+0x0d //错误限制警告寄存器
#define SJA1000_RX_ERR SJA1000_BASEADDR+0x0e //接收错误计数寄存器
#define SJA1000_TX_ERR SJA1000_BASEADDR+0x0f //发送错误计数寄存器
#define SJA1000_TX_BUF0 SJA1000_BASEADDR+0x60; //TX专用缓冲区BUF0
#define SJA1000_TX_BUF1 SJA1000_BASEADDR+0x61; //TX专用缓冲区BUF1
#define SJA1000_TX_BUF2 SJA1000_BASEADDR+0x62; //TX专用缓冲区BUF2
#define SJA1000_TX_BUF3 SJA1000_BASEADDR+0x63; //TX专用缓冲区BUF3
#define SJA1000_TX_BUF4 SJA1000_BASEADDR+0x64; //TX专用缓冲区BUF4
#define SJA1000_TX_BUF5 SJA1000_BASEADDR+0x65; //TX专用缓冲区BUF5
#define SJA1000_TX_BUF6 SJA1000_BASEADDR+0x66; //TX专用缓冲区BUF6
#define SJA1000_TX_BUF7 SJA1000_BASEADDR+0x67; //TX专用缓冲区BUF7
#define SJA1000_TX_BUF8 SJA1000_BASEADDR+0x68; //TX专用缓冲区BUF8
#define SJA1000_TX_BUF9 SJA1000_BASEADDR+0x69; //TX专用缓冲区BUF9
#define SJA1000_TX_BUF10 SJA1000_BASEADDR+0x6A; //TX专用缓冲区BUF10
#define SJA1000_TX_BUF11 SJA1000_BASEADDR+0x6B; //TX专用缓冲区BUF11
#define SJA1000_TX_BUF12 SJA1000_BASEADDR+0x7C; //TX专用缓冲区BUF12
/*********************************
定义SJA1000接收和发送寄存器
*********************************/
#define SJA1000_RXBUF SJA1000_BASEADDR+0x10 //接收缓冲区首址,共13个字节
#define SJA1000_TXBUF SJA1000_BASEADDR+0x10 //发送缓冲区首址,共13个字节
#define SJA1000_ACRRX0 SJA1000_BASEADDR+0x10 //验收代码寄存器,共4个字节
#define SJA1000_ACRRX1 SJA1000_BASEADDR+0x11
#define SJA1000_ACRRX2 SJA1000_BASEADDR+0x12
#define SJA1000_ACRRX3 SJA1000_BASEADDR+0x13
#define SJA1000_AMRRX0 SJA1000_BASEADDR+0x14 //验收屏蔽寄存器,共4个字节
#define SJA1000_AMRRX1 SJA1000_BASEADDR+0x15
#define SJA1000_AMRRX2 SJA1000_BASEADDR+0x16
#define SJA1000_AMRRX3 SJA1000_BASEADDR+0x17
#define SJA1000_RBSA SJA1000_BASEADDR+0x1e //RX缓冲区起始地址寄存器
/*********************************
定义接收报文ID号
*********************************/
#define ACR_ID0 0xfd
#define ACR_ID1 0x00
#define ACR_ID2 0x00
#define ACR_ID3 0x00
/*********************************
接收屏蔽寄存器屏蔽值
*********************************/
#define AMR_CODE0 0x00
#define AMR_CODE1 0x1f
#define AMR_CODE2 0xff
#define AMR_CODE3 0xff
/*********************************
定义指针
*********************************/
unsigned char xdata *SJA1000_ADDRESS;
/********************************
定义命令字
********************************/
#define SJA1000_RESET_MODEL 0x01 //SJA1000复位模式
#define SJA1000_WORK_MODEL 0x08 //SJA1000工作模式,单滤波方式
#define SJA1000_SELF_MODEL 0x04 //SJA1000工作在自检测模式
#define SJA1000_HEAR_MODEL 0x0a //SJA1000工作在只听模式
#define SJA1000_SENT_COMMAND 0x01 //正常发送请求命令
#define SJA1000_ONE_SENT_COMMAND 0x03 //单次发送请求命令
#define SJA1000_SELF_SENT_RECEIVE 0x10 //自发自收请求命令,此时模式寄存器工作在自检测
#define SJA1000_ONE_SENT_RECEIVE 0x12 //单次自发自收请求命令
#define SJA1000_CLEAR_DATA_OVER 0x08 //清除数据溢出
#define SJA1000_RELEASE_FIFO 0x04 //释放接收缓冲器命令
#define SJA1000_IER_COMMAND 0xfd //中断使能命令,错误中断、接收中断、复位中断
#define SJA1000_IE_COMMAND 0x0d //开放总线错误、接收中断
#define SJA1000_CDR_COMMAND 0xc0 //时钟分频寄存器命令,使用Peli CAN模式,1/2分频输出
#define SJA1000_CDRCOL_COMMAND 0xc7 //时钟分频寄存器命令,使用Peli CAN模式,不分频输出
#define SJA1000_CDR_BASIC_COMMAND 0x80 //使用BASIC模式,1/2分频
#define SJA1000_OUT_COMMAND 0xaa //正常输出模式
#define SJA1000_FIFO_ADD 0x0 //接收缓冲区FIFO起始为内部RAM的0地址
#define SJA1000_CLEAR_TX_ERR 0x0 //清除发送错误寄存器
/********************************
SJA1000状态
********************************/
#define SJA1000_RECEIVING 0x10 //正在接收状态
#define SJA1000_SENDING 0x20 //正在发送状态
#define SJA1000_OVERRUN 0x02 //数据溢出状态
#define SJA1000_SENT_OVER 0x08 //发送完毕状态
#define SJA1000_SENT_LOCK 0x04 //发送缓冲区锁定状态
#define SJA1000_BUS_CLOSE 0x80 //总线关闭状态
#define SJA1000_BUS_LIMIT 0x40 //总线错误限制警告
#define SJA1000_BUS_ERR 0xc3 //总线有错状态
/********************************
SJA1000中断状态
********************************/
#define SJA1000_BUS_ERR_INTERR 0x04 //总线错误中断
#define SJA1000_DATA_OVER_INTERR 0x08 //数据溢出中断
#define SJA1000_RI_INTERR 0x01 //接收中断
#define SJA1000_TI_INTERR 0x02 //发送中断
/*******************************
SJA1000晶振为16M标准波特率
*******************************/
#define BTR0_10Kbps 0xb1 //10Kbps
#define BTR1_10Kbps 0xba
#define BTR0_12.5Kbps 0x5c //12.5Kbps
#define BTR1_12.5Kbps 0xed
#define BTR0_20Kbps 0x53 //20Kbps
#define BTR1_20Kbps 0xeb
#define BTR0_25Kbps 0x4f //25Kbps
#define BTR1_25Kbps 0xcd
#define BTR0_50Kbps 0x47 //50Kbps
#define BTR1_50Kbps 0xcd
#define BTR0_80Kbps 0x44 //80Kbps
#define BTR1_80Kbps 0xcd
#define BTR0_100Kbps 0x43 //100Kbps
#define BTR1_100Kbps 0xcd
#define BTR0_125Kbps 0x43 //125Kbps
#define BTR1_125Kbps 0xc9
#define BTR0_250Kbps 0x41 //250Kbps
#define BTR1_250Kbps 0xc9
#define BTR0_500Kbps 0x40 //500Kbps
#define BTR1_500Kbps 0xab
#define BTR0_800Kbps 0x40 //800Kbps
#define BTR1_800Kbps 0xa5
#define BTR0_1000Kbps 0x40 //1000Kbps
#define BTR1_1000Kbps 0xa3
/*********************************
TJA1050工作模式
*********************************/
#define TJA1050_CLOSE S_MODE=1 //TJA1050静音模式
#define TJA1050_WORK S_MODE=0 //TJA1050工作模式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -