STM32F103的DMA
• DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作后,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。
• STM32F10X 系列芯片最多有2 个DMA 控制器(DMA2 仅存在大容量产品中),DMA1 有7 个通道。DMA2 有5 个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个DMA请求的优先权。
主要特性
• 12个 独立的可配置的通道(请求)DMA1有7个通道,DMA2 有5个通道
• 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
• 在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1,依此类推) 。
• 独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
• 支持循环的缓冲器管理
• 每个通道都有3个事件标志(DMA 半传输,DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
• 存储器和存储器间的传输
• 外设和存储器,存储器和外设的传输
• 闪存、SRAM 、外设的SRAM 、APB1 APB2和AHB外设均可作为访问的源和目标。
• 可编程的数据传输数目:最大为65536
DMA结构
• DMA控制器和Cortex™-M3核心通过总线矩阵共享系统数据总
线,执行直接存储器数据传输。
• 当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请
求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。
DMA进行数据传输的必要条件:
① 剩余传输数据量大于0
② DMA通道传输使能
③ 通道上DMA数据传输有事件请求
DMA请求
• 如果外设要想通过DMA 来传输数据,必须先给DMA 控制器发送DMA 请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且DMA 控制器收到应答信号之后,就会启动DMA的传输,直到传输完毕。
• STM32F10X有两个DMA控制器,DMA1和DMA2 (DMA2 仅存在大容量产品中),DMA1 有7 个通道。DMA2 有5 个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个DMA请求的优先权。
DMA通道
• DMA 具有12 个独立可编程的通道,其中DMA1 有7 个通道,DMA2 有5 个通道,每个通道对应不同的外设的DMA 请求。
• 虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。
• 每个通道可软件独立配置4种不同的优先级。
• 如果多个中断请求软件配置的优先级相同,则按请求的通道号大小决定优先级,通道号越小,优先级越高。
仲裁器
• 当发生多个DMA 通道请求时,就意味着有先后响应处理的顺序问题,仲裁器根据通道请求的优先级来启动外设/存储器的访问。 优先权管理分2个阶段:
• 软件:每个通道的优先权可以在DMA_CCRX寄存器中设置,有4个等级:
─ 最高优先级
─ 高优先级
─ 中等优先级
─ 低优先级
• 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权
DMA处理过程
• 在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。
• 每次DMA传送由3个操作组成:
- 从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARX或DMA_CMARX寄存器指定的外设基地址或存储器单元。
- 存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARX或DMA_CMARX寄存器指定的外设基地址或存储器单元。
- 执行一次DMA_CNDTRX寄存器的递减操作,该寄存器包含未完成的操作数目。