DMA直接存储器---基础概念

DMA简介

  • DMA(Direct Memory Access)直接存储器存取。
  • DMA可以提供外设寄存器(数据寄存器DR)和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。
  • stm32的DMA有12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道)。
  • 每个通道都支持软件触发和特定的硬件触发(每个DMA的硬件触发源不一样)
  • DMA是可以直接访问stm32内部的存储器,包括运行内存SRAM、程序存储器Flash和寄存器等等。

存储器映像

ROM--只读存储器,是一种非易失性、掉电不丢失的存储器。

RAM--随机存储器,是一种易失性,掉电丢失的存储器。

DMA框图

  • Cortex-M3内核,里面包含了CPU和内核外设等等。
  • Flash是主闪存,SRAM是运行内存。
  • 以总线矩阵为界,左边是主动单元,拥有存储器的访问权;右边是被动单元,它们的存储器只能被左边的主动单元读写。主动单元有DCode和系统总线,可以访问右边的存储器,其中DCode的总线是专门访问Flash,系统总线是访问其他的。
  • DMA1有7个通道,DMA2有5个通道,各个通道可以分别设置它们转运数据的源地址和目的地址,这样就可以各自独立的工作了。
  • 虽然多个通道可以独立转运数据,但DMA总线只有一条,所以所有的通道都只能分时复用这一条DMA总线,如果产生冲突,那就由仲裁器根据通道的优先级决定先后。
  • 在总线矩阵那里也会有个仲裁器,如果DMA和CPU都要访问同一个目标,那么DMA就会暂停CPU的访问,以防冲突,但总线矩阵仲裁器仍会保证CPU得到一半的总线带宽,使CPU也能正常工作。
  • AHB从设备也就是DMA自身的寄存器,这里连接在总线右边的AHB总线上,所有DMA即是总线矩阵的主动单元,可以读写各种存储器,也是AHB总线上的被动单元。
  • DMA请求就是DMA的硬件触发源。
  • Flash它是ROM只读存储器的一种,如果通过总线直接访问,无论是CPU还是DMA,都是只读取数据,而不能写入。

DMA 的基本结构

  • 从图可知,DMA的数据转运,可以是从外设到存储器,也可以存储器到外设,或者存储器到存储器。
  • 想要转运数据,首先要配置外设和存储器,指定传输计数器次数(自减计数器),每转运一次,计数器的数就会减1,值为0时,DMA就不会再进行数据转运,而且自增的地址也会恢复到起始地址订单位置,以方便下一次DMA的转运。
  • 自动重装器:传输计数器减到0时,是否自动恢复到最初值。
  • 选择硬件触发还是软件触发由M2M决定,当M2M为1时,DMA就会选择软件触发,以最快的速度,连续不断地触发DMA,尽快将传输计数器清零,完成这一轮的转换。(适用于存储器到存储器转运)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

¥sunrise

来自大牛的认可,是我梦寐以求的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值