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

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

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

玩轉(zhuǎn)單片機(jī)的重要功能-DMA,你的MCU編程設(shè)計(jì)有可能成為卷王!

jf_pJlTbmA9 ? 來源:得捷電子DigiKey ? 作者:得捷電子DigiKey ? 2023-09-18 10:56 ? 次閱讀

直接存儲(chǔ)器訪問(DMA)控制器,可以在內(nèi)存和/或外設(shè)之間傳輸數(shù)據(jù),而不需要CPU參與每次傳輸。合理利用DMA控制器,可以減輕CPU的負(fù)擔(dān)。本文通過介紹DMA結(jié)構(gòu)與工作原理,以及兩種模式(兵乓模式與多數(shù)據(jù)包緩沖傳輸模式),來看看使用DMA如何提高MCU效率。

DMA結(jié)構(gòu)與工作原理

先進(jìn)的DMA控制器,如STMicroelectronics的STM32F4系列中包含的控制器,可以通過靈活的數(shù)據(jù)流分配和傳輸管理功能進(jìn)一步減輕CPU的負(fù)擔(dān)。

如圖左側(cè)所示,來自8個(gè)不同的通道DMA請求,并到仲裁器上,從而建立優(yōu)先級(jí)(編號(hào)較低的輸入通道,具有較高的優(yōu)先級(jí))。然后激活最高優(yōu)先級(jí)的傳輸,傳輸?shù)綀D中右側(cè)的兩個(gè)AHB 主設(shè)備(存儲(chǔ)器端口和外設(shè)接口),提高了外設(shè)到存儲(chǔ)器傳輸?shù)男?。這可能是DMA在基于CPU的設(shè)計(jì)中最常見的情況。

wKgZomUDwHCAcjeDAADsVIysjq0364.jpg

圖 1. STM32F4系列DMA控制器(圖片來源于STMicroelectronics)

為每個(gè)路徑分配單獨(dú)的FIFO,如圖1中間所示,允許針對每個(gè)外設(shè)接口的特性調(diào)整FIFO特性。例如,F(xiàn)IFO的閾值級(jí)別(請求傳輸?shù)纳疃?可以單獨(dú)設(shè)置為FIFO大小的?,?或?。這允許低速通道等待,直到FIFO幾乎滿了才進(jìn)行傳輸,以最小化開銷。更快的通道會(huì)更早地啟動(dòng)傳輸,可能只有一半大小,以避免FIFO溢出。

我們來通過一個(gè)實(shí)例,來看看DMA怎么工作的。

實(shí)例:“使用 STM32 來控制 NeoPixels LED

硬件部分采用STM32 開發(fā)板,與 NeoPixelLED、燈帶、矩陣等相連接。

RGB NeoPixels實(shí)際上是WS2812智能控制LED。下面是WS2812 LED的3字節(jié)數(shù)據(jù)協(xié)議的結(jié)構(gòu),分別代表綠紅藍(lán)三個(gè)信息。

wKgaomUDwHOAbFNZAAAkVbCSsD4400.jpg

圖 2.WS2812 LED的3字節(jié)數(shù)據(jù)協(xié)議的結(jié)構(gòu)

使用計(jì)時(shí)器來PWM控制波形,然后配置DMA使CPU高效并且易于實(shí)施。

wKgZomUDwHWAUQKUAABNu2Dq2sY191.jpg

圖 3.WS2812 LED的0和1位的計(jì)時(shí)圖

在軟件中,配置DMA, 選擇了“TIM2_CH3/UP”, 將方向改為“內(nèi)存到外設(shè)”, 同時(shí),將優(yōu)先級(jí)改為“非常高”,最后保存.ioc 文件,以生成項(xiàng)目代碼。

wKgaomUDwHeAVb3CAADOmUA3nwI260.jpg

圖 4. 配置DMA流,以便有效更新PWM信號(hào)的占空比

更多內(nèi)容請看下面文章:使用 STM32 來控制 NeoPixels

DMA的兩種模式

合理使用兩種DMA模式(兵乓模式與多數(shù)據(jù)包緩沖傳輸模式),可以幫助提高M(jìn)CU效率。

USB外設(shè)是一個(gè)很好的外設(shè)示例,早期的USB實(shí)現(xiàn)的最大吞吐量只有1.5 Mb/秒。隨著更高性能的標(biāo)準(zhǔn)版本的出現(xiàn)。比如要接近12 Mbit/s全速USB標(biāo)準(zhǔn)的理論最大值。我們來看看,數(shù)據(jù)傳輸方面DMA如何幫助提高M(jìn)CU效率!

我們以Microchip的ATXMEGA16D4-MH舉例。

01、兵乓模式

