EP100触发CAN中断但无法读取报文

本文深入探讨了CAN总线中单个通道处理多条报文的机制,解释了为何多条报文的接收与发送仅需一个CAN通道,以及单片机多个CAN通道的实际应用场景。文中详细分析了CAN报文的发送与接收流程,包括报文的优先级排序、双缓冲器机制以及接收缓冲器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因是初始化的是CAN0的通道,但使用的CAN接受中断是CAN1(即为CAN1的中断指定了中断函数),导致实际接收CAN报文的是CAN0,但没为它指定中断函数,所以程序没法找到它的中断函数入口,所以程序死在下图中,从000E跳回0000,循环执行。需要注意的是CAN1的接收中断并不能触发,因为CAN1通道没经过配置,报文无法通过,所以无法将RXF复位(即不能产生接收中断)。

由此产生一个很有意思的问题,多条报文的接收与发送用一个CAN通道就行了,那么单片机的多个CAN通道是用来干什么用的呢?在实际使用中,单片机可能会与多个CAN网络通信,这时候每个CAN通道对应一个CAN网络。

为什么多条报文的接收与发送用一个CAN通道就行了呢?

1、发送多条报文时首先将报文按照优先级排序,高优先级报文优先发出。CAN报文发送采用双缓冲器机制来把正在加载和实际发送的报文分开,发送报文的同时将下一条报文加载到另一个缓冲器中。每个通道有三个发送缓冲器,可以一个来满足上述要求。

2、接收多条报文时,每个CAN通道有4个后台接收缓冲器(RxBG)、一个前台接收缓冲器(RxFG),前台接收缓冲器(RxFG)内的数据可以被CPU读取。报文通过过滤器后会被写入到有效RxBG中,MSCAN将RxBG中的内容转移到接收器FIFO(RxFG),将RXF置1,并向CPU发出接收中断,中断程序从RxFG读取接收到的报文,复位RXF标志,确认中断,释放前台缓冲器。新报文被接收到下一个可用RxBG中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值