1. 问题
依据上篇【S32K144调试笔记】CANFIFO&DMA SDK 配置测试的配置,如果在MCU向外连续发送报文的过程中,用上位机连续发送几帧报文,则将反复进入CAN中断,且无法复位。
理论上,配置成DMA后,接收只进DMA的中断,本来发送就是进中断的,但进去后会清除中断标志位的。现在反复进,不能理解是什么原因。
2. 真因
当接收到上位机的报文后(只发一帧),DMA中断触发,可以看到,此时 IFLAG1 的bit11置位,因为配置的Mailbox11是发送,【正常】。
将断点打在CAN中断处理函数中,连续运行几次,发现,仍是IFLAG1 的bit11置位。【正常】。
现将CAN中断处理函数处的断点取消,但是不取消MDA的中断处理函数处的断点,再发送一帧:
可以看到,在中断处理函数中,IFLAG1寄存器,FIFO的中断Flag也置位了。并没有在DMA中断处停下 【异常】
在FLEXCAN_IRQHandlerRxFIFO函数中,state的状态是FLEXCAN_MB_IDLE,无法清除FIFO中断标志。
这难道是SDK的bug吗?
3. 解决方案
3.1 临时方案
将FlexCAN的接收模式改为中断型,测试可用。可以临时解决问题。
写在最后:
之前在调试的时候,没有测试充分,现在项目紧张地进行,没有空去细细研究。