0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

牵手一起梦 来源:ST MCU 信息交流 作者:ST MCU 信息交流 2020-06-04 14:59 次阅读

STM32家族中的有些系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等系列都内置了DMAMUX模块,它是干什么用的?跟DMA有什么关联?

简单点说,它是DMA请求中转调度器,或说DMA请求路由器。基本功能就是将各路DMA请求经过它的再分配调度后连接到相应的DMA控制器传输通道以实现DMA传输。

用过不带DMAMUX的STM32芯片的DMA模块的人可能会问,之前没这个模块,不是照样用吗?外设申请DMA请求,DMA控制器做出应答响应后即可实现DMA传输。为什么后面推出的STM32系列往往要增加这个DMA请求复用路由器呢?

我们不妨先看看那些片内不带DMAMUX的DMA外设请求与DMA传输通道的关系。

下图是STM32F3系列的DMA1的DMA请求与传输通道的映射关系图[STM32F1系列的DMA架构跟F3系列类似]:

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

拿上图中的DMA传输通道Channel2为例,DMA请求可以来自多个外设,不过每路传输通道每次只能配置1个外设请求。从上图可以看出,各个外设请求所对应的DMA传输通道是唯一且固定的。比方说,若TIM1_CH1和TIM2_UP两个外设事件都想申请DMA传输,这时就有点麻烦,因为二者都只能申请DMA传输通道Channel2。那能不能有稍微灵活点的DMA请求与传输方案呢?像遇到多个DMA请求只能申请同一DMA传输通道时就麻烦了。ST后面推出的STM32F4/STM32F7等系列,在这个地方就做了调整。

下面是STM32F4系列的DMA2的DMA请求与传输通道的映射关系图:

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

不难看出,STM32F4系列的DMA架构跟STM32F1/F3有所不同,在DMA请求与DMA传输通道的映射安排方面有明显改良和优化,相比之下,DMA请求与DMA传输通道间的安排更为灵活了。

比如ADC2、SPI1_RX、USART1_RX原则上都可以申请Stream2的传输,由于每条传输通道每次只接受1个外设请求,根据上表,我们还可以将SPI1_RX请求安排在Stream0,将ADC2的请求安排在Stream3。显然,各个外设请求所对应的DMA传输通道的安排不像上面F3/F1系列那样固定僵化了。

不过,尽管说STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,更为灵活了,但各个外设请求与能申请到DMA传输通道的映射关系还是固定的。比方ADC2的请求只可能申请到Stream2或Strem3,而SPI_RX的请求就只能申请到Stream0或Stream2,别的DMA传输通道就别想了。这样的话,还是有可能遇到某些情况下安排不过来的局面,最糟糕的情形就是尽管DMA请求安排不过来,个别DMA传输通道可能又还闲着。那有没有可能DMA请求跟DMA传输通道的映射关系不事先固定下来,而在具体使用时通过一个中间机构来调度协调呢?这样既保证DMA请求安排的灵活性,又可提升DMA控制器的使用效率。另外,这里还有个问题,目前能申请到DMA传输的仅限于外设事件,能不能将DMA请求范围拓展下呢,让更多的其它非外设事件也可以产生DMA请求呢?

这时,应该说DMAMUX就基于这些需求应运而生了!【注:这是我理解加想象的推论,毕竟芯片不是我设计的。】

说到这里,打个生活中发快递的比方。早期发快递,我们往往是靠几张有限的快递小哥的名片或电话来找相应的小哥收发快递,如果他的名片你一下找不到或者说你联系他时,他正忙别的事情一会不会根本照顾不到你这里,别的小哥你又联系不上,这时你就只能干着急了。后来,快递公司搞了个客服部门,只需知道客户电话,随时申请快递,客服帮你搞定。客服帮你搞定不是亲自来给你收发快递,而是帮你灵活调度快递小哥来完成。小哥张不行,小哥李来。此处的客服部门就像这里描述的DMAMUX。当然,有了客服还可以拓展出其它跟快递有关的便利事务。

回到DMAMUX,它除了实现对DMA请求与DMA传输通道的灵活配置外,还可以基于某些本不能产生DMA请求的事件而生成DMA请求,该请求具有跟其它外设事件所产生DMA请求的同等效果,比方基于GPIO的外部中断事件产生DMA请求。

