pinda_ 发表于 2014-10-16 08:44 
中断对应的那个接收和发送寄存器是32位的,而对应接收和发送寄存器是16位的,这里需要使用影子寄存器,你 ...
原因已经找到时了,是我的中断处理函数有问题。如下:
if(ECanaShadow.CANGIF0.bit.GMIF0 == 1) //表示有接收或发送中断产生
{
MboxNum = ECanaShadow.CANGIF0.bit.MIV0;
Canta = ECanaRegs.CANTA.all;
Canrmp = ECanaRegs.CANRMP.all;
if((Canta & (1<<MboxNum)) >0) //表示是发送中断
{
//处理发送中断
}
if((Canrmp & (1<<MboxNum)) >0) //表示是接收中断
{
//处理接收中断
}
}
上面示例代码中的(1<<MboxNum)有问题,生成的是16位的整数,所以0~15邮箱中断能响应,16~31邮箱中断
不能进来处理。把(1<<MboxNum)改成((Uint32)1<<MboxNum)就可以了!
自己调试的时候粗心大意了,没有仔细看中断处理函数,谢谢大家了
|