之前通常使用單個(gè)存儲(chǔ)器緩沖區(qū)進(jìn)行外設(shè)數(shù)據(jù)傳輸。如果數(shù)據(jù)緩沖區(qū)已滿,MCU將響應(yīng)NAK(否定確認(rèn))消息。接收到NAK后,主機(jī)將等待并稍后重試傳輸。它將繼續(xù)重試,直到MCU能夠成功接收數(shù)據(jù)。

ATXMEGA16D4-MH使用乒乓模式來消除這個(gè)問題。乒乓模式使用兩個(gè)存儲(chǔ)單元(memory banks)進(jìn)行數(shù)據(jù)傳輸。當(dāng)一個(gè)存儲(chǔ)單元滿時(shí),主機(jī)可以將數(shù)據(jù)傳輸?shù)搅硪粋€(gè)存儲(chǔ)單元。在兩個(gè)存儲(chǔ)單元之間交替?zhèn)鬏斂梢员苊鈴?fù)審,并提高整體數(shù)據(jù)帶寬。

wKgZomUDwHmAPqQEAABgCisnRas657.jpg

圖 5. 乒乓模式提高了效率(圖片來源于Microchip)

此外,如上圖所示,以乒乓模式還使MCU有更多時(shí)間來處理數(shù)據(jù)。如圖所示,沒有乒乓,CPU只能處理傳輸之間的數(shù)據(jù)。使用乒乓模式,CPU可以在傳輸周期的一部分時(shí)間內(nèi)處理數(shù)據(jù),并降低NAK被要求“趕上”數(shù)據(jù)處理要求的可能性。

02、多數(shù)據(jù)包緩沖傳輸模式

另一個(gè)很有用的模式,可以讓MCU的數(shù)據(jù)傳輸更高效。這個(gè)特性叫做“多數(shù)據(jù)包緩沖傳輸模式”。如果你要通過USB端口傳送的數(shù)據(jù)包,超過了全速USB的BULK傳輸模式所允許的最大值(64字節(jié)),那么就可以用上這個(gè)模式。以前,你需要在主機(jī)上把數(shù)據(jù)包分成小塊,然后在接收端把它們合并,這會(huì)增加中央處理器(CPU)的負(fù)擔(dān)。不過現(xiàn)在,多數(shù)據(jù)包緩沖功能加入了USB設(shè)備,它會(huì)在數(shù)據(jù)包超過USB標(biāo)準(zhǔn)大小時(shí)自動(dòng)幫你分割和合并數(shù)據(jù)。重要的是,這個(gè)模式還能減少中斷的次數(shù),因?yàn)橹挥性谡麄€(gè)傳輸結(jié)束后才需要中斷CPU。這意味著,CPU可以處理其他任務(wù),或者進(jìn)入休眠模式,直到整個(gè)傳輸完成并且準(zhǔn)備好處理。

總結(jié)

合理利用DMA控制器,可以減輕減輕CPU的負(fù)擔(dān),事半功倍。結(jié)合“乒乓緩沖”和“多傳輸模式”,你可以把傳輸?shù)膸拸幕鶞?zhǔn)BULK傳輸模式的5.6 Mb/s提升到8.7 Mbits/s,這是一個(gè)不小的提升。更重要的是,在使用這兩個(gè)功能的情況下,CPU的負(fù)擔(dān)從基準(zhǔn)的46%降低到只有9%。這兩個(gè)功能的結(jié)合,不僅在性能上有所改進(jìn),而且還能節(jié)省能源。

來源:得捷電子DigiKey(作者:Alan Yang)

審核編輯:湯梓紅

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

    關(guān)注

    6030

    文章

    44489

    瀏覽量

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

    關(guān)注

    112

    文章

    16103

    瀏覽量

    177077
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7430

    瀏覽量

    163517
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    556

    瀏覽量

    100347
