直接存储器存取(Direct Memory Access,DMA)详细讲解

发布者:leader5最新更新时间:2024-08-14 来源: cnblogs关键字:直接存储器存取  Direct  Memory  Access  DMA 手机看文章 扫描二维码
随时随地手机看文章

一、理论理解部分。

1、直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

2、无须CPU干预,数据可以通过DMA快速移动,这就节省了CPU的资源来做其他操作。

3、两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自一个或者多个外设对存储器访问的请求。

4、还有一个冲裁器协调各个DMA请求的优先权。在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中和低),优先权设置相等时由硬件决定(请求0优先请求1,)

5、每个通道都有三个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这三个事件标志逻辑或成为一个单独的中断请求。

6、闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。

7、可编程的数据传输数目:最大为65535

8、如果外设要想通过DMA 来传输数据,必须先给DMA 控制器发送DMA 请求,DMA 收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且DMA 控制器收到应答信号之后,就会启动DMA 的传输,直到传输完毕。DMA 有DMA1 和DMA2 两个控制器,DMA1 有7 个通道,DMA2有5 个通道,不同的DMA 控制器的通道对应着不同的外设请求,这决定了我们在软件编程上该怎么设置,具体见DMA 请求映像表。

 

 

 

 

9、

仲裁器当发生多个DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器也管理。仲裁器管理DMA 通道请求分为两个阶段。第一阶段属于软件阶段,可以在DMA_CCRx 寄存器中设置,有4 个等级:非常高、高、中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的DMA通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高,比如通道0 高于通道1。

 (为了解决多个DMA请求时,就有先后顺序,有一个仲裁器管理,分为两部分:1、软件处理,可以设置非常高、高、中、和低四个优先级,2、优先级一样,则看他们的编号,编号越低优先权越高)

 

 DMA数据配置的详细解说:

使用DMA,最核心就是配置要传输的数据,包括数据从哪里来,要到哪里去,传输的数据的单位
是什么,要传多少数据,是一次传输还是循环传输等等。
从哪里来到哪里去
我们知道DMA 传输数据的方向有三个:从外设到存储器,从存储器到外设,从存储器到存储器。
具体的方向DMA_CCR 位4 DIR 配置:0 表示从外设到存储器,1 表示从存储器到外设。

这里面涉及到的外设地址由DMA_CPAR 配置,存储器地址由DMA_CMAR 配置。

 

要传多少,单位是什么
当我们配置好数据要从哪里来到哪里去之后,我们还需要知道我们要传输的数据是多少,数据的
单位是什么。以串口向电脑发送数据为例,我们可以一次性给电脑发送很多数据,具体多少由
DMA_CNDTR 配置,这是一个32 位的寄存器,一次最多只能传输65535 个数据。要想数据传输正
确,源和目标地址存储的数据宽度还必须一致,串口数据寄存器是8 位的,所以我们定义的要发送的
数据也必须是8 位。外设的数据宽度由DMA_CCR 的PSIZE[1:0]配置,可以是8/16/32 位,存储器
的数据宽度由DMA_CCR 的MSIZE[1:0]配置, 可以是8/16/32 位。
在DMA 控制器的控制下,数据要想有条不紊的从一个地方搬到另外一个地方,还必须正确设置
两边数据指针的增量模式。外设的地址指针由DMA_CCRx 的PINC 配置,存储器的地址指针由
MINC 配置。以串口向电脑发送数据为例,要发送的数据很多,每发送完一个,那么存储器的地址指
针就应该加1,而串口数据寄存器只有一个,那么外设的地址指针就固定不变。具体的数据指针的增量
模式由实际情况决定。
什么时候传输完成
数据什么时候传输完成,我们可以通过查询标志位或者通过中断的方式来鉴别。每个DMA 通道
在DMA 传输过半、传输完成和传输错误时都会有相应的标志位,如果使能了该类型的中断后,则会
产生中断。有关各个标志位的详细描述请参考DMA 中断状态寄存器DMA_ISR 的详细描述。传输完
成还分两种模式,是一次传输还是循环传输,一次传输很好理解,即是传输一次之后就停止,要想再传
输的话,必须关断DMA 使能后再重新配置后才能继续传输。循环传输则是一次传输完成之后又恢复
第一次传输时的配置循环传输,不断的重复。具体的DMA_CCR 寄存器的CIRC 循环模式位控制。

 

 

