您的位置 首页 主动

这些关于STM32 DMA的运用,你都知道吗?

1.使用范围:DMA(直接存储器存取)提供在外设与存储器之间或者存储器和存储器之间的高速数据传输使用。注意这里的外设指的是32的外设,比如spi、usart、iic、adc等基于APB1 、A

  1.运用范围:

  DMA(直接存储器存取)供给在外设与存储器之间或许存储器和存储器之间的高速数据传输运用。留意这儿的外设指的是32的外设,比方spi、usart、iic、adc等根据APB1 、APB2或AHB时钟的外设,而这儿的存储器包含32本身的闪存(flash)或许内存(SRAM)以及外设的存储设备都能够作为拜访的源或许意图。留意外部存储设备其本身在这便是外设了,装备时归于外设,不要与装备寄存器的存储设备混杂

  2.以现在嵌入式为例,DMA和CPU两者怎样完成分时运用内存:

  一般选用以下三种办法:

  (1)中止CPU访内存;

  (2)周期移用;

  (3)DMA与CPU替换拜访内存。

  中止CPU拜访内存

  当外围设备要求传送一批数据时,由DMA操控器发一个中止信号给CPU,要求CPU抛弃对地址总线、数据总线和有关操控总线的运用权.DMA操控器取得总线操控权今后,开端进行数据传送.在一批数据传送完毕后,DMA操控器告诉CPU能够运用内存,并把总线操控权交还给CPU.图(a)是这种传送办法的时刻图.很明显,在这种DMA传送进程中,CPU根本处于不作业状况或许说坚持状况。

  长处: 操控简略,它适用于数据传输率很高的设备进行成组传送。

  缺陷: 在DMA操控器访内阶段,内存的效能没有充分发挥,适当一部分内存作业周期是闲暇的。这是由于,外围设备传送两个数据之间的距离一般总是大于内存存储周期,即便高速I/O设备也是如此。例如,软盘读出一个8位二进制数大约需求32us,而半导体内存的存储周期小于0.5us,因而许多闲暇的存储周期不能被CPU运用。

  周期移用

  当I/O设备没有DMA恳求时,CPU按程序要求拜访内存;一旦I/O设备有DMA恳求,则由I/O设备移用一个或几个内存周期。

  这种传送办法的时刻图如下图(b):

  I/O设备要求DMA传送时或许遇到两种状况:

  (1)此刻CPU不需求访内,如CPU正在履行乘法指令。由于乘法指令履行时刻较长,此刻I/O访内与CPU访内没有抵触,即I/O设备移用一二个内存周期对CPU履行程序没有任何影响。

  (2)I/O设备要求访内时CPU也要求访内,这就发生了访内抵触,在这种状况下I/O设备访内优先,由于I/O访内有时刻要求,前一个I/O数据有必要鄙人一个拜访恳求到来之前存取完毕。明显,在这种状况下I/O 设备移用一二个内存周期,意味着CPU延缓了对指令的履行,或许更明确地说,在CPU履行访内指令的进程中刺进DMA恳求,移用了一二个内存周期。与中止CPU访内的DMA办法比较,周期移用的办法既完成了I/O传送,又较好地发挥了内存和CPU的功率,是一种广泛选用的办法。可是I/O设备每一次周期移用都有恳求总线操控权、树立线操控权和偿还总线操控权的进程,所以传送一个字对内存来说要占用一个周期,但对DMA操控器来说一般要2—5个内存周期(视逻辑线路的推迟而定)。因而,周期移用的办法适用于I/O设备读写周期大于内存存储周期的状况。

  DMA与CPU替换拜访内存

  假如CPU的作业周期比内存存取周期长许多,此刻选用替换访内的办法能够使DMA传送和CPU一起发挥最高的功率。

  这种传送办法的时刻图如下

  此图是DMA与CPU替换访内的具体时刻图.假定CPU作业周期为1.2us,内存存取周期小于0.6us,那么一个CPU周期可分为C1和C2两个分周期,其间C1专供DMA操控器访内,C2专供CPU访内。

  这种办法不需求总线运用权的恳求、树立和偿还进程,总线运用权是经过C1和C2分时制的。CPU和DMA操控器各自有自己的访内地址寄存器、数据寄存器和读/写信号等操控寄存器。在C1周期中,假如DMA操控器有访内恳求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内恳求,相同传送地址、数据等信号。事实上,关于总线,这是用C1,C2操控的一个多路转换器,这种总线操控权的搬运简直不需求什么时刻,所以对DMA传送来讲功率是很高的。这种传送办法又称为“通明的DMA”办法,其来由是这种DMA传送对CPU来说,好像通明的玻璃一般,没有任何感觉或影响。在通明的DMA办法下作业,CPU既不中止主程序的运转,也不进入等候状况,是一种高功率的作业办法。当然,相应的硬件逻辑也就愈加杂乱.

  的DMA操控器和Cortex?-M3中心同享体系数据总线,履行直接存储器数据传输。当CPU和DMA一起拜访相同的方针(RAM或外设)时, DMA恳求会暂停CPU拜访体系总线达若干个周期,总线裁定器履行循环调度,以确保CPU至少能够得到一半的体系总线(存储器或外设)带宽。

  也便是说对32而言,DMA即便和CPU运用相同的内存空间,32也会确保cpu至少会占用一半以上运转时刻。也便是微观上两者仍是同步的。而当DMA和CPU运用不同空间时,两者微观上也是同步的

  3.STM32运用DMA非循环办法传输完成后从头敞开传输:

  当通道装备为非循环形式时,传输完毕后(即传输计数变为0)将不再发生DMA操作。要开端新的DMA传输,需求在封闭DMA通道的状况下,在DMA_CNDTRx寄存器中从头写入传输数目。

  即关DMA->写传输数目->开DMA

  4.借用体系供给的库函数或许说DMA_CNDTRx寄存器能够查询咱们传输的剩下数据,可用在记载当时接纳数据百分比的显现。

  5.存储器到存储器形式

  DMA通道的操作能够在没有外设恳求的状况下进行,这种操作便是存储器到存储器形式。(咱们以串口为例,这种外设检查串口使能DMA时序可知其会自意向CPU提DMA恳求,而关于比方外设也是存储设备那么他本身不具有主动提DMA恳求功用,这种就归于存储器到存储器形式,这是m2m位需置1)

  以上图DMA1恳求映像为例,可知外设(这儿指的是比方串口 spi TIM等32自带的外设)都是以硬件主动触发的DMA恳求,而非本身外设比方加的外部存储设备无硬件主动触发机制就需求经过设置M2M位完成软件触发DMA恳求给CPU了当设置了DMA_CCRx寄存器中的MEM2MEM位之后,在软件设置了DMA_CCRx寄存器中的EN位发动DMA通道时, DMA传输将立刻开端。当DMA_CNDTRx寄存器变为0时, DMA传输完毕。存储器到存储器形式不能与循环形式一起运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/159146.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部