1回答

0收藏

FRDM-KL25Z怎么使用UART DMA实现不定长数据接收?

#竞赛 #竞赛 3658 人阅读 | 1 人回复 | 2014-03-02

本帖最后由 bruce_helen 于 2014-3-2 13:52 编辑

之前一直使用的是STM32,在上面实现了UART DMA接收不定长的数据包。
具体做法:
首先初始化DMA控制器,开辟一个比较大的BUFFER给DMA使用,一般情况下接收的数据包都不会超过这个包大小。然后开启UART IDLE中断,在这个IDLE中断里关闭已经打开的DMA通道。之后,DMA会将之前没有完成的流程完成后给出DMA中断(不需要接收完成之前分配的数据长度),在中断中我们读取当前DMA已经存取的数据大小(长度)。根据数据长度我们就可以知道BUFFER中已经有多少数据了,接下来就是处理这些数据。

KL25Z也有IDLE中断,但是不知道是不是能像STM32一样,在这个中断中关闭DMA,之后等DMA完成中断?
我试了一下,发现参考手册中没有讲这方面的内容。我试着直接在IDLE中断中直接将DMA DONE置1会出现芯片一直进DMA中断,好像是影响芯片内部的状态机了,导致芯片出错。芯片手册上也写明了,在DMA正常操作的过程中改变状态会引起不可预估的错误。难道就没方法了么?






分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

brucehelen

发表于 2014-3-5 08:41:29 | 只看该作者

KL25Z不支持这样的操作,小数据量的直接使用中断,大数据量需要想其他方法。
阿莫讨论地址:
http://www.amobbs.com/thread-5571186-1-1.html

阿莫
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条