这是我的初始化函数
//sja1000初始化
void Peli_Init(void)
{
u16 Status = 0;
do
{
WriteSja1000(SJA_MOD ,RM_BIT |AFM_BIT);
Status = ReadSja1000(SJA_MOD) ;
}
while(!(Status & RM_BIT));//进入复位模式
WriteSja1000(SJA_CDR , CANMode_BIT|CLKOff_BIT);// CDR.3=1--时钟关闭, .7=0---basic CAN, .7=1---Peli CAN
WriteSja1000(SJA_BTR0 , 0x00);
WriteSja1000(SJA_BTR1 , 0x14);//16M晶振 1Mbps
WriteSja1000(SJA_IER , RIE_BIT);// .0=1 接收中断使能 .1=0--关闭发送中断
WriteSja1000(SJA_OCR , NormalMode|Tx0PullDn|OCPOL1_BIT|Tx1PullUp);//配置输出控制寄存器
WriteSja1000(SJA_CMR , RRB_BIT);//释放接收缓冲器
WriteSja1000(SJA_ACR0 , 0xAA);
WriteSja1000(SJA_ACR1 , 0xff);
WriteSja1000(SJA_ACR2 , 0x22);
WriteSja1000(SJA_ACR3 , 0x11);//初始化标识寄存器
WriteSja1000(SJA_AMR0 ,0xff);
WriteSja1000(SJA_AMR1 , 0xff);
WriteSja1000(SJA_AMR2 ,0xff);
WriteSja1000(SJA_AMR3 , 0xff);//初始化屏蔽寄存器
do
{
WriteSja1000(SJA_MOD , STM_BIT);
Status = ReadSja1000(SJA_MOD);
Status = ReadSja1000(SJA_MOD);
}
while( !(Status & STM_BIT) );//进入自接收模式
}
|