二、编程要用的成员:

 

 

1、DMA_DIR : 传输方向选择, 可选外设到存储器、存储器到外设。它设定DMA_CCR 寄存器的DIR[1:0]位的值。这里并没有存储器到存储器的方向选择, 当使用存储器到存储器时,只需要把其中一个存储器当作外设使用即可。

(DMA_DIR_PeripheralDST:外设作为数据传输的目的地          DMA_DIR_PeripheralSRC:外设作为数据传输的来源)

2、DMA_PeripheralInc:

DMA_MemoryInc=         //内存地址寄存器递增与否
DMA_PeripheralInc=               //外设地址寄存器递增与否   

如果配置DMA_PeripheralInc_Enable,使能外设地址自动递增功能,它设定DMA_CCR 寄存器的PINC 位的值;一般外设都是只有一个数据寄存器,所以一般不会使能该位。(自动递增的意思就是:相当路边的自动出售饮料机器一样,当你买了一瓶汽水,拿出来了,然后后面有自动补上去,这就是自动递增,这里的数据也是一样,始终拿第一个数据,其他的会自动递增上来,不好意思,由于理解错误,现在做一下修改:是拿水瓶的手是)

3、DMA_BufferSize=          //设定待传输数目

4、DMA_M2M=          //使能DMA通道的内存到内存传输
5、DMA_MemoryBaseAddr=    //存储器地址
6、DMA_MemoryDataSize=      //内存数据宽度
7、DMA_PeripheralDataSize=  //外设数据宽度

8、DMA_Mode=          //工作模式,优先级
9、DMA_PeripheralBaseAddr=      //外设地址
10、DMA_Priority=          //软件设置通道的优先级


关键字:直接存储器存取  Direct  Memory  Access  DMA 引用地址:直接存储器存取(Direct Memory Access,DMA)详细讲解

上一篇:Systick时钟定时
下一篇:基于Systick系统时钟延时的LED闪烁灯

推荐阅读最新更新时间:2024-11-16 20:54

ARM学习《十一》—不用库函数自己动手配置STM32中的DMA
今天调试的STM32的DMA部分,第一次接触这部分,8位的单片机没有这部分的功能,一开始感觉这东西很神秘,所以怀着敬畏的心情来学习它。慢慢的发现这确实是个好东西,功能强大,可以分担CPU的任务。但它没有想象中那么棘手。 DMA英文全称是Direct Memory Access,意思是直接存储器访问。他的作用就是不需要经过CUP进行数据传输,也就是替CPU分担点事情做,什么事情?数据传输方面的事情。也就是说,你只要使能并配置好了DMA,DMA就可以将一批数据从源地址搬运到目的地址去而不经过CPU的干预,这样可以为CPU节省好多精力去干更重要的事情很人性化。就像我们人一样,我们平常习惯性的动作是不用经过大脑思考的,比如说眨眼睛,
[单片机]
STM32微控制器中采用DMA实现方波的产生和捕获
   1 STM32微控制器介绍   STM32系列微控制器是ST公司基于Cortex-M3内核的高集成度的微控制器。它在性能、价格、功耗和实时性方面树立了一个新的标杆,集成了Cortex-M3内核,以及双ADC、多用途的通用时钟TIMx、RTC、I2C、SPI、UART、CAN、DMA、USB等丰富的外设。其功耗在全速72MHz所有模块都打开时也仅仅为36 mA,在低功耗模式下其功耗仅为2 A。   2 DMA和TIMx简介   STM32系列微控制器均含有DMA和通用时钟TIMx模块。其低端型号中仅包含DMA1,支持7个通道;高端型号还包括DMA2,支持5个通道。它的每个通道可任意指定工作模式,如内存到内存、内存到外设或外
