打印

关于串口DMA

[复制链接]
1839|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sonicll|  楼主 | 2008-11-6 09:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上看到不少人问串口使用DMA方式接收,DMA传输结束产生中断,然后从接收buffer里取数,如果串口接收的数量没有达到DMA设定的数量,那就不产生中断,buffer里的数就取不出来,然后就考虑加入一些超时中断之类的。我觉得要从接收buffer里取数,不一定要用DMA中断啊,DMA_CNDTR记录着DMA剩余的传输数量,如果DMA设定为循环模式,DMA传输数量设定为buffersize的大小,那么(buffersize - DMA_CNDTR)就可以作为buffer的头指针,自己再设定一个尾指针,把接收buffer构建成一个循环队列,采用查询方式,头尾指针不相等就取数,这样接收buffer里不管有多少数据都能取出来。因为循环模式下DMA_CNDTR会自动重装载,(buffersize - DMA_CNDTR)这个头指针就会自动完成循环,自己只要设定尾指针循环就行了。我最近在做SPI的DMA,采用了这种方法,串口应该也能用的。大家觉得这种方法怎么样,给点意见
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

883

帖子

3

粉丝