0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

牽手一起夢 ? 來源:ST MCU 信息交流 ? 作者:ST MCU 信息交流 ? 2020-06-04 14:59 ? 次閱讀

STM32家族中的有些系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等系列都內(nèi)置了DMAMUX模塊,它是干什么用的?跟DMA有什么關(guān)聯(lián)?

簡單點說,它是DMA請求中轉(zhuǎn)調(diào)度器,或說DMA請求路由器?;竟δ芫褪菍⒏髀稤MA請求經(jīng)過它的再分配調(diào)度后連接到相應(yīng)的DMA控制器傳輸通道以實現(xiàn)DMA傳輸。

用過不帶DMAMUX的STM32芯片的DMA模塊的人可能會問,之前沒這個模塊,不是照樣用嗎?外設(shè)申請DMA請求,DMA控制器做出應(yīng)答響應(yīng)后即可實現(xiàn)DMA傳輸。為什么后面推出的STM32系列往往要增加這個DMA請求復用路由器呢?

我們不妨先看看那些片內(nèi)不帶DMAMUX的DMA外設(shè)請求與DMA傳輸通道的關(guān)系。

下圖是STM32F3系列的DMA1的DMA請求與傳輸通道的映射關(guān)系圖[STM32F1系列的DMA架構(gòu)跟F3系列類似]:

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

拿上圖中的DMA傳輸通道Channel2為例,DMA請求可以來自多個外設(shè),不過每路傳輸通道每次只能配置1個外設(shè)請求。從上圖可以看出,各個外設(shè)請求所對應(yīng)的DMA傳輸通道是唯一且固定的。比方說,若TIM1_CH1和TIM2_UP兩個外設(shè)事件都想申請DMA傳輸,這時就有點麻煩,因為二者都只能申請DMA傳輸通道Channel2。那能不能有稍微靈活點的DMA請求與傳輸方案呢?像遇到多個DMA請求只能申請同一DMA傳輸通道時就麻煩了。ST后面推出的STM32F4/STM32F7等系列,在這個地方就做了調(diào)整。

下面是STM32F4系列的DMA2的DMA請求與傳輸通道的映射關(guān)系圖:

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

不難看出,STM32F4系列的DMA架構(gòu)跟STM32F1/F3有所不同,在DMA請求與DMA傳輸通道的映射安排方面有明顯改良和優(yōu)化,相比之下,DMA請求與DMA傳輸通道間的安排更為靈活了。

比如ADC2、SPI1_RX、USART1_RX原則上都可以申請Stream2的傳輸,由于每條傳輸通道每次只接受1個外設(shè)請求,根據(jù)上表,我們還可以將SPI1_RX請求安排在Stream0,將ADC2的請求安排在Stream3。顯然,各個外設(shè)請求所對應(yīng)的DMA傳輸通道的安排不像上面F3/F1系列那樣固定僵化了。

不過,盡管說STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,更為靈活了,但各個外設(shè)請求與能申請到DMA傳輸通道的映射關(guān)系還是固定的。比方ADC2的請求只可能申請到Stream2或Strem3,而SPI_RX的請求就只能申請到Stream0或Stream2,別的DMA傳輸通道就別想了。這樣的話,還是有可能遇到某些情況下安排不過來的局面,最糟糕的情形就是盡管DMA請求安排不過來,個別DMA傳輸通道可能又還閑著。那有沒有可能DMA請求跟DMA傳輸通道的映射關(guān)系不事先固定下來,而在具體使用時通過一個中間機構(gòu)來調(diào)度協(xié)調(diào)呢?這樣既保證DMA請求安排的靈活性,又可提升DMA控制器的使用效率。另外,這里還有個問題,目前能申請到DMA傳輸?shù)膬H限于外設(shè)事件,能不能將DMA請求范圍拓展下呢,讓更多的其它非外設(shè)事件也可以產(chǎn)生DMA請求呢?

這時,應(yīng)該說DMAMUX就基于這些需求應(yīng)運而生了!【注:這是我理解加想象的推論,畢竟芯片不是我設(shè)計的?!?/p>

