打印
[STM32F1]

DMA直接存储器

[复制链接]
147|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1 DMA简介
DMA(Direct Memory Access)直接存储器存取

DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,数据可以通过DMA快速地移动,节省了CPU的资源。

12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道),每个通道专门用来管理来自于一个或者多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。

STM32F103C8T6DMA资源:DMA1(7个通道)

2 DMA的主要特性





3 功能描述
DMA控制器和Corte-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。

4 DMA处理
        在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给他一个应答信号。当从DMA控制器得到应答信号时,外设立即释放他的请求。一旦外设释放了这个请求,DMA 控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。

总之,每次DMA传送由3个操作完成:

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

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

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

5 仲裁器
仲裁器根据通道请求的优先级来启动外设/存储器的访问。

优先权管理分两个阶段:

(1)软件:每个通道的优先权可以在DMA——CCRx寄存器中设置,有四个等级“

———最高优先级

———高优先级

———中等优先级

———低优先级

(2)硬件:如果两个请求有相同的软件优先级,则较低编号的通道比较高编号的人通道有较高的优先权。例如:通道2优先于通道4。

注意:在大容量产品和互联网型产品中,DMA1控制器拥有高于DMA2控制器的优先级

6 DMA通道
每个通道都可以在有固定地址的外设寄存器和存储器地址之间执行DMA传输。DMA传输的数据量是可编程的,最大达到65535。包含要传输的数据项数量的寄存器,在每次传输后递减。





6.1可编程的数据量
外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程。

6.2指针增量



6.3通道配置过程



6.4循环模式和存储器到存储器模式



7 可编程的数据传输宽度、对齐方式和数据大小端



8 DMA常见使用场景和参数配置
DMA参数配置可参照这个结构图



场景一:DMA+数据转运




将SRAM里的一个数组DataA转运到另一个数组DataB中,是存储器到存储器的转运。

DMA配置

(1)外设站点和存储器站点的起始地址、数据宽度和地址是否自增这三个参数。

如图所示:外设地址填数组A的首地址,存储器地址是数组B的首地址。

数数据度,两个数组都是uint8类型,所以数据宽度都是按8位的字节传输。

两边地址都应该自增。

(2)方向参数

外设站点转运到存储器站点

(3)传输计数器和是否自动重装

传输7次,所以计数器是7,暂时不需要自动重装。

(4)触发选择部分

使用软件触发,因为是存储器到存储器的转运,所以不需要等待硬件时机。

(5)调用DMA_CMD,给DMA使能。

这样数组A的数据就可以转运到数组B,转运7次后,传输计数器自减到0,DMA停止,转运完成。整个过程相当于复制A的数据到B。

场景二:ADC扫描模式+DMA



左边位ADC扫描模式,当一个通道AD转换完成后,进行DMA数据转运,并且目的地址自增,这样数据就不会覆盖。

DMA配置:

外设地址写入ADC_DR寄存器的地址,存储器地址可以在SRAM中定义一个数组ADValue,然后把ADValue的地址当作存储器的地址。

因为ADC_DR和SRAM数组我们要的都是uint16_t的数据所以数据宽度都是16位的半字传输。

地址是否自增,从图中可以看出外设地址不自增,存储器地址自增。

传输方向是外设站点到存储器站点。

传输计数器,图中给出的ADC通道有7个,所以计数7次。计数器是否重装看ADC的配置,ADC如果是单次扫描,DMA计数器可以不自动重装,转换一轮停止。如果ADC是连续扫描,DMA可以使用自动重装,当ADC启动下一轮转换时,DMA也启动下一轮的转运,ADC和DMA同步工作。

触发选择:这里ADC_DR的值是在ADC单个通道转换完成之后才会有效,所以DMA转运的时机,需要和ADC单个通道转换完成同步,所以DMA的触发要选择ADC的硬件触发。

以上就是配置ADC扫描模式DMA的流程,一般来说DAM最常见的用途就是配合ADC扫描。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xiaobugl/article/details/146987795

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

4201

帖子

0

粉丝