[单片机]
STM32微控制器中采用<font color='red'>DMA</font>实现方波的产生和捕获
【ARM裸板】内存控制器、SDRAM基础与代码重定位
1.CPU如何控制外设? CPU控制相应外设的寄存器,有外设控制器发出特定的波形 2.CPU如何选择寄存器? CPU通过内存控制器选择 发出地址addr 根据地址选择不同的模块 CPU 内存控制器 读写数据 3.外设共用地址、数据总线,如何互不干扰? 通过片选CS引脚,选择不同的外设 4.谁控制片选引脚 发出地址addr 根据地址发出片选信号 CPU 内存控制器 使能相应的外设 由芯片手册得知:当CPU发出地址是0x00000000时 nGCS0为低电平选择(有效) 5.CPU如何读写数据的方向? 通过外设芯片的读写引脚控制 6.CPU不同位宽设备如何连接并读取数据【内存控制器】 6.1 连接方式 8bit ROM
[单片机]
【ARM裸板】<font color='red'>内存</font>控制器、SDRAM基础与代码重定位
内存涨价不停,国家发改委将会继续约谈三星
凭借内存疯狂涨价之势,三星去年是大赚特赚,旗下利润营收一度创了新纪录,不过他们烦心事的也随之而来。 据证券时报报道称,目前,全球内存市场被国际巨头三星、海力士以及美光垄断,三家公司的内存市场占有率合计超过90%,而今年上半年内存价格丝毫没有下降的趋势。 由于汇率持续升值、原物料及人工成本的持续上涨,最近全球电阻第一大厂国巨上调电阻价格,而这也被看作是内存继续上涨的信号,而内存价格的持续上涨,国内终端厂商的成本压力陡然增加。 报道中提到,国家发改委将会继续约谈三星,因为现在的内存市场寡头垄断格局已经形成,下游厂商话语权并不大,所以这就形成了一定意义上的垄断,所以不断去约谈就很有必要。 此外,有消息人士还向证卷时报透露
[嵌入式]
全球DRAM产能吃紧,Q3移动内存合约价止跌走稳
   全球市场研究机构 TrendForce 旗下内存储存事业处 DRAMeXchange 调查显示,第三季行动式内存价格与前季相较相对持稳,所有产品线的跌幅皆落在5%以内,其中大部分的智能型手机厂甚至在第三季的采购价格与前季完全相同,在行动式内存连续跌价超过两年的前例看来,今年受旺季需求支撑所呈现的价格持平走势相当难得,DRAM厂在该领域的获利持续向上攀升。 DRAMeXChange研究协理吴雅婷表示,智能型手机仍是第二季最大的需求来源,其中由于正值中国地区3G转4G TD-LTE系统,以及高通最新4G主流芯片MSM8916的平台开发时期,带动行动式内存的需求大增。由于苹果新款iPhone即将在第三季发表,屏幕尺寸的扩大使消费者
[手机便携]
三星已成功研发8nm LPDDR5内存,提速至7.3Gbps
去年7月, 三星 就宣布成功开发出业内首款 LPDDR5 -6400内存芯片,基于10nm级工艺,单颗容量8Gb(1GB),去年10月的在港举办的高通4G/5G峰会上,三星人士透露,LPDDR5内存计划2020年商用。今年2月底,JEDEC(固态存储协会)正式发布了JESD209-5,即Low Power Double Data Rate 5 (LPDDR5)全新低功耗内存标准。 相较于2014年发布的第一代LPDDR4标准,LPDDR5的I/O速度从3200 MT/s 提升到6400 MT/s(DRAM速度6400Mbps),直接翻番。 如果匹配高端智能机常见的64bit bus,每秒可以传送51.2GB数据;要是PC的
[嵌入式]
浅谈C51内存优化(data idata xdata)
对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 ① 超过变量128后必须使用compact模式编译 实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 ② 128以上的某些地址为特殊寄存器使用,不能给程序用 与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。 由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。 以 Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为我们的程序所用,
[单片机]
OK6410A 开发板 (八) 81 linux-5.11 OK6410A 内存管理存在的问题及解决方案(补丁)总览
内存管理存在的问题及解决方案 内核物理内存管理方式 有4种 根据配置选一种 内核虚拟内存管理方式 有5种 4种用于异常/内核线程/用户进程内核态,1种用于进程用户态内存 以上的管理方式,不是完美的,会造成很多问题: 问题 : 内存碎片/内存不足/无法申请到连续的物理页/4KB页表导致的内存开销增加与tlb的命中率的降低 方案 : 内存规整/内存释放/CMA/大内存页(hugepages) 注意 : 大内存页 和 传统的 4KB 内存页 是 并存的 。 一部分内存用大内存页管理,另一部分内存还是用4KB内存页管理 内存碎片 内部碎片化和外部碎片化 三种方式可以碎片化整理 1.内存分配时(slowpat
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved