打印
[文档下载]

DMA使用

[复制链接]
974|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goodluck09876|  楼主 | 2016-7-6 12:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机的DMA使用心得
本人也是最近才深入了解一下DMA,前期使用单片机的时候基本上没有用到。一是不需要用到,二是心理上觉得DMA比较困难,所以不使用。在学习的过程中有一些心得体会,与大家分享一下。
首先介绍一下啥子是DMA,说的通俗易懂一点就是一个搬运工。既然是搬运工,就有几个需要注意的问题。
1.        从哪里搬运到哪里   一般是特殊寄存器到RAM(我们自己定义的数组里面),或者相反。
2.        一次搬运多少  一般是一个字节或者两个字节。
3.        搬多少的东西。
4.        什么时候开始搬  即DMA的中断源,简单的就是说别人有东西来了,你才能搬。在单片机里面可以表现为,串口接收到数据了,就开始搬到RAM,或者AD采样结束了,就开始搬运。当然这里需要提前配置好对应模块的寄存器。
5.        搬运结束了,DMA产生中断。就是搬运工把东西都搬完了,来找CPU结账来了,这时候CPU就要告诉他,要么你重新继续搬运,要么停止工作,等待新指令。
DMA基本上就这些
   这里以AD采样,然后利用DMA把数据传输到指定的数组里面为例作个简单的说明
沙发
goodluck09876|  楼主 | 2016-7-6 12:48 | 只看该作者
1.        初始化DMA,说明从搬运从AD采样结果的寄存器开始,搬到我们自己定义的数组里面,每次搬一个字节的数据,每次搬完了目标地址+1,搬512次,在AD采样结束后才开始搬运。
2.        初始化AD,这里不做介绍,和配置普通AD一样,采用软件触发方式,连续采样。
3.        配置完了就在主函数里面开始了,先初始化DMA,在初始化AD,打开DMA,然后打开AD采样。这时候AD就开不断在采集数据。每次采样完成后,就会有一次AD中断,AD中断每次产生,DMA就会把数据搬到我们制定的数组里面。
4.        当DMA搬了我们那么多的,这里是512个数据的时候,就会产生中断,我们在中断里面就要告诉DMA,搬的目标地址又变回去,搬的数目又变成512,然后又打开DMA,让他再次为我们工作。

使用特权

评论回复
板凳
落叶行健ywm| | 2016-7-6 13:20 | 只看该作者
一般数据处理量比较大的时候才会用。减少cpu符合。至少目前我也没在单片机上用过这个功能呢。

使用特权

评论回复
地板
goodluck09876|  楼主 | 2016-7-6 13:49 | 只看该作者
我也没有用到……

使用特权

评论回复
5
goodluck09876|  楼主 | 2016-7-6 13:50 | 只看该作者
这个只是转载的 感觉资料很好!

使用特权

评论回复
6
Rooney30| | 2016-7-6 16:22 | 只看该作者
使用dma就解放了CPU,效果非常好

使用特权

评论回复
7
goodluck09876|  楼主 | 2016-7-6 16:37 | 只看该作者
那我试验一下!

使用特权

评论回复
8
goodluck09876|  楼主 | 2016-7-6 16:39 | 只看该作者
一直使用NUVOTON,结果发现,低端的并没有PDMA

使用特权

评论回复
9
玄德| | 2016-7-6 17:18 | 只看该作者

关键是提高了速度。


使用特权

评论回复
10
泰山特曲123| | 2016-7-6 18:02 | 只看该作者
用了之后,不舍得放下!

使用特权

评论回复
11
ofsummer| | 2016-7-6 21:44 | 只看该作者
dma确实好用,尤其是做数据采集和数据传输的时候

使用特权

评论回复
12
tdh03z| | 2016-7-6 22:30 | 只看该作者
串口接收用DMA的循环模式,不再担心串口数据丢失问题。都不用开中断

有DMA的建议尽量用起来,确实方便很多

使用特权

评论回复
13
goodluck09876|  楼主 | 2016-7-7 14:24 | 只看该作者
那 DMA 用起来 方便吗?

使用特权

评论回复
14
碧螺春_123| | 2016-7-7 20:12 | 只看该作者
来个干活例程看看啊,,

使用特权

评论回复
15
zixialang168| | 2016-7-22 23:49 | 只看该作者
tdh03z 发表于 2016-7-6 22:30
串口接收用DMA的循环模式,不再担心串口数据丢失问题。都不用开中断

有DMA的建议尽量用起来,确实方便很多 ...

我接收的数据长度,最后面达不到接收完成中断,所以需要接收超时中断,手册上说有个DMA超时中断
但怎么也设置不了这个中断,不知你怎么实现的.我用的M452

使用特权

评论回复
16
yiyigirl2014| | 2016-7-23 20:30 | 只看该作者
资料真心不错,看完立马比从前更通透了。

使用特权

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

本版积分规则

220

主题

5843

帖子

20

粉丝