嵌入式开发者社区

标题: c6657串口edma问题 [打印本页]

作者: badkid    时间: 2022-4-2 14:57
标题: c6657串口edma问题
本帖最后由 badkid 于 2022-4-2 15:02 编辑

请问一个问题:我使用的是C6657,使用串口0作为和上位机的通信口,串口设置为EDMA模式。
1、在常规的使用中,DSP和上位机之间有一个串口通信协议,协议中规定每次上位机下发数据时每一包的长度,DSP根据该长度初始化EDMA接收,这样通信是没有问题的。
2、但是上位机有时会因为种种原因,下发的数据包没有按照之前我们协议中规定的长度,存在下发的真实长度比协议长度要长的问题,这样DSP在接收到本次edma中断之后,接下来EDMA的中断就完全接收不到了。
3、但是在查看uart寄存器时,发现UART的LSR寄存器表明串口确实接到了上位机下发的数据,从RBR寄存器也可以读出数据。
上面就是我遇到的问题,请问这种问题该怎么解决,,也可以约束上位机下发时的长度判断,但是如果从DSP的角度解决的话,应该怎么去解决?
我的思路是:uart寄存器可以正常读数据,但是edma无法触发中断,就需要将edma的中断重新配置或者有相关寄存器可以将错误模式清除,但是现在还没找到解决办法。


作者: badkid    时间: 2022-4-7 17:03
我还是自己回答一下问题吧
在每次收到edma中断之后,将串口缓冲区的数据全部读出,并清除edma的次要事件对应的位,则问题解决,可以继续接收之后的中断。

作者: badkid    时间: 2022-4-7 17:09
我还是自己回答一下问题吧
在每次收到edma中断之后,加一个对串口数据寄存器的判断,若有数据则读出来,同时清除edma次要事件寄存器的相应位。
作者: Ruiven    时间: 2022-4-18 16:20
楼主方便加个联系方式一起学习吗




欢迎光临 嵌入式开发者社区 (https://51dsp.net/) Powered by Discuz! X3.4