关于2812CAN接收邮箱中断

2019-03-24 09:33发布

问题说明:我在程序中,将3个邮箱配置为接收邮箱,将接收中断配置为ECAN0INT中断线,当某个邮箱接收到数据后,触发邮箱中断,然后根据CANRMP寄存器的标志位确定是哪个邮箱触发了中断,对该邮箱进行接收处理。奇怪的是,程序刚开始运行一直正常,但是运行到一个小时左右后,出现故障。通过反复的测试,总结出故障的现象为,当我向dsp中发送数据时,能够确定邮箱接收到了数据,并且触发了邮箱中断,但是该邮箱的CANRMP标志位并没有被置位,因此dsp程序中无法判别哪个邮箱触发了中断,而且发送邮箱能够正常发送数据。经过测试,确定错误计数寄存器CANTEC/CANREC均正常。                                                      以上为我所遇到的问题,不知道哪位朋友能够解惑,说一说解决方法或者可能的原因,谢谢!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
jinlongpas
1楼-- · 2019-03-24 12:19
< 自己顶一下,大家有什么建议?
youkevin
2楼-- · 2019-03-24 17:46
 精彩回答 2  元偷偷看……
jinlongpas
3楼-- · 2019-03-24 19:51
有没有路过的大神,看一下
jinlongpas
4楼-- · 2019-03-24 22:04
interrupt void Ecan0ISR(void)
{
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;

}

上面是中断程序和接收邮箱程序

一周热门 更多>

相关问题

    相关文章