打印
[应用相关]

如何高效的使用DMA?

[复制链接]
楼主: ifree64
手机看帖
扫描二维码
随时随地手机跟帖
21
forever3609| | 2013-4-28 23:26 | 只看该作者 回帖奖励 |倒序浏览
好贴,学习了,谢谢。

使用特权

评论回复
22
error_dan| | 2013-4-29 15:22 | 只看该作者
最简单的,AD+DMA外设启动之后,应用程序直接到固定的地址去读数据就行了.

使用特权

评论回复
23
gxgclg| | 2013-4-29 15:58 | 只看该作者
香水城 发表于 2008-9-26 12:27
举个例子:一个系统要求每个一段时间需要把RAM中数据备份到外部EEPROM,你就可以启动DMA传送数据到外部EEPR ...

很形象的例子

使用特权

评论回复
24
yybj| | 2013-4-29 16:10 | 只看该作者
香主的解答还是很给力的

使用特权

评论回复
25
无冕之王| | 2013-4-29 16:18 | 只看该作者
香主提的很多建议都很有用

使用特权

评论回复
26
GeekNFC| | 2013-4-29 18:28 | 只看该作者
就算是单线程运行,DMA还是有可能比软件copy数据更快,因为DMA是全硬件操作的,不需要插入程序运行延时。

使用特权

评论回复
27
拿起书本| | 2013-5-10 19:47 | 只看该作者
DMA只在传大块的数据时有才优势,在一般的小单片机系统里用DMA,几乎没有意义.学习中

使用特权

评论回复
28
hanzhenfei| | 2014-7-5 11:42 | 只看该作者
看到此贴受益匪浅!!!!!

使用特权

评论回复
29
diweo| | 2014-7-5 11:56 | 只看该作者
本帖最后由 diweo 于 2014-7-5 11:58 编辑
拿起书本 发表于 2013-5-10 19:47
DMA只在传大块的数据时有才优势,在一般的小单片机系统里用DMA,几乎没有意义.学习中 ...
我举个例子吧,
用单片机与触摸屏通信,使用Modbus协议,数据长度 从几字节到几十字节不等。
假设波特率为9600,如果用发送完成中断 ,那要中断好多次。而且每次中断大约1ms。如果用查询方式,那么几到几十ms的时间CPU不能做别的事。
使用DMA的话,配置好后,直接发送了。必要时可以开启DMA传输完成中断,中断1次就够了。当然,代价就是要事先配置一个足够大的缓冲区,尽管这个缓冲区大多数时候都不满。

使用特权

评论回复
30
runningwzf| | 2014-7-5 17:18 | 只看该作者
用操作系统吧,你可以充分体会DMA的溢出

使用特权

评论回复
31
qingfengsgl| | 2024-9-25 13:08 | 只看该作者
我觉得下面这个例子,可以回复楼主的疑问,因为我也这样疑问过。
假设这样一种应用情况,MCU通过SPI刷屏,且没有其他活要干。那么使用DMA传输SPI,和查询完成标志位阻塞传输SPI没什么区别。 这种情况下,查询标志位阻塞传输SPI甚至要比字节中断方式传输SPI要更节约时间。
这种情况,使用DMA传输时,刷屏的帧是由单次DMA传输完成所有像素点的时间决定的,DMA本身无法让它变的更快,下一帧的数据传输也不应该在上一帧传输完之前就开始发送,否则图像会显示不全。顶多又加个乒乓方式,缩短一下数据到DMA缓存的时间,但这个提升应该很小。  所以,假设单片机只有这种单一重复任务,即便是使用DMA,也无法提高其效率。  
以上的情况只是能解答楼主对于DMA的传输疑问,但恰恰在我们应用MCU时,很少会有只执行单个任务的情况,这时候就可以通过DMA的完成中断,和自己分配任务分割,来巧妙的利用一帧数据的DMA传输过程中的时间了。
如果有不对的解释,请大神指证。

使用特权

评论回复
32
610u| | 2024-9-29 22:28 | 只看该作者
正确的做法应该是DMA传输的过程中

使用特权

评论回复
33
更多更合适ii| | 2024-10-2 21:40 | 只看该作者
for(i = 0; i < 512; ++i){     while(数据没有准备好);    // 等待     *buff++ = 数据源

使用特权

评论回复
34
天天向善| | 2024-10-6 15:24 | 只看该作者
最简单的方法是,ad+dma外设启动后,应用可以直接去固定地址读取数据。

使用特权

评论回复
35
理想阳| | 2024-10-7 07:52 | 只看该作者
香火大师的回答还是很厉害的

使用特权

评论回复
36
LLGTR| | 2024-10-7 17:27 | 只看该作者
朱湘提出的许多建议非常有用

使用特权

评论回复
37
物联万物互联| | 2024-10-10 06:31 | 只看该作者
使用该操作系统,您可以充分体验dma的溢出

使用特权

评论回复
38
AIsignel| | 2024-10-10 12:31 | 只看该作者
朱祥提出的许多建议很有用,

使用特权

评论回复
39
Pretext| | 2024-10-10 21:58 | 只看该作者
高效使用DMA(直接内存访问)需注意合理分配资源、优化数据传输路径、合理调度数据传输时序,确保数据传输与CPU并行处理协同工作。

使用特权

评论回复
40
primojones| | 2024-10-11 20:41 | 只看该作者
使用DMA传输时,尽量使用连续的内存空间,以避免传输中断和数据对齐问题。

使用特权

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

本版积分规则