我在配置时,将CANMC.ABO=0 ;即不开启自动BUS ON功能,手动来进行,使用下述代码:
struct ECAN_REGS ECanaShadow;
u16 counter =5000;
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
if(ECanaShadow.CANMC.bit.CCR==1) //// 当节点BUSOFF后,CANMC.CCR会置1,故我查询该位,
{
do
{
counter--;
DELAY_US(1);
ECanaShadow.CANREC.all=ECanaRegs.CANREC.all;
}while((ECanaShadow.CANREC.all<128)&&(counter>0)); //等待128*11个隐形位,并存在超时,避免程序死在循环中,
//选择5000,记得128*11个隐形位,大约3-5ms;
ECanaShadow.CANMC.bit.CCR= 0; //依据手册,将CCR位clear
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
//ECanaShadow.CANES.all = ECanaRegs.CANES.all;
//Wait for normal mode
}
EDIS;
使用上述代码使can模块回复通信,
但是,失败了!!
失败了!
请教一下,问题所在??