目录
概述
本文主要介绍STM32G4MCU的DMA功能,包括功能概述,应用特性,框架结构等内容。
1 DMA介绍
1.1 DMA的描述
直接存储器存取(DMA)控制器是总线主机和系统外围设备。DMA被用来在内存映射外设和/或存储器之间执行可编程的数据传输,在一个卸载的CPU的控制下。
DMA控制器具有单个AHB主架构。
DMA有两个实例,DMA1和DMA2(参见下表:DMA1和DMA2实现,了解支持的通道数量)。每个通道专门用于管理来自一个或多个外设的内存访问请求。每个DMA包括一个仲裁器,用于处理DMA请求之间的优先级。
1.2 DMA的主要特性
• 单AHB主控
• 外设到存储器,存储器到外设,存储器到存储器和外设到外设的数据传输
• 访问,作为源和目标,到片上内存映射设备,如闪存,SRAM, AHB和APB外设
所有DMA通道独立配置:
1)每个通道要么与来自外设的DMA请求信号相关联,要么与内存到内存传输中的软件触发器相关联。该配置由软件完成。
-
2)请求之间的优先级可以通过软件(每个通道有四个级别:非常高、高、中、低)和硬件(例如对通道1的请求比对通道2的请求具有优先级)进行编程。
-
3)源和目标的传输大小是独立的(字节,半字,字),模拟打包和拆包。源地址和目的地址必须在数据大小上保持一致。
-
4)支持通过循环缓冲区管理从外设到内存的传输
-
5)可编程传输数据数: 0 ~
每个通道生成一个中断请求。每个中断请求都是由三种DMA事件中的任何一种引起的:传输完成、传输一半或传输错误。
2 DMA的应用
2.1 DMA1和DMA2
DMA1和DMA2是用下表所示的硬件配置参数实现的。
2.2 DMA的映射关系
DMA控制器通过DMAMUX外设连接到来自AHB/APB外设的DMA请求。有关不同请求的映射,请参阅DMAMUX部分。
3 DMA的功能描述
3.1 架构框图
DMA框图如下图所示。
DMA控制器通过与其他系统主机共享AHB系统总线来执行直接内存传输。总线矩阵实现了循环调度。DMA请求可能会停止CPU对系统总线的访问数个总线周期,当CPU和DMA目标相同的目的地(内存或外设)。
根据其通过AHB从接口的配置,DMA控制器在DMA通道及其相关的接收请求之间进行仲裁。DMA控制器还在单个AHB端口主机上调度DMA数据传输。
DMA控制器为每个到中断控制器的通道生成一个中断。
3.2 DMA引脚和内部信号
3.3 DMA传输数据
该软件在通道级配置DMA控制器,以便执行由AHB总线传输序列组成的块传输。DMA块传输可以从外设请求,或者在存储器到存储器传输的情况下由软件触发。
事件发生后,发生单个DMA传输的以下步骤:
1. 外设向DMA控制器发送单个DMA请求信号。
2. DMA控制器根据与此外设请求相关联的通道的优先级为请求提供服务。3. 一旦DMA控制器授予外设,DMA控制器就会向外设发送一个确认。
4. 外设一旦得到DMA控制器的确认,就释放它的请求。
5. 一旦请求被外设解除断言,DMA控制器就释放确认。
外设可以再发出一个请求并启动另一个DMA传输。
当外设是传输的源或目的地时,使用请求/确认协议。例如,在内存到外设传输的情况下,外设通过将其单个请求信号驱动到DMA控制器来启动传输。DMA控制器从内存中读取单个数据,并将该数据写入外设。
对于给定的通道x, DMA块传输由以下重复序列组成:
1)单个DMA传输,在DMA上封装单个数据的两个AHB传输AHB总线主:
---1)从外设数据寄存器或存储器中读取的单个数据(字节、半字或字)内存中的位置,通过内部当前外设/内存地址寄存器寻址。第一次单次传输使用的起始地址是外设或内存,并在DMA_CPARx或DMA_CMARx中编程注册。
-
---2)向外设数据寄存器或存储器中的某个位置写入单个数据(字节、半字或字),通过内部当前外设/存储器地址寄存器寻址。用于第一次传输的起始地址是外设或内存的基址,并在DMA_CPARx或DMA_CMARx寄存器中编程。
-
2)编程后的DMA_CNDTRx寄存器的后递减这个寄存器包含要传输的数据项的剩余数量(AHB的数量)“先读后写”传输)。
重复这个序列,直到DMA_CNDTRx为空。
注意:
AHB主总线源/目的地地址必须与传输到源/目的地的单个数据的编程大小一致。
3.4 DMA仲裁
DMA仲裁器管理不同通道之间的优先级。当仲裁器授予活动通道x(硬件请求或软件触发)时,发出单个DMA传输(例如单个数据的AHB“读后写”传输)。然后,仲裁器再次考虑活动通道集并选择具有最高优先级的通道。
优先事项分两个阶段管理:
软件:每个通道的优先级在DMA_CCRx寄存器中配置为四个不同级别之一:
– very high– high– medium– low
硬件:如果两个请求具有相同的软件优先级,则索引最低的通道获得优先级。例如,通道2优先于通道4。
当通道x被编程为内存到内存模式的块传输时,在该通道x的每个单个DMA传输之间考虑重新仲裁。每当有另一个并发的活动请求通道时,DMA仲裁器自动交替并授予其他最高优先级的请求通道,该通道可能比内存到内存通道的优先级低。