【8-1】DMA直接存储器存取

目录

一、DMA简介

二、存储器映像

三、DMA的结构图

1.主动单元

2.被动单元

3.DMA请求

四、DMA运营原理

1.数据的转运方向:

2.存储器的3个基本信息

3.传输计数器以及自动重装器

4.触发源选择

5.DMA转运启动条件

6.注意事项:

五、剩余细节问题


一、DMA简介

DMA(Direct Memory Access)直接存储器存取。DMA有对所有寄存器的访问权限,故而可以进行寄存器之间的互相存贮

DMA可以传递寄存器(运行内存SARM和程序存储器Flash)和外设(一般指外设的数据寄存器DR)、寄存器与寄存器之间的高速数据传输,无需CPU干预,节省了CPU资源

12条可配置的通道,DMA1(7条),DMA2(5条),但STM32 f103c8t6只有DMA1的7条通道

每条通道都可以通过软件或者硬件触发,比如想要将Flash中的信息转运到SARM中去,可以使用软件触发,而外设与寄存器之间就需要硬件触发。每个DMA的通道,硬件触发源都是不相同的

二、存储器映像

运算器,控制器,存储器,输入设备和输出设备运算器和控制器合称CPU,存储器重要的是其地址与内容。以下是STM32中的存储器的类型和名称(详情查看STM32f103x8B数据手册)

ROM是只读存储器,掉电不丢失;RAM是随机存储器,掉电丢失

三、DMA的结构图

首先以“总线矩阵”为分隔带,左侧为主动单元,拥有右侧被动单元的访问权,右侧为被动单元;只能被主动单元读写。Cortex-M3是CPU,其余部分为寄存器。

1.主动单元

有DCode和系统总线,DCode是专门访问Flash的,系统总线是用来访问其他存储器的。此外图中还有3条DMA总线,以太网DMA总线忽略不进行学习。此外,DMA1、DMA2各有7、5个通道,可以互不干扰地独自运行,但是DMA总线只有一条,由仲裁器来根据优先级来判断那个通道优先进行转存。在总线矩阵处,也有一个仲裁器,如果DMA与CPU同时访问同一个目标,则优先DMA通行,CPU部分通行。

2.被动单元

右侧包括Flash(主闪存),SRAM(运行内存),以及外设寄存器(也是SRAM存储器的一种,既可以被CPU进行读写,也可以通过连接的导线控制外设电路的状态),AHB从设备(DMA的一部分,同样是存储器),CPU就可以通过该通路实现对DMA的控制。故而DMA就是一种将寄存器中的内容相互传递的工具。

此外ROM是只读存储器,如果DMA目的地址直接写入相关寄存器比如Flash会导致报错

3.DMA请求

硬件触发DMA的通路

四、DMA运营原理

1.数据的转运方向:

外设-->SROM,SROM、Flash-->外设,Flash-->SRAM,SRAM-->SRAM,四种情况,由于Flash是只读存储器,不可以作为写入地址

2.存储器的3个基本信息

起始地址:从哪里来,到哪里去

数据宽度:指定一次转运,要按多大的数据宽度(数据类型)进行

地址是否自增:下一次转运,是否要转运到下一个位置中去(ADC扫描模式需要使用)

3.传输计数器以及自动重装器

传输计数器就是一个自减计数器,设置自减次数作为DMA转运次数,自减完成后就会将自增地址转换为起始地址.

自动重装器判断是否从新计数,启用该重装器,就是开启连续转换,关闭就是单次转换

4.触发源选择

触发有两个来源,分别是软件触发和硬件触发.M2M来决定使用软件触发还是硬件触发,M2M位1时,使用软件触发,位0时硬件触发.这里的软件触发和前面的自动重装器不可以同时使用,软件触发就是为了尽可能快速地完成对传输计数器的置0。软件触发一般用于存储器到存储器的触发,硬件触发一般适用于外设与存储器之间的触发

5.DMA转运启动条件

(1)触发源(M2M)赋值

(2)给传输计数器赋值

(3)DMA_Cmd()函数的启用(对该部件通电)

6.注意事项:

当传输计数器自减位0后,且自动重装器没有给计数器重装值,就需要先断电(DMA_Cmd函数置DISABLE),再给重装器赋值,之后再通通电

五、剩余细节问题

1.EDA1请求映像

EN=0,数据选择器不工作,取1工作;当M2M位取1是,采用软件触发。每个硬件触发源的通道都不同,使用外设触发需要与下图一一对应,对应的,如果是使用软件触发,那么使用哪个通道都一样。

2.数据对齐

当原宽度与目标宽度相等时,则正常转运;当原宽度小于目标宽度时,在高位写入0(如8--16);当原宽度大于目标宽度时,则省略高位

六、实际情况下,DMA的工作原理

1.数据转运+DMA

(1)填写三个基本信息,a.DataA的首地址与DataB的首地址,b.选择自增模式,c.两个都是uint8_t,大小一样

(2)无需自动重装

(3)触发源选择软件触发,E2E选择1;共有7个数据进行传输,传输计数器置7

(4)启动电源

注意:该转运属于复制转运,转运完后,DataA依旧保留有原来的数据

2.ADC扫描模式+DMA

(1)外设地址写入ADC_DR的地址,目的地址写入存储器的地址。ADC_DR和SRAM都是UInt16_t的大小,外设地址不自增(外设只有一个寄存器位,只能保留一个数据),SRAM自增

(2)传输计数器记7次,而是否自动重装,则可以看ADC是循环模式还是单次模式

(3)触发选择,ADC硬件触发,而且ADC_DR是在第一个通道转换完成后才有使用的意义。此外每个通道完成后都会申请一次DMA请求,用来提醒转运

注意:DMA与ADC基本是绑定的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值