在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

如何優化MCU SPI驅動程序以實現高ADC吞吐速率

ADI智庫 ? 來源:ADI智庫 ? 2023-03-30 11:57 ? 次閱讀

隨著技術的進步,低功耗物聯網(IoT)和邊緣/云計算需要更精確的數據傳輸。圖1展示的無線監測系統是一個帶有24位模數轉換器(ADC)的高精度數據采集系統。在此我們通常會遇到這樣一個問題,即微控制單元(MCU)能否為數據轉換器提供高速的串行接口

本文描述了設計MCU和ADC之間的高速串行外設接口(SPI)關于數據事務處理驅動程序的流程,并簡要介紹了優化SPI驅動程序的不同方法及其ADC與MCU配置。本文還詳細介紹了SPI和直接存儲器訪問(DMA)關于數據事務處理的示例代碼。最后,本文演示了在不同MCU(ADuCM4050、MAX32660)中使用相同驅動程序時ADC的吞吐率。

ebc06488-cead-11ed-bfe3-dac502259ad0.png

圖1. 狀態監控。

通用SPI驅動程序簡介

通常,MCU廠商會在例程代碼中提供通用的SPI驅動程序/API。通用SPI驅動程序/API通常可以涵蓋大多數用戶的應用,這些代碼可能包含許多配置或判斷語句。但在某些特定情況下,比如ADC數據采集,通用的SPI驅動程序可能無法滿足ADC數據的全速的吞吐速率需求,因為通用的驅動程序中有過多的配置,而未使用的配置會產生額外的開銷并導致時間延遲。

ec047f06-cead-11ed-bfe3-dac502259ad0.png

圖2. 通用API的配置。

設計思路與實踐框架

我們通常會選擇低功耗高性能的MCU作為主機通過SPI提取ADC的輸出數據。但是,由于ADI的SPI驅動程序的數據事務處理命令存在冗余,因此數據輸出速率可能被顯著降低。為了充分釋放ADC的潛在速率,本文使用ADuCM4050和AD7768-1進行實驗并嘗試可能的解決方案。盡管在使用默認濾波器的情況下,ADuCM4050的最大數據輸出速率可達256 kHz,但在當前情況下,其速率被限制在8 kHz。提高輸出速率的潛在解決方案包括刪除不必要的命令以及激活DMA控制器。本文將在以下小節中介紹這些思路。

ec3c3fb8-cead-11ed-bfe3-dac502259ad0.png

圖3. 不同ODR以及DRDY與SCLK之間的關系。

以MCU作為主機

ADuCM4050 MCU是一款主時鐘速率為26 MHz的超低功耗微控制器,內核為ARM Cortex-M4F處理器。ADuCM4050配有三個SPI,每個SPI都有兩個DMA通道(接收和發射通道)可與DMA控制器連接。DMA控制器和DMA通道可實現存儲器與外設之間的數據傳輸。這是一種高效的數據分配方法,可將內核釋放以處理其他任務。

以ADC作為從機

AD7768-1是一款24位低功耗、高性能的Σ-Δ ADC。其數據輸出速率(ODR)和功耗模式均可根據用戶的要求進行配置。ODR由抽取系數和功耗模式共同決定,如表1中所示。

表1. 數據輸出速率的功耗模式配置

ec78942c-cead-11ed-bfe3-dac502259ad0.png

AD7768-1的連續讀取模式也是該產品的一個重要特性。ADC的輸出數據存儲在寄存器0x6C中。一般而言,每次讀/寫操作之前,ADC寄存器中的數據都需要地址才可以訪問,但是連續讀取模式則支持在收到每個數據就緒信號后直接從0x6C寄存器提取數據。ADC的輸出數據為24位的數字信號,對應的電壓如表2所示。

表2. 數字輸出碼和模擬輸入電壓

eca700f0-cead-11ed-bfe3-dac502259ad0.png

引腳連接示意圖

ADuCM4050和AD7768-1組成的數據事務處理示例模型的引腳連接如圖4所示。

ed3d472c-cead-11ed-bfe3-dac502259ad0.png

圖4. AD7768-1和ADuCM4050的接口引腳連接。

ADC的復位信號引腳RST_1連接至MCU的GPIO28,而數據就緒信號引腳DRDY_1則連接至MCU的GPIO27。其余引腳則根據通用的SPI配置標準進行連接,其中MCU為主機,而ADC為從機。SDI_1接收MCU發送的ADC寄存器讀/寫命令,而DOUT_1則將ADC的輸出數據發送至MCU。

數據事務處理的實現

中斷數據事務處理

為實現連續數據事務處理,本文將MCU的GPIO27引腳(連接至ADC的DRDY_1引腳)用作中斷觸發引腳。ADC將數據就緒信號發送至GPIO27時會觸發MCU包含數據事務處理命令的中斷回調函數。如圖5所示,數據采集必須在中斷A和中斷B之間的時間間隔內進行。

ed5b9a56-cead-11ed-bfe3-dac502259ad0.png

圖5. 兩次中斷的時間間隔。

利用ADI的SPI驅動程序可以在ADC和MCU之間輕松實現數據事務處理。但是,由于驅動程序內存在冗余命令,ADC的ODR會被限制在8 kHz。本文盡可能地精簡了代碼以加快ODR,將介紹實現DMA數據事務處理的兩種方法:基本模式的DMA事務處理和乒乓模式的DMA事務處理。

基本模式的DMA事務處理

在實現每個DMA事務處理之前需要對SPI和DMA進行配置(參見圖6中的示例代碼)。SPI_CTL為SPI配置,其值為0x280f,源于ADI的SPI驅動程序的設定值。SPI_CNT為傳輸字節數。由于每個DMA事務處理只能發送固定的16位數據,因此SPI_CNT必須是2的倍數。本例設置SPI_CNT為4,以滿足ADC的24位的輸出數據要求。SPI_DMA寄存器為SPI的DMA使能寄存器,設定其值為0x5以使能DMA接收請求。命令pADI_DMA0->EN_SET=(1<<5)使能第五個通道的DMA,即SPI0 RX。

ed76e70c-cead-11ed-bfe3-dac502259ad0.png

圖6. 基本DMA事務處理模式的代碼。

每個DMA通道都有一個DMA結構寄存器,如表3中所示。需要指出的是,這里的數據來源地址的結尾(即SPI0 Rx,亦即來源端指針SRC_END_PTR)在整個操作期間無需增加,因為Rx FIFO會自動將寄存器中的數據推送出去。另一方面,數據目標地址的結尾(即目標端指針DST_END_PTR)根據ADI的SPI驅動程序的使用函數計算得出,即目標地址+ SPI_CNT -2。

表3. DMA結構寄存器

edd1ff7a-cead-11ed-bfe3-dac502259ad0.png

當前地址為內部數組緩沖區的地址。DMA控制數據配置CHNL_CFG包括來源數據大小、來源地址增量、目標地址增量、剩余傳輸次數和DMA控制模式等設置,其值0x4D000011按照表4中所述的設置配置。

表4. 控制數據配置0x4D00011的DMA配置

eded720a-cead-11ed-bfe3-dac502259ad0.png

SCLK時鐘通過偽讀取命令SPI_SPI0 -> RX啟動,輸出數據通過MISO從ADC傳至MCU。MOSI上其它的數據傳輸可以忽略不計。一旦完成Rx的FIFO填充,DMA請求就會生成從而激活DMA控制器,以將數據從DMA來源地址(即SPI0 Rx FIFO)傳輸至DMA目標地址(即內部數組的緩沖區)。值得注意的是,SPI_DMA=0x3時會生成Tc請求。

最后,通過將當前目標地址加4的方式將目標地址用于下一個4字節的傳輸。

請注意,SPI0 DMA通道的pADI_DMA0->DSTADDR_CLR和pADI_DMA0->RMSK_CLR必須在首次中斷觸發之前在主函數中設置。前一個為DMA通道目標地址減量使能清零寄存器,用于在增量模式下設置每次DMA傳輸后的目標地址移位(目標地址計算函數僅在增量模式下有效)。后一個為DMA通道請求屏蔽清零寄存器,用于將通道的DMA請求狀態清零。

基本模式的DMA事務處理時間圖如圖7a所示。圖中三個時隙分別代表DRDY信號、SPI/DMA設置和DMA數據事務處理。在該模式中,CPU的空閑時間較多,因此希望DMA控制器在處理數據傳輸時能將任務分配給CPU。

ee22f240-cead-11ed-bfe3-dac502259ad0.png

圖7. (a)基本模式DMA和(b)乒乓模式的時間圖。

乒乓模式的DMA事務處理

在執行偽讀取命令后,DMA控制器會開始數據事務處理,從而使得MCU的CPU處于空閑狀態而不處理任何任務。如果能夠讓CPU和DMA控制器同時工作,那么任務處理就從串行模式轉變為并行模式。這樣,就可以同時進行DMA配置(通過CPU)以及DMA數據事務處理(通過DMA控制器)。為實現這一思路,需要設置DMA控制器處于乒乓模式。乒乓模式將兩組DMA結構進行了整合:主結構和備用結構。每次DMA請求時,DMA控制器會在兩組結構之間自動切換。變量p的初始設置為0,其值表示是主DMA結構(p = 0)還是備用DMA結構(p = 1)負責數據事務處理。如果p = 0,則在收到偽讀取命令時啟動主DMA結構進行數據事務處理,同時會為備用DMA結構分配值,使其在下一個中斷周期內負責數據事務處理。如果p = 1,則主結構和備用結構的作用互換。當僅有主結構處于基本DMA模式時,在DMA事務處理期間對DMA結構的修改會失敗。乒乓模式使得CPU能夠訪問和寫入備用DMA結構,而DMA控制器可以讀取主結構,反之亦然。如圖7b所示,由于DMA的結構配置是在最后一個周期內完成的,因此在DRDY信號從ADC傳送至MCU后DMA數據事務處理可以被立即執行,使得CPU和DMA同時工作而無需等待。現在,ADC的ODR得到了提升空間,因為總的工作時間已大大縮短。

中斷處理程序的優化

兩次DRDY信號之間的時間間隔不僅包括了中斷回調函數的命令執行時間,還包括了ADI的GPIO中斷處理函數的命令執行時間。

當MCU啟動時,CPU會運行啟動文件(即startup.s)。所有事件的處理函數均在該文件中定義,包括GPIO中斷處理函數。一旦觸發GPIO中斷,CPU就會執行中斷處理函數(即ADI的GPIO驅動程序中的GPIO_A_INT_HANDLER和GPIO_B_INT_HANDLER)。通用的中斷處理函數會在所有的GPIO引腳中搜索觸發中斷的引腳并清零其中斷狀態、運行回調函數。由于DRDY是本文應用的唯一中斷信號,因此可以對函數進行簡化以加快進程。可選的解決方案包括(1)在啟動文件中重新定位目標,以及(2)修改原始的中斷處理函數。重新定位目標意味著自定義中斷處理函數,并替換啟動文件中的原始的中斷處理函數。

而修改原始的中斷處理函數只需要添加一個自定義的GPIO驅動程序。本文采用第二種方案修改原始的中斷處理函數,如圖8所示。該方案只將連接至DRDY的GPIO的引腳中斷狀態清零,并直接轉到回調函數。請注意,這里需要通過取消選擇build target中關于原始GPIO驅動函數的勾選框內容來隔離原始的GPIO驅動程序。

ee4bb8d8-cead-11ed-bfe3-dac502259ad0.png

圖8. 嵌套矢量中斷控制器(NVIC)。

結果

速率性能

假定現在需要讀取200個24位的ADC輸出數據,并且SPI位速率設置為13 MHz。將DRDY信號和SCLK信號的引腳連接至示波器,可以通過觀察DRDY信號與SPI數據事務處理(亦即DMA事務處理)啟動之間的時間間隔的方法可以量化本文所述的每種方法對速率的改善程度。這里將DRDY信號至SCLK信號開始的時間間隔記為?t,那么對于13 MHz的SPI速率,測量得出的?t為:

(a)基本模式DMA Δt = 3.754 μs

(b)乒乓模式DMA Δt = 2.8433 μs

(c)乒乓模式DMA(使用優化的中斷處理函數)Δt = 1.694 μs

方法(a)和(b)可支持64 kHz的ODR,而方法(c)可支持128 kHz的ODR。這是因為方法(c)的?t最短,從而使得SCLK信號能夠更早結束。如果SCLK信號(即數據事務處理)能在T/2之前完成(T為當前ADC的數據輸出周期),則ODR可實現翻倍。這較之于原始的ADISPI驅動程序可以達到的8 kHz的ODR性能是一次巨大的進步。

ee858824-cead-11ed-bfe3-dac502259ad0.png

圖9. (a)基本模式DMA、(b)乒乓模式以及(c)乒乓模式(使用優化的中斷處理函數)的Δt。

使用MAX32660控制AD7768-1

使用主時鐘速率為96 MHz的MCU MAX32660控制AD7768-1)時的結果如何?在該情況下,使用優化的中斷處理函數的中斷設置,可在不使用DMA函數的情況下實現256 kHz的數據輸出速率。參見圖10。

eeda1812-cead-11ed-bfe3-dac502259ad0.png

