DMA原理介绍

DMA(直接存储器访问)是一种高效的数据传输方式,它允许外设和存储器之间无需CPU介入进行数据交换。STM32F411x系列芯片的DMA控制器支持多个通道,具有独立的优先级设置,并能执行内存到内存、外设到内存、内存到外设的传输。每个通道有事件标志和中断请求,可以配置传输宽度和数据传输数目。在传输过程中,总线仲裁器确保CPU和DMA公平访问系统总线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DMA的基本定义

DMA,全称Direct Memory Access,即直接存储器访问。

 

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。

 

DMA的主要特征

·每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发,这些功能通过软件来配置。

 

·在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推)。

 

·独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。

 

·支持循环的缓冲器管理。

 

·每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。

 

·存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输。

 

·闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。

 

·可编程的数据传输数目:最大为65535(0xFFFF)。

 

STM32F411x系列芯片DMA控制器

DMA的工作框图如下图所示。DMA控制器和Cortex™-M4核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。

 

DMA控制器传输作为AHB主设备操作直接存储器,它可以控制AHB总线的控制矩阵以启动AHB传送。它可以执行以下信息交换:

 

•外设到内存

 

•内存到外设

 

•内存到内存

 

DMA控制器提供两个AHB主端口:AHB内存端口(用于连接到内存)和AHB外设端口(用于连接到外设)。 但是,为了允许内存到内存的传输,AHB外设端口也必须可以访问内存。AHB从端口用于对DMA控制器的编程控制(仅支持32位访问)。

DMA处理

 

对于两个DMA控制器的系统实现如下图所示。DMA1控制器AHB外设端口没有像DMA2控制器那样连接到总线矩阵,所以只有DMA2能够执行内存到内存的数据传输。

71f8741d10b1407fb7f6816d107528d3.jpeg

 a79dc4996d004e728fbc4c7500248f45.png

 DMA事务由给定数量的数据传输序列组成,可以传输的数据项的数量及其宽度(8位,16位或32位)可以通过软件编程实现。每个DMA传输都包含三个操作步骤:

 

·从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;

 

·存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;

 

·执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。

通道选择

 

事件发生后,外设向DMA控制器发送请求信号,DMA控制器根据通道优先级来处理请求。当DMA控制器访问外围设备时,确认信号即由DMA控制器发送到外围设备,一旦外围设备从DMA控制器收到确认信号,它就会释放其请求,当外设取消了该请求后,DMA控制器将释放确认信号。 如果外设还有更多请求,它可以启动下一轮请求操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值