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

[复制链接]
 楼主| 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 | 显示全部楼层
帮你定下吧
 楼主| xiepengchenghn 发表于 2011-7-7 19:36 | 显示全部楼层
2# acgean

就是数据包长度不同,所以不知道有没什么好点的办法啊
jgphu 发表于 2011-7-8 09:38 | 显示全部楼层
很容易啊, 你做串口中断接收,还建立一个队列的BUF, 循环查询这个BUF就好了。这样就不会有数据丢失了。
21ele 发表于 2011-7-12 11:59 | 显示全部楼层
如果确认每帧的数据是连续发送,但帧于帧之间有间隔时间,就可以使用dma接收,同时开串口的空闲符检测中断,检测到空闲符就停止dma接收,处理数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部