DMA——一种硬件的方式在外设(Peripheral)和存储器(Memory),或者存储器和存储器之间传输数据,无需CPU干预,避免了CPU多次进入中断进行大规模数据拷贝,提高整体系统性能。
两个DMA:DMA0,DMA1
DMA0: P->M ; M->P
DMA1: P->M ; M->P ;M->M
支持三种传输方式:
– 存储器(SRAM)到外设;
– 外设到存储器(SRAM);
– 存储器(FLASH)到存储器(SRAM)(仅
DMA1
支持);
![](https://i-blog.csdnimg.cn/blog_migrate/96f842d296ad6e103f143788eb2840b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/66808949a615be30eb3696e8f61e01d5.png)
1、通道、外设请求
每个
DMA
控制器有
8
个通道,每个通道有多个外设请求。寄存器
DMA_CHxCTL
的
PERIEN位域决定了 DMA
通道选中的外设请求。
DMA0
与
DMA1
的外设请求映射分别列于
表
10-2.
DMA0
外设请求
与
表
10-3. DMA1
外设请求
。
M->M 无需配置,可以选择全部的通道和外设请求。
2、仲裁器
每个
DMA
控制器有两个分别对应于外设和存储器的仲裁器。当
DMA
控制器在同一时间接收到多个外设请求时,仲裁器将根据外设请求的优先级来决定响应哪一个外设请求。优先级规则如下:
- 软件优先级:分为4级,低,中,高和超高。可以通过寄存器DMA_CHxCTL的PRIO位域来配置;
- 硬件优先级:当通道具有相同的软件优先级时,编号低的通道优先级高。例:通道0和通道2配置为相同的软件优先级时,通道0的优先级高于通道2。
3、FIFO
4字FIFO(32中一个字=4个字节)
DMA
控制器的每个通道都有一个
4
字深度的
FIFO
用于缓冲数据,从源地址读取的数据会先暂时保存在FIFO
中,再传输到目的地址。根据
FIFO
的配置,
DMA
控制器支持两种数据处理模式:单数据传输模式和多数据传输模式。在存储器到存储器模式下,DMA
控制器仅支持多数据传输模式。
![](https://i-blog.csdnimg.cn/blog_migrate/d49405d196ad0c00cb6a64e0241507be.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2eb36484577b03dfff846c93b2277e67.png)