STM32H7系列DMAMUX及DMA介绍

  一、H7系列MCU的DMA的介绍

   首先根据以下框图,我们可以看到D1域的 MDMA、DMA2D,D2域的两个通用DMA,即DMA1、DMA2,还有D3域的BDMA。

    这么多的DMA都是干什么用的呢?我们做个简单介绍。

1.    MDMA

           MDMA位于D1域,使用的是64bit的AXI总线,可以访问TCM空间,例如如下位置空闲,而其他的DMA是不能访问此空间的。

    DTCMRAM (xrw)   : ORIGIN = 0x20000000,   LENGTH = 128K

 2.  DMA2D

       DMA2D是处理GUI专用得图形加速器,也叫chrome-ART,在处理基本的数据搬移(部分或全部)的同时,还具有颜色格式转换,像素不同的图源混合等功能,此处不多做介绍。

3.  DMA1、DMA2

       DMA1和DMA2属于两个通用DMA,通过双AHB总线连接到四通八达的总线矩阵,除TCM空间外,能访问其他所有的内存及外设。两个控制器共有16个数据控制流(每个DMA控制器8个)且每个流都有独立的FIFO,在F4里被称为通道。

       每个DMA流由独立的DMAMUX(DMA多路选择器)通道驱动,通过对DMAMUX选择DMA的请求信号,可以从115个请求源里任意配置,不再像F4里,DMA通道对应固定的DMA请求源,下边会详细介绍.

4.  BDMA

       BDMA是位于D3域的DMA控制器,具有8个通道,因为属于D3域,所以可以在进入低功耗状态下依然处于工作状态。

5.  专用DMA

       其实在其他Host器件中,如SDMMC、以太网控制器、USB控制器中都有其专用得DMA,以增强MCU的整体性能。

二、DMAMUX多路选择器介绍

    DMAMUX是位于通用DMA(DMA1、DMA2)控制器前一级的一个多路选择器,通过此选择器,DMA每个流(通道)的输入就不需要被绑定到固定的外设请求源上,而是通过多路选择器任意选择请求源。

   

       

    上图即为DMAMUX的结构框图

1.    左侧DMA requests form peripherals作为DMA 请求的输入。

   DMA requests form peripherals:

   其中DMAMUX1共有115个请求源(8个dmamux_evtx + 107个外设请求源),在RM手册中 Table 121. DMAMUX1: assignment of multiplexer inputs to resources 。

   DMAMUX2共有17个触发源(6个dmamux_evtx + 9个外设请求源),在RM手册中 Table 126. DMAMUX2: assignment of synchronization inputs to resources

    这里提到的dmamux_evtx是指DMA传输完成后产生的一次事件,这个事件同时又可以作为一次新的DMA的请求源,这样就可以在输出和输入上形成一个环形或链行的DMA事件。

2.    在没有外设DMA请求的情况下,但又想使用DMA进行传输,如何操作呢?通过DMAMUX模块中的Request genertor来产生一个请求源,同样也能像外设请求一样来触发一次( 也可以是多次,由Request generator counter配置决定 )DMA传输。而genertor是通过trigger输入触发的,不同的genertor通道可以配置成相同的trigger源,当然也可以配置成不同的trigger源。

    Trigger inputs:

    DMAMUX1共有8个trigger源(3个dmamux1_evtx + 5个外设trigger源),详见RM Table 112。

    DMAMUX2共有30个trigger源(7个dmamux1_evtx + 23个外设trigger源),详见RM Table 125.

    增加了Trigger inputs之后,就可以变换出非常灵活的多种多样的DMA用途,比如,定时器作为trigger,可以通过DMA在任意IO口产生PWM波、定时trigger触发DMA去采集ADC、EXTI0触发一次DMA的采集传输等,各位工程师可以在应用时,根据项目需求自由发挥。

   上面我们提到了Request generator counter,我们顺便说一下,这个数可以配置一次trigger产生几次DMA传输(最大的32),如果在传输还未完成之前又来了trigger,就会产生一个相应的中断(当然前提是中断已开启的话)

   3.    中断接口用于DMAMUX产生中断信号

    Interrupt interface

  4 .    同步输入,同步输入的位置位于DMAMUX多路选择器输出到DMA控制器之前,用于控制来了触发源(n+p+2)后不立即给DMA控制器进行传输,需等待同步信号来临后再发送给DMA控制器,使其进行传输。当然也可以不使用同步输入功能,完全由请求源或请求发生器的信号决定输出时机。

       用途:比如可以传输完成一次后产生一个事件信号输出,决定下次某个传输的同步信号输入,效果就是两个序列的传输,即使后边的请求源提前来了也会等到前一个的事件完成。

   synchronization inputs

       同步信号的信号源见:Table 123. DMAMUX1: assignment of synchronization inputs to resources和Table 126. DMAMUX2: assignment of synchronization inputs to resources

                   

三、DMA控制器

     

       

    从DMAMUX出来的信号进入DMA控制器的Arbitrer仲裁器,根据配置的不同优先级处理同时来的DMA请求。在DMA1和DMA2及BDMA中,在D3域的BDMA中是没有FIFO的,但是BDMA是支持从外设到外设的传输,而其他DMA不支持。

    FIFO可以降低对总线带宽的要求,同时在传输过程中可以实现源数据和目标数据宽度不相等时的传输,传输的具体步骤可通过RM中 Table 109. Packing/unpacking and endian behavior (bit PINC = MINC = 1)了解。

  1.     FIFO和突发

            一次突发可以理解为一次DMA请求后可以连续传输几次数据项,支持4、8、16次。

            使用或不使用FIFO有一些规则:

                例如:禁用FIFO后,要保证外设和内存位宽相同;使用内存到内存传输时必须开启FIFO;使用cubeMX图形化配置时,选项会遵守这些规则被展示。

    下表为FIFO阈值配置对应的突发传输次数

用途:例如在配电终端FTU DTU上经常使用到的16位ADC:AD7606,具有8通道同步采样功能,使用突发模式时,可以通过定时器最为trigger源,产生一次DMA请求,通过突发模式就可以触发8次传输,使用一次DMA读到8个通道的数据。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值