收藏 人收藏

    評論

    相關(guān)推薦

    笙泉科技:專注提供8051 MCU單片機(jī)

    笙泉科技:專注提供8051 MCU單片機(jī)單片機(jī)領(lǐng)域的競爭很激烈,單片機(jī)的應(yīng)用很廣泛,單片機(jī)的技術(shù)也很多,沒有一家
    發(fā)表于 03-08 10:05 ?1428次閱讀

    【高手問答】第2期——阿東帶你走進(jìn)fpga的邏輯編程設(shè)計(jì)

    【高手問答】第4期——與社區(qū)之星工聊聊labview設(shè)計(jì)【高手問答】第3期——走進(jìn)硬件電路設(shè)計(jì)【高手問答】第2期——阿東帶你走進(jìn)fpga的邏輯編程設(shè)計(jì)【高手問答】第1期——朱兆琪在線解答單片機(jī)C語言
    發(fā)表于 07-07 14:30

    如何升華51單片機(jī)基礎(chǔ),成為一個(gè)出色的開發(fā)工程師。

    解答PCB設(shè)計(jì)【高手問答】第5期——STM32硬件問答【高手問答】第4期——與社區(qū)之星工聊聊labview設(shè)計(jì)【高手問答】第3期——走進(jìn)硬件電路設(shè)計(jì)【高手問答】第2期——阿東帶你走進(jìn)fpga的邏輯編程設(shè)計(jì)【高手問答】第1期——朱兆琪在線解答
    發(fā)表于 10-09 11:25

    如何成為單片機(jī)編程高手

    記住這些寄存器成為單片機(jī)編程高手
    發(fā)表于 02-01 06:49

    云計(jì)算為什么能成為物聯(lián)網(wǎng)的秘密武器?

    云計(jì)算為什么能成為物聯(lián)網(wǎng)的秘密武器?
    發(fā)表于 06-18 06:22

    如何才能成為一名單片機(jī)高手?

    如何才能成為一名單片機(jī)高手?學(xué)習(xí)單片機(jī)的三個(gè)步驟都知道嗎
    發(fā)表于 07-01 07:01

    STC89C52_51單片機(jī)_例程5_長短按鍵_定時(shí)***_要怎樣努力才能成為很厲害的人? 精選資料分享

    STC89C52_51單片機(jī)_例程5_長短按鍵_定時(shí)***_要怎樣努力才能成為很厲害的人?代碼及文件下載鏈接https://download.csdn.net/download
    發(fā)表于 07-20 06:53

    單片機(jī)功能編程器有哪些主要功能

    單片機(jī)功能編程器的特點(diǎn)是什么?單片機(jī)功能編程器有哪些主
    發(fā)表于 09-18 06:42

    如何才能成為一個(gè)硬件工程師?

    如何才能成為一個(gè)硬件工程師?
    發(fā)表于 11-11 07:11

    如何才能成為一名單片機(jī)工程師?

    如何才能成為一名單片機(jī)工程師?
    發(fā)表于 12-23 07:56

    單片機(jī)的ISP在線編程設(shè)計(jì)

    單片機(jī)的ISP在線編程設(shè)計(jì)   隨著電子技術(shù)的日益發(fā)展,芯片的規(guī)模越來越大,封裝日趨小型化,相應(yīng)地對系統(tǒng)板級(jí)調(diào)試的困難也在加大。在傳統(tǒng)
    發(fā)表于 03-29 15:10 ?1948次閱讀
    <b class='flag-5'>單片機(jī)</b>的ISP在線<b class='flag-5'>編程設(shè)計(jì)</b>

    怎么由芯片的時(shí)序圖寫程序?_單片機(jī)對1602液晶時(shí)序圖編程設(shè)計(jì)

    如何看懂芯片的時(shí)序圖,進(jìn)行編程設(shè)計(jì)單片機(jī)對外接芯片進(jìn)行操作的基礎(chǔ)。本文以1602為例,解析單片機(jī)對芯片時(shí)序圖的編程思路。
    發(fā)表于 01-06 10:13 ?1.1w次閱讀
    怎么由芯片的時(shí)序圖寫程序?_<b class='flag-5'>單片機(jī)</b>對1602液晶時(shí)序圖<b class='flag-5'>編程設(shè)計(jì)</b>

    華大單片機(jī)HC32F460 系列MCU

    1摘要本篇應(yīng)用筆記主要介紹如何使用華大單片機(jī) HC32F460 系列MCUDMA 模塊傳輸數(shù)據(jù)。2DMA 簡介什么是 DMA
    發(fā)表于 11-18 19:21 ?20次下載
    華大<b class='flag-5'>單片機(jī)</b>HC32F460 系列<b class='flag-5'>MCU</b>

    AVR單片機(jī)為何能成為8位機(jī)中的佼佼者?

    AVR單片機(jī)為何能成為8位機(jī)中的佼佼者? AVR單片機(jī)是一種高性能、低功耗、高可靠性、方便編程的微控制器。它可以廣泛應(yīng)用于消費(fèi)電子、汽車電子
    的頭像 發(fā)表于 10-29 17:29 ?675次閱讀

    按照這樣學(xué)習(xí)C語言,成為不是夢!

    在計(jì)算機(jī)編程領(lǐng)域,C語言被譽(yù)為一種強(qiáng)大而靈活的編程語言,掌握好C語言不僅可以讓輕松駕馭各種編程任務(wù),還能夠?yàn)?b class='flag-5'>你的職業(yè)生涯打下堅(jiān)實(shí)的基礎(chǔ)。但
    的頭像 發(fā)表于 07-06 08:04 ?277次閱讀
    按照這樣學(xué)習(xí)C語言,<b class='flag-5'>成為</b><b class='flag-5'>卷</b><b class='flag-5'>王</b>不是夢!