DMA控制器
1 stm32的dma控制器有两组 DMA1,DMA2;
2 dma的运行也就是传输数据不通过内核,直接进行传输也就是cpu不干涉
3 DMA的数据传输方向 外设到储存器 储存器到外设 储存器到储存器
4 dma1有7个通道,dma2有5个通道 一个通道连接多个外设
5 DMA的优先级通过dma仲裁器来协调
DMA主要特性
1 dma的优先级通过软件编程设置,具有四种优先级别 很高 高 中 低 当优先级相同时由硬件决定。
2 源和目标数据必须对齐 两边同时为 半字 字 字节
3 每个通道具有三个中断标志 DMA半传输、 DMA传输完成和DMA传输出错
4 传输数据最大长度 65535
DMA框图
请注意图片下面的三句话
1 DMA2仅存在与大容量产品和互联网型产品
2 SPI/I2S3、 UART4、 TIM5、 TIM6、 TIM7和DAC的DMA请求仅存在于大容量产品和互联型产品
3 ADC3、 SDIO和TIM8的DMA请求仅存在于大容量产品
当cpu与DMA同时获取存储器或外设的数据时dma会暂时暂停,等待cpu若干个时钟周期。
DMA处理
在发生一个事件后,外设向DMA控制器发送一个请求信号。 DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时, DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求, DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。总之,每次DMA传送由3个操作组成。
从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传
输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。
存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输
时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。
执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。、
DMA中断
每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考
虑,通过设置寄存器的不同位来打开这些中断。
DMA1设备
DMA2
通道配置过程(软件初始化通道)
下面是配置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请求。
本文暂时没有评论,来添加一个吧(●'◡'●)