STM32-(34):DMA传输控制(理论)

上一篇:STM32-(33):低功耗模式与唤醒 下一篇:STM32-(35):DMA传输控制(实验)

直接存储器传送(Direct Memory Access-DMA)

将外设的数据不经过CPU直接送入内存储器,或者,从内存储器不经过CPU直接送往外部设备
在这里插入图片描述
一次DMA传送只需要执行一个DMA周期(相当于一个总线读/写周期),因而能够满足高速外设数据传输的需要。

Direct Memory Access (存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过 CPU ,也不需要 CPU 干预。整个数据传输操作在一个称为" DMA 控制器"的控制下进行的。

CPU 除了在数据传输开始和结束时做一点处理外,在传输过程中 CPU 可以进行其他的工作。这样,在大部分时间里,CPU 和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。

DMA是在专门的硬件(DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入/输出操作方式。通常有两种方式:①独占总线方式②周期挪用方式

主要特性:

(1) 7个独立的可配置的通道(请求)
(2) 每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发.这些功能通过软件来配置。
(3) 在7个请求间的优先权可以通过软件编程设罝(共有四级:很高,高,中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1,依此类推)。
(4) 独立的源和目标传输宽度(字节,半字,全字),模拟打包和拆包的过程。
(5) 支持循环的缓冲器管理
(6) 每个通道都有3个事件标志( DMA 半传输, DMA 传输完成和 DMA 传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
(7) 存储器和存储器间的传输。
(8) 外设和存储器,存储器和外设的传输。
(9) 闪存, SRAM , 外 设 的 SRAM , APB 1和 APB 2外设均可作为访问的源和目标
(10) 可编程的数据传输数据:最大为65536

DMA控制器

1.DMA控制器
使用DMA方式传输时,需要一个专门的器件来协调外设接口和内存储器的数据传输,这个专门的器件称为DMA控制器,简称DMAC.

DMA的传送过程

1.DMA预处理:
CPU向DMA送命令,如DMA方式,主存地址,传送的字数等,之后CPU执行原来的程序。
2.数据传送:
在DMA控制下自动完成
3.DMA结束处理:
结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU.

DMA的内部寄存器

地址寄存器:存放DMA传输时存储单元地址;
字节计数器:存放DMA传输的字节数;
控制寄存器:存放由CPU设定的DMA传输方式,控制命令等;
状态寄存器:存放DMAC当前的状态,包括有无DMA请求,是否结束等。

DMA的内部结构

在这里插入图片描述
简析:我们可以看到DMAC中有刚刚提到的四种寄存器,首先进行预处理(即CPU把寄存器初始化设置OK),接口数据准备就绪,会向DMAC发出一个请求 DREQ,DMAC会向CPU申请系统总线的使用权,发出HOLD信号,如果CPU处于空闲或者任务处理完成之后,会回复一个 HLDA信号,DMAC得到CPU的回复后,会回复DACK信号给接口,表示可以传输数据,然后接口就会将数据放到总线上进行传输,DAMC通过控制地址与读写,将数据从接口送到内存储器或者将内存储器的数据送到接口。传输完成之后,HOLD就会放开,然后CPU就继续使用系统 总线。

DMA的传输过程

总线请求:DMAC向CPU申请使用总线
总线控制转移:CPU同意DMAC管理总线
数据传输:外设接口和存储器之间传输数据
修改地址和计数器:位下一次传输做准备
结束处理:DMAC放弃对总线的控制权

以上过程完全由硬件电路实现,速度很快。
用DMA方式进行一次数据传输所经历的时间称为“DMA周期”,大体相当于一次总线读写周期的时间。

STM32的DMA框图

在这里插入图片描述
DMA控制器和Cortex-M3核共享系统数据线执行直接存储器数据传输。

**简析:**外设如果有数据或者接受数据完成,会通过 DMA Request 发送相应的请求信号,AHB系统总线进入 AHB Stave,根据仲裁器和通道号进行相应的操作。DMA的通道,这里能看到的是7个(Ch1-Ch7) ,通道连接到下方图表中,DMA请求映像。
在这里插入图片描述
**简析:**这个图里的的请求映像其实相当于上图中的DMA Request,这7个通道是划分的,比如 ADC1/TIM2_CH3/TIM4_CH1他们的触发信号归类为通道1,这些都是 HW REQUEST 1为硬件的触发信号,另外还有 SW TRIGGER 为软件触发信号,一般是内存到内存,这里就与外设无关,这里通道优先级由上到下(1到7),每个通道可以单独打开与关闭,比如Channel 1 EN bit,每个通道都对应多个外设。

DMA 通道分配对照表

在这里插入图片描述

DMA通道配置过程

  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)时,将产生一个中断请求。

几种常用的模式

1、正常缓存模式
2、循环缓存模式
循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。在DMA_CCRx寄存器中的CIRC位用于开启这一功能。当启动了循环模式,数据传输的数目变为0时,将会自动地恢复成配置通道时设置的初值,DMA操作将会继续进行。

数据流向
1、外设到内存、内存到外设模式
2、内存到内存模式
当DMA通道的操作可以在没有外设请求的情况下进行,这种操作就是存储器到存储器模式。
当设置了DMA_CCRx寄存器中的 MEM2MEN位后,在软件设置了MA_CCRx寄存器中的EN位启动DMA通道时,DMA传输将马上开始,当DMA_CNDTRx寄存器变为0时,DMA传输结束。存储器到存储器模式不能与循环模式同时使用。

DMA的寄存器

在这里插入图片描述
具体寄存器各个位的配置请参照手册

上一篇:STM32-(33):低功耗模式与唤醒 下一篇:STM32-(35):DMA传输控制(实验)
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值