說到這里,打個生活中發(fā)快遞的比方。早期發(fā)快遞,我們往往是靠幾張有限的快遞小哥的名片或電話來找相應(yīng)的小哥收發(fā)快遞,如果他的名片你一下找不到或者說你聯(lián)系他時,他正忙別的事情一會不會根本照顧不到你這里,別的小哥你又聯(lián)系不上,這時你就只能干著急了。后來,快遞公司搞了個客服部門,只需知道客戶電話,隨時申請快遞,客服幫你搞定??头湍愀愣ú皇怯H自來給你收發(fā)快遞,而是幫你靈活調(diào)度快遞小哥來完成。小哥張不行,小哥李來。此處的客服部門就像這里描述的DMAMUX。當然,有了客服還可以拓展出其它跟快遞有關(guān)的便利事務(wù)。

回到DMAMUX,它除了實現(xiàn)對DMA請求與DMA傳輸通道的靈活配置外,還可以基于某些本不能產(chǎn)生DMA請求的事件而生成DMA請求,該請求具有跟其它外設(shè)事件所產(chǎn)生DMA請求的同等效果,比方基于GPIO的外部中斷事件產(chǎn)生DMA請求。

對于那些具有DMAMUX模塊的STM32芯片,所有的DMA請求不再直接與DMA控制器相關(guān)聯(lián),而只是先與DMAMUX相連,DMAMUX的DMA請求路由通道再與DMA控制器相連。至于某個DMA請求到底跟DMA控制器的哪條傳輸通道相關(guān)聯(lián),通過軟件配置,并不事先固定下來。對于那些用過不帶DMAMUX的STM32用戶來說,當它切換到帶DMAMUX的STM32芯片,使用DMA時會發(fā)現(xiàn)之前的那張基于DMA請求與DMA傳輸通道映射表不復存在了,而換之以基于DMAMUX的各類輸入、輸出信號或事件的映射表?!咀ⅲ篋MA請求或稱DMA請求線】

下面以STM32G4系列內(nèi)置的DMAMUX為例,對其概念架構(gòu)及工作原理再做些具體的介紹。下圖是STM32G4系列內(nèi)部的DMAMUX的功能框圖。

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

從功能框架上看,它由兩大塊組成。

第一塊,DMA請求路由器【Request Multiplexer】, 上面框圖右上方的紅色方框。

它的核心功能就是實現(xiàn)DMA請求的路由轉(zhuǎn)發(fā)。其組成單元是DMA請求路由通道,請求路由器由多個請求路由通道組成。

每個路由通道可轉(zhuǎn)發(fā)1路DMA請求【dmamux_req_outx】到DMA控制器并與相應(yīng)的DMA傳輸通道相關(guān)聯(lián)。

每個路由通道都與所有DMA輸入請求線【dmamux_reqx】并行相連,并且都有同步單元【Sync】和DMA請求計數(shù)器。多個同步輸入信號與各同步單元并行相連,可用來控制DMA請求的轉(zhuǎn)發(fā)輸出。

各同步單元還可以生成DMA路由事件【dmamux_evtx】,該事件既可以作為DMAMUX其它路由通道的同步輸入信號,以實現(xiàn)不同路由通道之間的級聯(lián)【不同路由通道最終對應(yīng)到不同的DMA傳輸通道】,又可以作為DMA請求生成器的觸發(fā)輸入信號,可以實現(xiàn)基于不同DMA請求之間的級聯(lián)關(guān)系。

第二塊,DMA請求生成器【RequestGenerator】,上面框圖中左下方的紅色方框。

它的核心功能,就是生成DMA請求。其組成單元是請求生成通道,由多個請求生成通道構(gòu)成請求生成器。每個生成通道與所有的觸發(fā)輸入信號并行相連,每個通道也具有DMA請求計數(shù)器。當生成器收到觸發(fā)輸入信號【dmamux_trgx】時,相應(yīng)的請求生成通道則產(chǎn)生DMA請求信號【dmamux_req_genx】,并輸出到DMA請求路由器。

通過DMA請求生成器基于觸發(fā)信號生成DMA請求,一方面可以彌補只是部分外設(shè)事件【dmamux_req_inx】才可以申請DMA傳輸?shù)木窒?,另一方面可以將不同DMA請求借助路由器模塊輸出的路由事件【dmamux_evtx】關(guān)聯(lián)起來,讓DMA應(yīng)用更為靈活并富有創(chuàng)意。

