问题说明:我在程序中,将3个邮箱配置为接收邮箱,将接收中断配置为ECAN0INT中断线,当某个邮箱接收到数据后,触发邮箱中断,然后根据CANRMP寄存器的标志位确定是哪个邮箱触发了中断,对该邮箱进行接收处理。奇怪的是,程序刚开始运行一直正常,但是运行到一个小时左右后,出现故障。通过反复的测试,总结出故障的现象为,当我向dsp中发送数据时,能够确定邮箱接收到了数据,并且触发了邮箱中断,但是该邮箱的CANRMP标志位并没有被置位,因此dsp程序中无法判别哪个邮箱触发了中断,而且发送邮箱能够正常发送数据。经过测试,确定错误计数寄存器CANTEC/CANREC均正常。 以上为我所遇到的问题,不知道哪位朋友能够解惑,说一说解决方法或者可能的原因,谢谢!
此帖出自
小平头技术问答
{
Can_receivecounter++;
DINT;
if(ECanaRegs.CANRMP.all&0x00040000)
{CANSXSRX18();
receiveflag18=1;
}
if(ECanaRegs.CANRMP.all&0x00080000)
{CANSXSRX19();
receiveflag19=1;
}
if(ECanaRegs.CANRMP.all&0x20000000)
{CANSXSRX29();
receiveflag29=1;
}
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
EINT;
}
void CANSXSRX29(void)
{
ECanaRegs.CANRMP.all = (ECanaRegs.CANRMP.all|0x20000000);
a=ECanaMboxes.MBOX29.MDL.byte.BYTE0;
b=ECanaMboxes.MBOX29.MDL.byte.BYTE1;
}
上面是中断程序和接收邮箱程序
一周热门 更多>