对于那些具有DMAMUX模块的STM32芯片,所有的DMA请求不再直接与DMA控制器相关联,而只是先与DMAMUX相连,DMAMUX的DMA请求路由通道再与DMA控制器相连。至于某个DMA请求到底跟DMA控制器的哪条传输通道相关联,通过软件配置,并不事先固定下来。对于那些用过不带DMAMUX的STM32用户来说,当它切换到带DMAMUX的STM32芯片,使用DMA时会发现之前的那张基于DMA请求与DMA传输通道映射表不复存在了,而换之以基于DMAMUX的各类输入、输出信号或事件的映射表。【注:DMA请求或称DMA请求线】

下面以STM32G4系列内置的DMAMUX为例,对其概念架构及工作原理再做些具体的介绍。下图是STM32G4系列内部的DMAMUX的功能框图。

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

从功能框架上看,它由两大块组成。

第一块,DMA请求路由器【Request Multiplexer】, 上面框图右上方的红色方框。

它的核心功能就是实现DMA请求的路由转发。其组成单元是DMA请求路由通道,请求路由器由多个请求路由通道组成。

每个路由通道可转发1路DMA请求【dmamux_req_outx】到DMA控制器并与相应的DMA传输通道相关联。

每个路由通道都与所有DMA输入请求线【dmamux_reqx】并行相连,并且都有同步单元【Sync】和DMA请求计数器。多个同步输入信号与各同步单元并行相连,可用来控制DMA请求的转发输出。

各同步单元还可以生成DMA路由事件【dmamux_evtx】,该事件既可以作为DMAMUX其它路由通道的同步输入信号,以实现不同路由通道之间的级联【不同路由通道最终对应到不同的DMA传输通道】,又可以作为DMA请求生成器的触发输入信号,可以实现基于不同DMA请求之间的级联关系。

第二块,DMA请求生成器【RequestGenerator】,上面框图中左下方的红色方框。

它的核心功能,就是生成DMA请求。其组成单元是请求生成通道,由多个请求生成通道构成请求生成器。每个生成通道与所有的触发输入信号并行相连,每个通道也具有DMA请求计数器。当生成器收到触发输入信号【dmamux_trgx】时,相应的请求生成通道则产生DMA请求信号【dmamux_req_genx】,并输出到DMA请求路由器。

通过DMA请求生成器基于触发信号生成DMA请求,一方面可以弥补只是部分外设事件【dmamux_req_inx】才可以申请DMA传输的局限,另一方面可以将不同DMA请求借助路由器模块输出的路由事件【dmamux_evtx】关联起来,让DMA应用更为灵活并富有创意

下面继续以STM32G4系列的DMAMUX为例,将上面的功能框图具体化看看。

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

根据上图,STM32G4芯片因不同子序列,DMAMUX的路由输出通道数可能是12或16。

DMAMUX的请求生成器通道数为4,请求生成器可接受的触发输入信号有21个,路由通道的同步输入信号可达21个,可接受的外设请求输入信号或事件可达115个。

DMAMUX路由输出通道数最终与片内DMA控制器所拥有的传输通道相对应匹配。

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

这里DMAMUX的请求生成器通道数为4,即有4个通道可以基于触发输入信号产生DMA请求:

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

用来可以生成DMA请求的触发输入信号可以有21个:

STM32F4系列的DMA请求与DMA传输通道的映射关系多了些选择性,灵活性

从上图可以看出,绝大部分触发信号都源于外部中断事件,还有几个来自DMAMUX路由通道产生的DMA路由事件【红色方框内所示】。这么多触发输入信号,而可以产生DMA请求的生成通道才4个,每个通道根据什么来选择所需要的触发信号呢,当然是通过各个生成通道的配置寄存器DMAMUX_RGCnCR进行选择配置【n对应生成器通道号】。

可以用来作为DMAMUX路由通道的同步输入信号也可以有21个,具体内容跟上面的触发输入信号一样。同样,具体到各个路由通道选择哪路信号作为同步信号,通过路由通道配置寄存器MAMUX_CmCR进行配置即可【m对应路由通道号】。

可接受的外设请求输入信号或事件可达115个,这个数据应该包括了DMAMUX生成器的4个通道生成的DMA请求。手册一直将来自外设的DMA请求和基于生成器产生的DMA请求分开表述的,这里突然笼统地将二者称之为外设请求感觉有点突兀。

关于DMAMUX模块的大致原理及基本框架就介绍到这里,更多细节还得阅读STM32芯片相应的参考手册。当对它有了一个相对清晰的框架性了解后,再结合应用实例和手册就更容易理解和把握更深入的细节。
责任编辑:dhj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2654

    浏览量

    47278
  • 控制器
    +关注

    关注

    112

    文章

    16073

    浏览量

    176959
  • STM32F4
    +关注

    关注

    3

    文章

    194

    浏览量

    27968
收藏 人收藏

    评论

    相关推荐

    揭秘车载VCU项目之外挂界的“大哥”DMA

    引脚配置此实例选择CAN0进行配置。三、外设配置对于DMA,其采用的固定映射,对于通道0至通道15,其
    的头像 发表于 07-30 08:11 440次阅读
    揭秘车载VCU项目之外挂界的“大哥”<b class='flag-5'>DMA</b>

    如何在STM32F439 DMA流中断中区分是哪个通道产生的中断?

    STM32F439有两个DMA控制器DMA1和DMA2,每个控制器有8个流,每个流有8个通道,我做的是采用串口1
    发表于 05-17 08:20

    stm32f303采用LL库,4个ADC连续多通道扫描,应该如何设置DMA

    stm32f303,采用LL库,4个ADC连续多通道扫描,应该如何设置DMA?ADC转换完DMA传输
    发表于 04-30 07:06

    请问STM32L4R5ZI的DMA/DMAMUX是怎么管理请求

    原来的STM32系列,比如F1,是没有DMAMUX这个东西的,DMA1的1通道2通道具体对应什么
    发表于 04-28 06:19

    使用STM32F3系列芯片用AD的DMA通道采集时是如何处理采集数据的?

    请问,各位在使用STM32F3系列芯片用AD的DMA通道采集时是如何处理采集数据的,。。,我再每次DMA采集完毕的中断函数中关中断,处理完
    发表于 04-26 06:59

    调试STM32的adc单通道DMA传输时,DMA传输后就出现值变了的原因?

    这次在调试STM32的adc单通道DMA传输时出现了一个很大的问题。 直接去读取ADC的DR是没问题的,但是过来DMA
    发表于 04-22 06:03

    请问STM32H750VB的DMA通道映射在哪里查看?

    准备用STM32H750VB这款芯片,在参考手册中发现找不到DMA通道映射表,想问一下这个去哪里查看?
    发表于 04-11 07:15

    请问STM32F030K6T6使用DMA的one shot模式采样AD如何再次启动?

    32-bit MCUs(version 4)》的ADC部分,发现,对于one shot mode,一旦传输完成即使重启AD也不会再次发送DMA请求
    发表于 04-10 06:54

    Xilinx高性能PCIe DMA控制器IP,8个DMA通道

    Subsystem实现了使用DMA Ring缓冲的独立多通道、高性能/超低延时/超低抖动Continous Ring DMA,提供FIFO/AXI4-Stream用户接口。
    的头像 发表于 02-22 11:11 1294次阅读
    Xilinx高性能PCIe <b class='flag-5'>DMA</b>控制器IP,8个<b class='flag-5'>DMA</b><b class='flag-5'>通道</b>

    雅特力AT32F423 DMA使用指南

    通道都支持外设的DMA请求映射到任意通道上。图1.DMA控制器架构DMAMUX简介对于如何将外设
    的头像 发表于 02-22 08:13 587次阅读
    雅特力AT32<b class='flag-5'>F</b>423 <b class='flag-5'>DMA</b>使用指南

    STM32U5系列TIMER+DMA+DAC应用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出波形。可他不知如何配置
    的头像 发表于 01-24 09:10 1551次阅读
    <b class='flag-5'>STM32</b>U5<b class='flag-5'>系列</b>TIMER+<b class='flag-5'>DMA</b>+DAC应用演示

    dma通道技术的区别

    DMA(Direct Memory Access)和通道技术是计算机系统中用来优化数据传输和处理的重要技术。尽管它们都与数据传输相关,但它们在实现方法、特点和应用场景等方面存在一
    的头像 发表于 01-04 14:31 2074次阅读

    STM32DMA的五大问题

    1,DMA控制器的内部结构STM32中的DMA控制器是一种用于在外设和存储器之间传输数据的专用硬件。DMA控制器的内部结构主要包括以下几个关
    的头像 发表于 12-10 08:00 1736次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>DMA</b>的五大问题

    STM32 DMA传输的问题分析

    用户使用STM32G473RET6芯片,开发环境STM32CubeMX+Keil(LL库)。使用DMA1通道1,在半传输中断和完全
    的头像 发表于 12-01 09:19 2577次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b><b class='flag-5'>传输</b>的问题分析

    CKS32F4xx系列ADC多通道DMA电压采集

    CKS32F4xx系列ADC多通道DMA电压采集
    的头像 发表于 11-06 16:53 1050次阅读