3460|4

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于2812CAN接收邮箱中断 [复制链接]

问题说明:我在程序中,将3个邮箱配置为接收邮箱,将接收中断配置为ECAN0INT中断线,当某个邮箱接收到数据后,触发邮箱中断,然后根据CANRMP寄存器的标志位确定是哪个邮箱触发了中断,对该邮箱进行接收处理。奇怪的是,程序刚开始运行一直正常,但是运行到一个小时左右后,出现故障。通过反复的测试,总结出故障的现象为,当我向dsp中发送数据时,能够确定邮箱接收到了数据,并且触发了邮箱中断,但是该邮箱的CANRMP标志位并没有被置位,因此dsp程序中无法判别哪个邮箱触发了中断,而且发送邮箱能够正常发送数据。经过测试,确定错误计数寄存器CANTEC/CANREC均正常。                                                      以上为我所遇到的问题,不知道哪位朋友能够解惑,说一说解决方法或者可能的原因,谢谢!

最新回复

我也想知道是甚麼原因  详情 回复 发表于 2016-2-16 10:47
 
点赞 关注

回复
举报

7

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,大家有什么建议?
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也想知道是甚麼原因
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
有没有路过的大神,看一下
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

5
 
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;

}

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

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表