打印

串口收发DMA的一种思路

[复制链接]
1367|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
罗菜鸟|  楼主 | 2014-1-16 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口收发,在应用层通常都是直接调度UART_READ和UART_WRITE,不用去管中断的事。如果这两个函数没做好,发送的时候会多发,少发或者顺序颠倒,接收也会有这种问题。
我的一种思路。就是用DMA来模拟FIFO,STM32和GD32的UART,有个TC中断和一个IDLE中断,和FIFO的TX中断,RX_TIMEOUT中断类型。
发送的时候,设置一个软件FIFO,有push,pop,count。在调度UART_WRITE的时候,先获取count,再用PUSH来计数,函数结速的时候,count加上填入的值,开TC中断。TC中断会立即触发,在中断服务中发送DMA,DMA以POP为头,count为长度,设置DMA,不能超界。
因为TC中断在复位的时候就有标志位,而且在清除标志位后,必须等到DMA发完才能重新设置标志位。
沙发
caijie187| | 2014-1-19 10:07 | 只看该作者
不错的帖子

使用特权

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

本版积分规则

132

主题

522

帖子

8

粉丝