打印

用DMA进行串口数据接受有时候不方便地说

[复制链接]
3522|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiepengchenghn|  楼主 | 2011-7-7 00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果从上位机按帧从串口发送数据,且每帧数据的长度不确定,甚至每个帧长度的差异比较大,只知道最小帧长度,如果使用DMA方式进行接受,似乎有点不方便,因为帧数据长度不确定,也就没办法确定memory的长度,如果memory长度比较大,有可能全部数据存入后都没到memory的一半,因此没办法使用中断,使用查询方式也不方便。如果不用DMA的话,在USART的中断中接收,由于上位机用writefile调用驱动发送数据时是一次性发送,会出现数据丢失,只能在上位机中单字节发送数据,并且加少量延时。
而且使能了USART的DMA传输,似乎USART不再产生中断,因此也不能在上位机发送完一帧数据后,再补发一个数据以产生USART中断,这种情况有什么好办法呢?
刚刚想到,如果DMA的memory就使用8位,每次在DMA中断中进行处理会不会也出现数据丢失呢?
求解答
沙发
acgean| | 2011-7-7 08:22 | 只看该作者
收到一个数据就产生一次 DMA ,传输一个数据, 怎么会长度不同呢?
至于你的协议的数据包长度不同, 那就是上层软件的事情了.

使用特权

评论回复
板凳
tikelu| | 2011-7-7 13:54 | 只看该作者
不太了解了

使用特权

评论回复
地板
tikelu| | 2011-7-7 13:54 | 只看该作者
帮你定下吧

使用特权

评论回复
5
xiepengchenghn|  楼主 | 2011-7-7 19:36 | 只看该作者
2# acgean

就是数据包长度不同,所以不知道有没什么好点的办法啊

使用特权

评论回复
6
jgphu| | 2011-7-8 09:38 | 只看该作者
很容易啊, 你做串口中断接收,还建立一个队列的BUF, 循环查询这个BUF就好了。这样就不会有数据丢失了。

使用特权

评论回复
7
21ele| | 2011-7-12 11:59 | 只看该作者
如果确认每帧的数据是连续发送,但帧于帧之间有间隔时间,就可以使用dma接收,同时开串口的空闲符检测中断,检测到空闲符就停止dma接收,处理数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

粉丝