久久午夜影院,91精品国产调教在线观看,日韩午夜免费,伊人久久大香线蕉av不卡

你的位置:首頁 > 測試測量 > 正文

如何優(yōu)化MCU SPI驅(qū)動程序以實現(xiàn)高ADC吞吐速率

發(fā)布時間:2023-04-19 來源:ADI 責任編輯:wenwei

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


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


1680093794352181.png

圖1. 狀態(tài)監(jiān)控。


引言


通用SPI驅(qū)動程序簡介


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


14.png

圖2. 通用API的配置。


設(shè)計思路與實踐框架


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


1680093769591926.png

圖3. 不同ODR以及DRDY與SCLK之間的關(guān)系。


以MCU作為主機


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


以ADC作為從機


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


表1. 數(shù)據(jù)輸出速率的功耗模式配置

16.png


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


表2. 數(shù)字輸出碼和模擬輸入電壓

17.png


引腳連接示意圖


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


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


1680093732424246.png

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


數(shù)據(jù)事務(wù)處理的實現(xiàn)


中斷數(shù)據(jù)事務(wù)處理


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


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


19.png

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


基本模式的DMA事務(wù)處理


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


表3. DMA結(jié)構(gòu)寄存器

20.png


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


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


表4. 控制數(shù)據(jù)配置0x4D00011的DMA配置

21.png


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


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


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


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


1680093688639915.png

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


乒乓模式的DMA事務(wù)處理


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


1680093673220216.png

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


中斷處理程序的優(yōu)化


兩次DRDY信號之間的時間間隔不僅包括了中斷回調(diào)函數(shù)的命令執(zhí)行時間,還包括了ADI的GPIO中斷處理函數(shù)的命令執(zhí)行時間。


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


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


1680093654712971.png

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


結(jié)果


速率性能


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


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

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

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


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


25.png

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


使用MAX32660控制AD7768-1


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


26.png

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


結(jié)論


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


表5. 使用ADuCM405和MAX32660實現(xiàn)的高速SPI連接

1680093618836985.png


致謝


在編寫本文的過程中,我們獲得了許多支持和幫助。


首先我們要感謝Charles Lee為我們提供了寶貴的硬件設(shè)計經(jīng)驗、軟件支持以及調(diào)試技巧等專業(yè)知識。


我們還要感謝我們的導師William Chen給予我們的技術(shù)支持。


最后,我們要感謝Frank Chang與我們分享了自身職業(yè)生涯中的許多技術(shù)經(jīng)驗。



免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理。


推薦閱讀:


電池快速充電指南——第1部分

如何控制無刷直流電機

車載OBC+DC/DC方案

如何解決植物燈關(guān)斷余暉問題

利用軟件可配置I/O應對工業(yè)4.0挑戰(zhàn)

特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索

關(guān)閉

?

關(guān)閉