下面繼續(xù)以STM32G4系列的DMAMUX為例,將上面的功能框圖具體化看看。

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

根據(jù)上圖,STM32G4芯片因不同子序列,DMAMUX的路由輸出通道數(shù)可能是12或16。

DMAMUX的請求生成器通道數(shù)為4,請求生成器可接受的觸發(fā)輸入信號有21個,路由通道的同步輸入信號可達21個,可接受的外設(shè)請求輸入信號或事件可達115個。

DMAMUX路由輸出通道數(shù)最終與片內(nèi)DMA控制器所擁有的傳輸通道相對應(yīng)匹配。

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

這里DMAMUX的請求生成器通道數(shù)為4,即有4個通道可以基于觸發(fā)輸入信號產(chǎn)生DMA請求:

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

用來可以生成DMA請求的觸發(fā)輸入信號可以有21個:

STM32F4系列的DMA請求與DMA傳輸通道的映射關(guān)系多了些選擇性,靈活性

從上圖可以看出,絕大部分觸發(fā)信號都源于外部中斷事件,還有幾個來自DMAMUX路由通道產(chǎn)生的DMA路由事件【紅色方框內(nèi)所示】。這么多觸發(fā)輸入信號,而可以產(chǎn)生DMA請求的生成通道才4個,每個通道根據(jù)什么來選擇所需要的觸發(fā)信號呢,當然是通過各個生成通道的配置寄存器DMAMUX_RGCnCR進行選擇配置【n對應(yīng)生成器通道號】。

可以用來作為DMAMUX路由通道的同步輸入信號也可以有21個,具體內(nèi)容跟上面的觸發(fā)輸入信號一樣。同樣,具體到各個路由通道選擇哪路信號作為同步信號,通過路由通道配置寄存器MAMUX_CmCR進行配置即可【m對應(yīng)路由通道號】。

可接受的外設(shè)請求輸入信號或事件可達115個,這個數(shù)據(jù)應(yīng)該包括了DMAMUX生成器的4個通道生成的DMA請求。手冊一直將來自外設(shè)的DMA請求和基于生成器產(chǎn)生的DMA請求分開表述的,這里突然籠統(tǒng)地將二者稱之為外設(shè)請求感覺有點突兀。

關(guān)于DMAMUX模塊的大致原理及基本框架就介紹到這里,更多細節(jié)還得閱讀STM32芯片相應(yīng)的參考手冊。當對它有了一個相對清晰的框架性了解后,再結(jié)合應(yīng)用實例和手冊就更容易理解和把握更深入的細節(jié)。
責任編輯:dhj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2655

    瀏覽量

    47292
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16101

    瀏覽量

    177064
  • STM32F4
    +關(guān)注

    關(guān)注

    3

    文章

    194

    瀏覽量

    27974
