完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教:
正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理; 异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗? |
|
相关推荐
7 个讨论
|
|
不知道是什么型号, 28069 手册上有段话说明了这个问题:
RMP[n] (RMP.31-0) has to be reset by the CPU after reading the data. If a second message has been received for this mailbox and the receive-message-pending bit is already set, the corresponding message-lost bit (RML[n] (RML.31-0)) is set. In this case, the stored message is overwritten with the new data if the overwrite-protection bit OPC[n] (OPC.31-0) is cleared; otherwise, the next mailboxes are checked. |
|
|
|
|
|
shaoye88 发表于 2018-10-17 16:12 DSP型号为TMS320F28335; 我们碰到过一个问题,在某种情况下,即使往DSP发送数据,但该DSP就是无法进入CAN接收中断,这种情况下,只要将该中断邮箱对应的RMP标志位清零,就可以正常进入CAN接收中断了; 所以,我想了解一下,当处于CAN接收中断处理函数中时,如果新的一帧数据又接收成功(仅仅使能了发送中断和接收中断),会不会导致上述的问题? |
|
|
|
|
|
trfchjc 发表于 2018-10-17 16:30 如果新的数据帧的优先级高的话,发生中断嵌套,否则新的中断pending,在中断处理函数的结尾清除RMP位,然后CPU开始处理等待中的中断。 |
|
|
|
|
|
感谢HankZhao的耐心解答,我对问题补充如下: 1、同样的数据,优先级一样,按照HankZhao的说法,此时应该处于中断Pending状态; 2、如果没有在中断函数的结尾处清除RMP位,此时会怎样?我怀疑如果没有清除RMP位的话,就会导致新的数据进来,也无法触发接收中断; 3、我的中断处理函数结构如下: 接收到一帧数据,进中断; interupt void CAN_Receive() [ (1)清除邮箱消息挂起标志位,即RMP[n]; (2)中断接收函数具体处理程序; (3)清除GIF0标志位,清除PIEACK标志位; ] 出中断,等待接收新的数据; 类似的问题,在上述的中断处理函数中,极端情况下,如果第二步(2)中断接收函数具体处理程序的处理时间非常长,假设为200us,这样就超出了一帧CAN数据的传送时间(8个字节的为120us左右),此时,就会出现即使接收到CAN数据也无法进入CAN接收中断的现象,查询此时的标志位,发现消息接收挂起标志RMP一直是1,但就是无法进入中断; 不知道这样,我的问题描述是否清楚,谢谢大家。 |
|
|
|
|
|
trfchjc 发表于 2018-10-17 16:59 1,是的,如果优先级一样,新的中断也会处于pending状态。 2,是的,如果没有清除RMP位,无法触发新的中断,置位RMP位在清除RMP位的同时也会清除GIF标志位。 3,中断处理函数不宜过长。步骤(1)已经清除过一次GIF0标志位,步骤(3)就不需要再清除了。 |
|
|
|
|
|
szoldman 发表于 2018-10-17 17:17 我最终解释一下,请HankZhao看一下是否正确。 28335的CAN接收中断的产生必须得有GIFn有一个从0到1的电平跳变过程,当DSP芯片底层CAN电路捕捉到该上升沿跳变过程时,就会产生一个中断; 而GIFn这个标志位是由消息挂起寄存器即RMPn决定的,当RMP为0时,GIF也为0;当RMP为1时,GIF也为1,所以,对于RMP的清零或者置1都会相应地引起GIF相同的变化; 在这个问题中,由于中断嵌套或者通讯机制不太合理,并且RMP的清零是在CAN接收中断函数起始处就进行的,因此,如果在CAN接收中断函数处理程序中,如果又接收到新的数据,那么RMP又置1,并且相应的GIF也置1,因此当退出CAN接收中断时,当接收到新的数据时,由于RMP和GIF始终为1,即高电平,DSP无法捕捉到上升沿电平的跳变,所以,没办法再次进入中断; 为了防止上述问题的发生,我们在每次退出CAN接收中断函数之前,得再次检查RMP是否被再次复位。 |
|
|
|
|
|
trfchjc 发表于 2018-10-17 17:29 这个推测挺合理的,在user guide中对接收步骤的描述也有类似的说明,进入中断需要先清除RMP位,以防止有新的数据进入而无法响应。在中断处理之后要再次检测RMP看是否又被置位。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
683 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
599 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1054 浏览 1 评论
740 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
524 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
163浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
127浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
127浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
123浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
170浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 04:55 , Processed in 1.163648 second(s), Total 74, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号