圖10. 不使用DMA時MAX32660的ODR。

結論

本文利用選定的ADC(AD7768-1)和MCU(ADuCM4050或MAX32660)通過SPI實現了高速的數據事務處理。為實現速率優化的目標,本文簡化了ADI的SPI驅動程序執行數據事務處理。此外本文提出,激活DMA控制器釋放內核也可以加快連續數據事務處理的流程。在DMA的乒乓模式下,DMA的配置時間可通過適當的調度來節省。在此基礎上,還可以通過直接指定中斷引腳的方式優化中斷處理函數。在13 MHz的SPI位速率下,本文提出的方案的最佳性能可達到128 kSPS的ADC ODR。

表5. 使用ADuCM405和MAX32660實現的高速SPI連接

ef0407a8-cead-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17324

    瀏覽量

    352656
  • 存儲器
    +關注

    關注

    38

    文章

    7528

    瀏覽量

    164348
  • adc
    adc
    +關注

    關注

    99

    文章

    6534

    瀏覽量

    545768
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1722

    瀏覽量

    92130
  • 程序
    +關注

    關注

    117

    文章

    3796

    瀏覽量

    81418

原文標題:如何優化MCU SPI驅動程序以實現高ADC吞吐速率

文章出處:【微信號:ADI智庫,微信公眾號:ADI智庫】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    采用WinCE實現SPI接口驅動程序

    中即可。結 語本文詳細介紹了Platform Builder下SPI接口驅動程序設計以及驅動程序同應用程序交互的實現
    發表于 05-20 05:00

    Linux設備驅動程序的平臺驅動程序和字符驅動程序介紹

    了解Linux設備驅動程序的基礎知識,重點介紹平臺驅動程序和字符驅動程序。 提出了簡單的平臺驅動程序實現和簡單的字符
    的頭像 發表于 11-27 06:32 ?4373次閱讀

    嵌入式Linux系統的驅動原理和使用ARM Linux實現SPI驅動程序的說明

    介紹嵌入式Linux系統的驅動原理;分析SPI協議的通信原理和微處理器S3C2440A中SPI接口的硬件結構;闡述SPI驅動程序
    發表于 11-14 16:36 ?11次下載
    嵌入式Linux系統的<b class='flag-5'>驅動</b>原理和使用ARM Linux<b class='flag-5'>實現</b><b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b>的說明

    AD7887 IIO ADC Linux驅動程序

    AD7887 IIO ADC Linux驅動程序
    發表于 04-20 20:29 ?6次下載
    AD7887 IIO <b class='flag-5'>ADC</b> Linux<b class='flag-5'>驅動程序</b>

    AD7998 IIO ADC Linux驅動程序

    AD7998 IIO ADC Linux驅動程序
    發表于 04-21 20:33 ?16次下載
    AD7998 IIO <b class='flag-5'>ADC</b> Linux<b class='flag-5'>驅動程序</b>

    SAR ADC驅動程序

    SAR ADC驅動程序
    發表于 04-23 13:46 ?2次下載
    SAR <b class='flag-5'>ADC</b><b class='flag-5'>驅動程序</b>

    IIO單通道串行ADC Linux驅動程序

    IIO單通道串行ADC Linux驅動程序
    發表于 05-19 18:26 ?7次下載
    IIO單通道串行<b class='flag-5'>ADC</b> Linux<b class='flag-5'>驅動程序</b>

    AD7291 IIO ADC Linux驅動程序

    AD7291 IIO ADC Linux驅動程序
    發表于 05-23 16:44 ?3次下載
    AD7291 IIO <b class='flag-5'>ADC</b> Linux<b class='flag-5'>驅動程序</b>

    用于SPI軟件的Windows 7驅動程序

    用于SPI軟件的Windows 7驅動程序
    發表于 06-10 15:13 ?9次下載
    用于<b class='flag-5'>SPI</b>軟件的Windows 7<b class='flag-5'>驅動程序</b>

    STM32的ADC驅動程序

    STM32的ADC驅動程序(電源技術被踢出核心)-? STM32的ADC驅動程序,環境是MDK,ADC的所有函數
    發表于 09-23 13:43 ?37次下載
    STM32的<b class='flag-5'>ADC</b><b class='flag-5'>驅動程序</b>

    如何優化MCU SPI驅動程序實現ADC吞吐速率

    隨著技術的進步,低功耗物聯網(IoT)和邊緣/云計算需要更精確的數據傳輸。圖1展示的無線監測系統是一個帶有24位模數轉換器(ADC)的高精度數據采集系統。在此我們通常會遇到這樣一個問題,即微控制單元(MCU)能否為數據轉換器提供高速的串行接口。
    的頭像 發表于 04-19 13:41 ?458次閱讀
    如何<b class='flag-5'>優化</b><b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b><b class='flag-5'>以</b><b class='flag-5'>實現</b><b class='flag-5'>高</b><b class='flag-5'>ADC</b><b class='flag-5'>吞吐</b><b class='flag-5'>速率</b>

    優化MCU SPI驅動程序實現ADC吞吐速率

    隨著技術的進步,低功耗物聯網(IoT)和邊緣/云計算需要更精確的數據傳輸。圖1展示的無線監測系統是一個帶有24位模數轉換器(ADC)的高精度數據采集系統。在此我們通常會遇到這樣一個問題,即微控制單元(MCU)能否為數據轉換器提供高速的串行接口。
    的頭像 發表于 05-08 14:52 ?664次閱讀
    <b class='flag-5'>優化</b><b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b><b class='flag-5'>以</b><b class='flag-5'>實現</b><b class='flag-5'>高</b><b class='flag-5'>ADC</b><b class='flag-5'>吞吐</b><b class='flag-5'>速率</b>

    如何優化MCU SPI驅動程序實現ADC吞吐速率

    本文利用選定的ADC(AD7768-1)和MCU(ADuCM4050或MAX32660)通過SPI實現了高速的數據事務處理。為實現
    的頭像 發表于 06-12 15:26 ?871次閱讀
    如何<b class='flag-5'>優化</b><b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b><b class='flag-5'>以</b><b class='flag-5'>實現</b><b class='flag-5'>高</b><b class='flag-5'>ADC</b><b class='flag-5'>吞吐</b><b class='flag-5'>速率</b>

    【世說設計】優化MCU SPI驅動程序實現ADC吞吐速率

    單元(MCU)能否為數據轉換器提供高速的串行接口。本文描述了設計MCUADC之間的高速串行外設接口(SPI)關于數據事務處理驅動程序的流程
    的頭像 發表于 05-22 10:00 ?775次閱讀
    【世說設計】<b class='flag-5'>優化</b><b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b><b class='flag-5'>以</b><b class='flag-5'>實現</b><b class='flag-5'>高</b><b class='flag-5'>ADC</b><b class='flag-5'>吞吐</b><b class='flag-5'>速率</b>

    如何優化MCU SPI驅動程序實現ADC吞吐速率

    如何優化MCU SPI驅動程序實現
    的頭像 發表于 10-24 16:03 ?672次閱讀
    如何<b class='flag-5'>優化</b><b class='flag-5'>MCU</b> <b class='flag-5'>SPI</b><b class='flag-5'>驅動程序</b><b class='flag-5'>以</b><b class='flag-5'>實現</b><b class='flag-5'>高</b><b class='flag-5'>ADC</b><b class='flag-5'>吞吐</b><b class='flag-5'>速率</b>
    主站蜘蛛池模板: 俄罗斯欧美色黄激情 | 性色在线播放 | 午夜影院一级片 | 在线你懂得 | 国模大尺度酒店私拍视频拍拍 | 久久是精品 | 最好看免费中文字幕2018视频 | 亚洲午夜日韩高清一区 | 在线观看永久免费视频网站 | 让她爽的喷水叫爽乱 | 亚洲天天做夜夜做天天欢人人 | 五月天综合婷婷 | 啪啪啦资源站永久 | 欧美一二区视频 | 1区2区3区4区 | 奇米色88欧美一区二区 | 极品美女写真菠萝蜜视频 | 看全色黄大色大片免费久久 | 欧美激情二区三区 | 中国一级特黄真人毛片免费看 | 美女一区二区三区 | 国产三级日本三级美三级 | 在线免费看黄的网站 | 亚洲人成网站999久久久综合 | 波多野结衣在线观看一区二区三区 | 丁香六月综合网 | 中文字幕婷婷 | 天天综合色天天综合 | 韩国中文字幕在线观看 | 国产精品亚洲玖玖玖在线靠爱 | 亚洲www在线 | 一区精品视频 | 久久手机看片你懂的日韩1024 | 久久伊人成人 | 亚洲国产精品日韩专区avtube | 天天爽夜爽免费精品视频 | 亚洲一区二区三区四区五区六区 | 日本欧美色图 | 夜夜夜爽 | 日本成人在线网址 | 一女被多男玩很肉很黄文 |