| 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)就可以了!
 自己调试的时候粗心大意了,没有仔细看中断处理函数,谢谢大家了
 |