1、DMA简介
DMA(Direct Memory Access)直接存储器存取用来提供在外设和存储器之间或存储器和存储器之间的高速数据传输,无需CPU干预,数据可以通过DMA快速的移动,这就节省了CPU的资源来做其他操作。
两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
2、DMA主要特性
(1)12个独立的可配置的通道(请求):DMA1有7个通道,DMA2有5个通道;
(2)每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件配置;
(3)在同一个DMA模块上,多个请求件的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时有硬件决定;
(4)独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按照数据传输宽度对齐;
(5)支持循环的缓冲器管理;
(6)每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个独立的中断请求;
(7)存储器和存储器之间的传输;
(8)外设和存储器、存储器和外设之间的传输;
(9)闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;
(10)可编程的数据传输数目:最大为65535。
DMA框图
3、DMA处理
在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给他一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求,DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。
每次DMA的传送由3个操作组成:
(1)从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。
(2)存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。
(3)执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。
4、DMA通道配置过程
配置DMA通道x的过程(x代表通道号):
(1) 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将
是数据传输的源或目标。
(2) 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数
据将从这个地址读出或写入这个地址。
(3)在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
(4)在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
(5)在DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外
设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。
(6)设置DMA_CCRx寄存器的ENABLE位,启动该通道。
一旦启动了DMA通道,它既可响应连到该通道上的外设的DMA请求。
当传输一半的数据后,半传输标志(HTIF)被置1,当设置了允许半传输中断位(HTIE)时,将产生
一个中断请求。在数据传输结束后,传输完成标志(TCIF)被置1,当设置了允许传输完成中断位
(TCIE)时,将产生一个中断请求。