第一,初始化
#define SJA0_ADR 0x7f00 // SJA0的基地址:0x7f00;
#define SJA0_TxBuffer 0x7f10 // SJA0发送缓冲区基地址:0x7f10 = 0x7f00 + 16;
#define SJA0_RxBuffer 0x7f10 // SJA0接收缓冲区基地址:0x7f10 = 0x7f00 + 16;
// PeliCAN模式下,SJA1000的内部寄存器地址定义
#define MODE0 XBYTE[SJA0_ADR+0] // 模式寄存器
#define CMR0 XBYTE[SJA0_ADR+1] // 命令寄存器
#define SR0 XBYTE[SJA0_ADR+2] // 状态寄存器
#define IR0 XBYTE[SJA0_ADR+3] // 中断寄存器
#define IER0 XBYTE[SJA0_ADR+4] // 中断使能寄存器
#define BTR00 XBYTE[SJA0_ADR+6] // 总线定时寄存器0
#define BTR10 XBYTE[SJA0_ADR+7] // 总线定时寄存器1
#define OCR0 XBYTE[SJA0_ADR+8] // 输出控制寄存器
#define TEST0 XBYTE[SJA0_ADR+9] // 测试寄存器
#define ALC0 XBYTE[SJA0_ADR+11] // 仲裁丢失捕捉寄存器
#define ECC0 XBYTE[SJA0_ADR+12] // 错误代码捕捉寄存器
#define ELWR0 XBYTE[SJA0_ADR+13] // 错误报警限制寄存器
#define RXERR0 XBYTE[SJA0_ADR+14] // RX错误计数寄存器
#define TXERR0 XBYTE[SJA0_ADR+15] // TX错误计数寄存器
#define CDR0 XBYTE[SJA0_ADR+31] // 时钟分频寄存器
// 复位模式下,发送接收缓冲区定义
#define ACR00 XBYTE[SJA0_ADR+16] // 验收代码寄存器0
#define ACR10 XBYTE[SJA0_ADR+17] // 验收代码寄存器1
#define ACR20 XBYTE[SJA0_ADR+18] // 验收代码寄存器2
#define ACR30 XBYTE[SJA0_ADR+19] // 验收代码寄存器3
#define AMR00 XBYTE[SJA0_ADR+20] // 验收屏蔽寄存器0
#define AMR10 XBYTE[SJA0_ADR+21] // 验收屏蔽寄存器1
#define AMR20 XBYTE[SJA0_ADR+22] // 验收屏蔽寄存器2
#define AMR30 XBYTE[SJA0_ADR+23] // 验收屏蔽寄存器3
void SJA_Init(void)
{
u8 temp;
MODE0 = 0x09; // 单滤波,复位模式
do{temp = MODE0;}
while((temp&0x01)==0x00); // 等待进入复位模式
CDR0 = 0x88; // PeliCAN模式;CBP = 1;关闭时钟;0x88???
OCR0 = 0x1a; // ???