久久午夜影院,91精品国产调教在线观看,日韩午夜免费,伊人久久大香线蕉av不卡
久久xxx视频| 黑丝一区二区三区| 日韩欧美中文字幕一区二区三区 | 麻豆国产精品777777在线| 日本久久一区| 久久99久久人婷婷精品综合| 成人午夜网址| 99热精品久久| 欧美色图一区| 快she精品国产999| 日本特黄久久久高潮| 国产一区二区三区成人欧美日韩在线观看| 伊人网在线播放| 亚洲大片在线| 亚洲91网站| 国产精品探花在线观看| 日韩av二区| 午夜在线视频一区二区区别 | 中文欧美日韩| 奇米狠狠一区二区三区| 国产拍在线视频| 亚洲激情黄色| 久久国产婷婷国产香蕉| 精品捆绑调教一区二区三区| 视频精品一区二区| 久久精品午夜| 亚洲少妇在线| 精品成av人一区二区三区| 国产韩日影视精品| 国产精选一区| 欧美日韩国产高清| 免费在线观看一区| 欧美日韩国产精品一区二区亚洲| 欧美影院视频| 欧美/亚洲一区| 国产精品黄色片| 伊人久久成人| 免费日韩成人| 蜜桃视频第一区免费观看| 91视频精品| 69堂免费精品视频在线播放| 91精品一区二区三区综合在线爱| 91精品国产一区二区在线观看 | 精品日韩视频| 久久国产免费看| 欧美日韩精品免费观看视频完整| 久久精品超碰| 9色精品在线| 日韩综合一区| 日本少妇精品亚洲第一区| 久久久久99| 久久不见久久见免费视频7| 蜜臀va亚洲va欧美va天堂 | 亚洲一区欧美二区| 成人在线丰满少妇av| 日本欧美韩国一区三区| 午夜在线精品| 亚洲五月婷婷| caoporn视频在线| 青青草国产精品亚洲专区无| 亚洲免费成人| 天堂中文av在线资源库| 国产欧美一区二区三区精品观看 | 久久成人av| 午夜亚洲福利| 女人天堂亚洲aⅴ在线观看| 成人国产精选| 国产欧美日韩视频在线| 欧美三级第一页| 影院欧美亚洲| 国产精品亚洲四区在线观看| 人人爽香蕉精品| 午夜精品婷婷| 国产aa精品| 欧美午夜三级| 日日夜夜免费精品| 亚洲一区二区三区久久久| 免费视频国产一区| 91精品精品| 99精品综合| 三级小说欧洲区亚洲区| 成人国产精品一区二区网站| 久久av免费| 麻豆91在线播放| 精品国产一区二区三区性色av| 国产精品极品在线观看| 国产麻豆一区| 国产精品美女午夜爽爽| 91免费精品国偷自产在线在线| 日韩一区二区三区四区五区| 亚欧成人精品| 国产欧美另类| 欧美激情精品| 精品视频亚洲| 日韩av专区| 美女网站视频一区| 久久精品动漫| 日韩午夜一区| 丝袜国产日韩另类美女| 婷婷色综合网| 老牛影视一区二区三区| 亚洲精选91| 日韩av网站在线观看| 日本a级不卡| 国产亚洲一区二区三区啪| 国产日韩三级| 91视频久久| 免费观看久久av| 亚洲aa在线| 狠狠久久伊人| 欧美在线亚洲| 日欧美一区二区| 国产一区福利| 999精品在线| 99在线观看免费视频精品观看| 视频一区二区三区在线| 日本三级亚洲精品| 精品视频国产| 韩国精品主播一区二区在线观看 | 免费在线观看一区二区三区| 蜜桃久久精品一区二区| 日韩高清成人在线| 欧美激情日韩| 激情综合自拍| 日韩毛片一区| 国产suv精品一区| 久久久久午夜电影| 日韩激情av在线| 国产白浆在线免费观看| 亚洲专区一区| 国产精品成人3p一区二区三区| 最近高清中文在线字幕在线观看1| 激情久久五月| 日韩国产在线一| 日本美女一区| 最近国产精品视频| 国产一区二区三区国产精品| 99视频一区| 免费在线观看一区| 国产亚洲在线观看| 麻豆久久久久久久| 国产在线成人| 欧美久久香蕉| 久久国产直播| 欧美激情日韩| 国产亚洲午夜| 精品免费视频| 蜜桃视频第一区免费观看| 精品72久久久久中文字幕| 天堂va蜜桃一区二区三区| 精品成av人一区二区三区| 蜜桃视频免费观看一区| 麻豆视频在线看| 日韩和欧美一区二区| 五月婷婷亚洲| 精品国产精品久久一区免费式| 国产一区日韩一区| 久久精品三级| 日韩精品一区二区三区免费视频| 亚洲www免费| 国产精品3区| 亚洲最新av| 亚州av乱码久久精品蜜桃| 精品三区视频| 国产欧美啪啪| 日韩精品中文字幕一区二区| 国产精品丝袜xxxxxxx| 日韩精品电影| 精品中文字幕一区二区三区| 日韩欧美中文字幕在线视频| 模特精品在线| 三级小说欧洲区亚洲区| 九九99久久精品在免费线bt| 日产欧产美韩系列久久99| 久久精品国产亚洲夜色av网站 | 欧美专区18| 久久麻豆精品| 天堂√中文最新版在线| 美女尤物国产一区| 91成人精品在线| 亚洲1区在线| 丝袜诱惑制服诱惑色一区在线观看| 不卡福利视频| 国产精品红桃| 91综合久久爱com| 亚洲精品激情| 喷白浆一区二区| 亚洲免费成人| 国产视频一区在线观看一区免费| 午夜av成人| 免费观看亚洲| 首页国产精品| 国产一区二区亚洲| 免费看一区二区三区| 国产欧美日韩精品高清二区综合区 | 免费在线观看视频一区| 久久精品不卡| 欧美69视频| 国产视频一区免费看| 在线亚洲观看|