DMA的原理及使用

目录

1、什么是DMA

2、DMA特性

3、DMA框图

4、请求映射表

4.1、DMA1请求映射表

4.2、DMA2请求映射表


1、什么是DMA

DMA全称是Direct Memory Access,即是直接存储器访问。 DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使CPU的效率大为提高。


2、DMA特性

● 双 AHB 主总线架构,一个用于存储器访问,另一个用于外设访问
● 仅支持 32 位访问的 AHB 从编程接口
● 每个 DMA 控制器有 8 个数据流,每个数据流有多达 8 个通道(或称请求)
● 每个数据流有单独的四级 32 位先进先出存储器缓冲区(FIFO),可用于 FIFO 模式或直接模式。
● 通过硬件可以将每个数据流配置为:
   ①支持外设到存储器、存储器到外设和存储器到存储器传输的常规通道
   ②支持在存储器方双缓冲的双缓冲区通道
8 个数据流中的每一个都连接到专用硬件 DMA 通道(请求)
DMA 数据流请求之间的优先级可用软件编程(4 级别:非常高、高、中、低),在
软件优先级相同的情况下可以通过硬件决定优先级(例如请求 0 的优先级高于请求 1
● 每个数据流也支持通过软件触发存储器到存储器的传输(仅限 DMA2 控制器)
● 可供每个数据流选择的通道请求多达 8 个。此选择可由软件配置,允许几个外设启动DMA 请求
● 要传输的数据项的数目可以由 DMA 控制器或外设管理:
    ①DMA 流控制器:要传输的数据项的数目是 1 65535,可用软件编程
    ②外设流控制器:要传输的数据项数目未知并由源或目标外设控制这些外设通过硬件发出传输结束的信号
● 独立的源和目标传输宽度(字节、半字、字):源和目标的数据宽度不相等时, DMA自动封装/解封必要的传输数据来优化带宽。这个特性仅在 FIFO 模式下可用。
● 对源和目标的增量或非增量寻址
● 支持 4 个、 8 个和 16 个节拍的增量突发传输。突发增量的大小可由软件配置,通常等于外设 FIFO 大小的一半
● 每个数据流都支持循环缓冲区管理
5 个事件标志(DMA 半传输、 DMA 传输完成、 DMA 传输错误、 DMA FIFO 错误、直接模式错误),进行逻辑或运算,从而产生每个数据流的单个中断请求。


3、DMA框图

DMA的原理及使用_第1张图片

因为采用 AHB 主总线,它可以控制 AHB 总线矩阵来启动 AHB 事务。它可以执行下列事务:
             1、外设到存储器的传输
             2、存储器到外设的传输
             3、存储器到存储器的传输

注:存储器到存储器需要外设接口可以访问存储器,而仅 DMA2 的外设接口可以访问存储器,所以仅 DMA2 控制器支持存储器到存储器的传输, DMA1 不支持。

DMA的原理及使用_第2张图片


4、请求映射表

4.1、DMA1请求映射表

DMA的原理及使用_第3张图片

4.2、DMA2请求映射表

DMA的原理及使用_第4张图片

上表就列出了 DMA2 所有可能的选择情况,总共 64 种组合,比如我们要实现串口 1的 DMA 发送,即 USART1_TX,就必须选择 DMA2 的数据流 7,通道 4,来进行 DMA 传输。这里注意一下,有的外设(比如 USART1_RX)可能有多个通道可以选择,大家随意选择一个就可以了


 

你可能感兴趣的:(STM32)