DMA直接存储访问概述




DMA Direct Memory Access 几乎存在所有先进的处理器中。它允许读写速度不同的外设和内存进行数据交互,而不需要占用CPU太多的时间。如果不用DMA机制,CPU需要将数据搬到暂存地,再搬到新地址上去。在这个时间中,CPU无法进行其他工作。
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器 工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
DMA有三种传送方式,即如何与CPU配合,完成数据传输的方式。
  1. 停止CPU访问内存。这是最简单粗暴的方式。DMA控制器接收到外设的请求后,发送一个信号要求CPU停止对内存的访问,开始自己的工作。在完成数据传送后,DMA通知CPU重新获得总线控制权。在这种工作方式下,CPU只能进行内部工作,而从外设读取数据的时间一般多于内存写入数据的时间。因此内存的效率没有完全发挥出来。
  2. 周期挪用。外设发出DMA请求时,DMA向CPU请求挪用几个内存周期。这种请求可能遇到两种情况。一是CPU没有在使用内存,则内存挪用水到渠成。另一种情况是CPU正好也要使用内存,则发生冲突。此时CPU让DMA优先使用内存。
  3. DMA与CPU交替访问内存。在产生DMA请求时,内存相当于对DMA控制器与CPU时分复用。这种方式实现的前提是CPU在一段时间内,一半时间进行内部工作,另一半时间使用内存。则DMA与其恰好相反,两不干涉。因此这种方式对于二者来说都是透明的
DMA机制具体到单片机上,可以允许ADC,时钟,传感器(IO口)等外设使用DMA传输数据到其他外设或SRAM。在这篇文章中有一些介绍 http://www.51hei.com/stm32/3864.html




DMA Direct Memory Access 几乎存在所有先进的处理器中。它允许读写速度不同的外设和内存进行数据交互,而不需要占用CPU太多的时间。如果不用DMA机制,CPU需要将数据搬到暂存地,再搬到新地址上去。在这个时间中,CPU无法进行其他工作。
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器 工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
DMA有三种传送方式,即如何与CPU配合,完成数据传输的方式。
  1. 停止CPU访问内存。这是最简单粗暴的方式。DMA控制器接收到外设的请求后,发送一个信号要求CPU停止对内存的访问,开始自己的工作。在完成数据传送后,DMA通知CPU重新获得总线控制权。在这种工作方式下,CPU只能进行内部工作,而从外设读取数据的时间一般多于内存写入数据的时间。因此内存的效率没有完全发挥出来。
  2. 周期挪用。外设发出DMA请求时,DMA向CPU请求挪用几个内存周期。这种请求可能遇到两种情况。一是CPU没有在使用内存,则内存挪用水到渠成。另一种情况是CPU正好也要使用内存,则发生冲突。此时CPU让DMA优先使用内存。
  3. DMA与CPU交替访问内存。在产生DMA请求时,内存相当于对DMA控制器与CPU时分复用。这种方式实现的前提是CPU在一段时间内,一半时间进行内部工作,另一半时间使用内存。则DMA与其恰好相反,两不干涉。因此这种方式对于二者来说都是透明的
DMA机制具体到单片机上,可以允许ADC,时钟,传感器(IO口)等外设使用DMA传输数据到其他外设或SRAM。在这篇文章中有一些介绍 http://www.51hei.com/stm32/3864.html



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值