DMA直接存储器访问

发布时间:2023年12月19日

什么是DMA?

DMA(Direct Memory Access ,直接存储器访问 ) 提供在 外设与内存 存储器和存储器 外设
与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,它允许数据在不经过中央处理单元(CPU)的情况下,在内存和外设之间直接进行传输。DMA的目的是提高数据传输的效率,减轻CPU的负担,使CPU能够在数据传输过程中执行其他任务。
在没有DMA的情况下,数据传输通常是由CPU负责的。CPU从一个设备读取数据,然后将数据写入另一个设备,这个过程需要CPU的介入和处理。而使用DMA时,CPU只需要配置好DMA控制器,然后可以继续执行其他任务,而数据的传输由DMA控制器直接管理。

DMA的主要特点包括:

  1. 减轻CPU负担: DMA允许数据在外设和内存之间直接传输,无需CPU的干预。这样,CPU可以在数据传输过程中执行其他任务。

  2. 提高数据传输速度: 由于没有CPU的介入,DMA可以更高效地管理数据传输,从而提高传输速度。

  3. 适用于大量数据传输: DMA特别适用于需要大量数据传输的场景,例如图形处理、音频处理、网络通信等。

  4. 降低能耗: 由于CPU在数据传输过程中可以进入低功耗状态,使用DMA可以降低系统的能耗。

在嵌入式系统和实时系统中,DMA常用于高性能的数据传输,例如音频、视频处理、网络数据传输等。 DMA通常由硬件支持,并且在操作系统和编程库中提供相应的API供开发者使用。

简单描述:
就是一个数据搬运工!!

搬运什么数据?

存储器、外设
这里的外设指的是 spi usart iic adc 等基于 APB1 APB2 AHB 时钟的外设,而这里的存
储器包括自身的闪存 (flash) 或者内存 (SRAM) 以及外设的存储设备都可以作为访问地源或者目
三种搬运方式:
  • 存储器存储器(例如:复制某特别大的数据buf)
  • 存储器外设 (例如:将某数据buf写入串口TDR寄存器)
  • 外设存储器 (例如:将串口RDR寄存器写入某数据buf

DMA 控制器

STM32F1032 DMA 控制器,DMA17个通道,DMA25个通道。

一个通道每次只能搬运一个外设的数据!! 如果同时有多个外设的 DMA 请求,则按照优先级进
行响应。
DMA1 7 个通道:

?DMA25个通道:

DMA及通道的优先级
优先级管理采用软件 + 硬件:
  • 软件: 每个通道的优先级可以在DMA_CCRx寄存器中设置,有4个等级
? ? ? ? ? ? ? ? ? 最高级>高级> 中级 > 低级
  • 硬件: 如果2个请求,它们的软件优先级相同,则较低编号的通道比较高编号的通道有较高的优先权。
???????????????????比如:如果软件优先级相同,通道2优先于通道4

?

DMA传输方式
  • DMA_Mode_Normal(正常模式)
一次 DMA 数据传输完后,停止 DMA 传送 ,也就是只传输一次
  • DMA_Mode_Circular(循环传输模式)
当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。 也就是
多次传输模式
指针递增模式
外设和存储器指针在每次传输后可以自动向后递增或保持常量。当设置为增量模式时,下一个要
传输的地址将是前一个地址加上增量值。
文章来源:https://blog.csdn.net/qq_61391875/article/details/135082930
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。