收藏 人收藏

    評論

    相關(guān)推薦

    揭秘車載VCU項目之外掛界的“大哥”DMA

    引腳配置此實例選擇CAN0進行配置。三、外設(shè)配置對于DMA,其采用的固定映射,對于通道0至通道15,其
    的頭像 發(fā)表于 07-30 08:11 ?455次閱讀
    揭秘車載VCU項目之外掛界的“大哥”<b class='flag-5'>DMA</b>

    如何在STM32F439 DMA流中斷中區(qū)分是哪個通道產(chǎn)生的中斷?

    STM32F439有兩個DMA控制器DMA1和DMA2,每個控制器有8個流,每個流有8個通道,我做的是采用串口1
    發(fā)表于 05-17 08:20

    stm32f303采用LL庫,4個ADC連續(xù)多通道掃描,應(yīng)該如何設(shè)置DMA?

    stm32f303,采用LL庫,4個ADC連續(xù)多通道掃描,應(yīng)該如何設(shè)置DMA?ADC轉(zhuǎn)換完DMA傳輸
    發(fā)表于 04-30 07:06

    請問STM32L4R5ZI的DMA/DMAMUX是怎么管理請求?

    原來的STM32系列,比如F1,是沒有DMAMUX這個東西的,DMA1的1通道2通道具體對應(yīng)什么
    發(fā)表于 04-28 06:19

    使用STM32F3系列芯片用AD的DMA通道采集時是如何處理采集數(shù)據(jù)的?

    請問,各位在使用STM32F3系列芯片用AD的DMA通道采集時是如何處理采集數(shù)據(jù)的,。。,我再每次DMA采集完畢的中斷函數(shù)中關(guān)中斷,處理完
    發(fā)表于 04-26 06:59

    調(diào)試STM32的adc單通道DMA傳輸時,DMA傳輸后就出現(xiàn)值變了的原因?

    這次在調(diào)試STM32的adc單通道DMA傳輸時出現(xiàn)了一個很大的問題。 直接去讀取ADC的DR是沒問題的,但是過來DMA
    發(fā)表于 04-22 06:03

    請問STM32H750VB的DMA通道映射在哪里查看?

    準備用STM32H750VB這款芯片,在參考手冊中發(fā)現(xiàn)找不到DMA通道映射表,想問一下這個去哪里查看?
    發(fā)表于 04-11 07:15

    請問STM32F030K6T6使用DMA的one shot模式采樣AD如何再次啟動?

    32-bit MCUs(version 4)》的ADC部分,發(fā)現(xiàn),對于one shot mode,一旦傳輸完成即使重啟AD也不會再次發(fā)送DMA請求
    發(fā)表于 04-10 06:54

    stm32F103中ADC多通道轉(zhuǎn)換使用DMA,串口調(diào)試助手沒有數(shù)據(jù)傳輸的原因?

    stm32F103中ADC多通道轉(zhuǎn)換使用DMA,串口調(diào)試助手沒有數(shù)據(jù)傳輸,大佬可以幫我看看我的代碼有什么問題嗎? main.c #include \"sys.h\"
    發(fā)表于 04-08 07:17

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

    Subsystem實現(xiàn)了使用DMA Ring緩沖的獨立多通道、高性能/超低延時/超低抖動Continous Ring DMA,提供FIFO/AXI4-Stream用戶接口。
    的頭像 發(fā)表于 02-22 11:11 ?1310次閱讀
    Xilinx高性能PCIe <b class='flag-5'>DMA</b>控制器IP,8個<b class='flag-5'>DMA</b><b class='flag-5'>通道</b>

    雅特力AT32F423 DMA使用指南

    通道都支持外設(shè)的DMA請求映射到任意通道上。圖1.DMA控制器架構(gòu)DMAMUX簡介對于如何將外設(shè)
    的頭像 發(fā)表于 02-22 08:13 ?595次閱讀
    雅特力AT32<b class='flag-5'>F</b>423 <b class='flag-5'>DMA</b>使用指南

    STM32U5系列TIMER+DMA+DAC應(yīng)用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件觸發(fā)DMA,并通過DMA傳輸內(nèi)存數(shù)據(jù)到DAC輸出寄存器,進而產(chǎn)生相應(yīng)的DAC輸出波形??伤恢绾闻渲?/div>
    的頭像 發(fā)表于 01-24 09:10 ?1579次閱讀
    <b class='flag-5'>STM32</b>U5<b class='flag-5'>系列</b>TIMER+<b class='flag-5'>DMA</b>+DAC應(yīng)用演示

    dma通道技術(shù)的區(qū)別

    DMA(Direct Memory Access)和通道技術(shù)是計算機系統(tǒng)中用來優(yōu)化數(shù)據(jù)傳輸和處理的重要技術(shù)。盡管它們都與數(shù)據(jù)傳輸相關(guān),但它們在實現(xiàn)方法、特點和應(yīng)用場景等方面存在一
    的頭像 發(fā)表于 01-04 14:31 ?2132次閱讀

    STM32DMA的五大問題

    1,DMA控制器的內(nèi)部結(jié)構(gòu)STM32中的DMA控制器是一種用于在外設(shè)和存儲器之間傳輸數(shù)據(jù)的專用硬件。DMA控制器的內(nèi)部結(jié)構(gòu)主要包括以下幾個關(guān)
    的頭像 發(fā)表于 12-10 08:00 ?1760次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>DMA</b>的五大問題

    STM32 DMA傳輸的問題分析

    用戶使用STM32G473RET6芯片,開發(fā)環(huán)境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全
    的頭像 發(fā)表于 12-01 09:19 ?2627次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>的問題分析