打印

DMA到底是干什么的,有DMA后,不需要芯片参与了吗

[复制链接]
2833|13
手机看帖
扫描二维码
随时随地手机跟帖
沙发
冰是睡着的冰| | 2017-5-24 14:09 | 只看该作者
DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。从这方面说,有了DMA,好多工作就不需要芯片参与了。

使用特权

评论回复
板凳
yysforever| | 2017-5-24 14:18 | 只看该作者
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。

使用特权

评论回复
地板
Dennis-Zhou| | 2017-5-24 19:41 | 只看该作者
也不是完全不占用cpu时间的。在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。

使用特权

评论回复
5
jouney316| | 2017-5-24 19:43 | 只看该作者
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过程中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。

使用特权

评论回复
6
l科科1987| | 2017-5-25 17:59 | 只看该作者
在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。并不是完全不需要cpu的。

使用特权

评论回复
7
dongbaohui| | 2017-5-25 18:04 | 只看该作者
通过DMA把数据从外设和内存之间的自动搬迁,DMA是MCU内的搬运工形象地说,节省软件的开销;

使用特权

评论回复
8
ahhsyf| | 2017-5-26 11:56 | 只看该作者
比如STM32中,用DMA有什么好处呢?不用有什么坏处呢?

使用特权

评论回复
9
原味_郭| | 2017-5-26 11:58 | 只看该作者
用和不用当然都可以发送。不用DMA发送是需要单片机实时参与,由单片机一个一个地发送数据并进行监控。但是如果用DMA,设置了起始地址,数据大小等参数后,就直接由专门的一个DMA模块进行数据发送,发送过程中单片机无需参与。发送完后会产生中断告知单片机。由此可知用DMA可以节省单片机资源,让单片可以在同一时间里干更多事。

使用特权

评论回复
10
liutongda| | 2017-5-26 16:23 | 只看该作者
我看手册上说,STM32 DMA1有7个通道,DMA2有5个通道,这些通道可以同时使用吗?

使用特权

评论回复
11
enginezhong| | 2017-5-26 16:27 | 只看该作者
liutongda 发表于 2017-5-26 16:23
我看手册上说,STM32 DMA1有7个通道,DMA2有5个通道,这些通道可以同时使用吗? ...

对的,只要通道是独立的,就可以同时使用的。

使用特权

评论回复
12
gaoxiansheng| | 2017-5-26 20:04 | 只看该作者
DMA一次可以传输多少数据呀?

使用特权

评论回复
13
myidear| | 2017-5-26 20:09 | 只看该作者
   传统的DMA的概念是用于大批量数据的传输,但是我理解,在STM32中,它的概念被扩展了,也许更多的时候快速是其应用的重点。数据可以从1~65535个。

使用特权

评论回复
14
新人求带| | 2017-5-27 17:15 | 只看该作者
不可能吧?65536个。mcu也没有那么大的缓冲吧?

使用特权

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

本版积分规则

27

主题

205

帖子

0

粉丝