了解和使用no-OS及平臺(tái)驅(qū)動(dòng)程序
作者:ADI公司高級(jí)軟件工程師??? Mahesh Phalke
快速發(fā)展的技術(shù)需要軟件支持(固件驅(qū)動(dòng)程序和代碼示例)來簡(jiǎn)化設(shè)計(jì)導(dǎo)入過程。本文介紹如何利用no-OS(無操作系統(tǒng))驅(qū)動(dòng)程序和平臺(tái)驅(qū)動(dòng)程序來構(gòu)建ADI公司精密模數(shù)轉(zhuǎn)換器和數(shù)模轉(zhuǎn)換器的應(yīng)用固件,這些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。
ADI公司提供基于no-OS驅(qū)動(dòng)程序的嵌入式固件示例來支持精密變換器。no-OS驅(qū)動(dòng)程序負(fù)責(zé)器件配置、轉(zhuǎn)換器數(shù)據(jù)采集、執(zhí)行校準(zhǔn)等,而基于no-OS驅(qū)動(dòng)程序的固件示例則便于將數(shù)據(jù)傳輸?shù)街鳈C(jī)進(jìn)行顯示、存儲(chǔ)和進(jìn)一步處理。
no-OS和平臺(tái)驅(qū)動(dòng)程序簡(jiǎn)介
顧名思義,no-OS驅(qū)動(dòng)程序設(shè)計(jì)用于通用(或無特定)操作系統(tǒng)。該名稱還意味著這些驅(qū)動(dòng)程序可以用在沒有任何OS支持的裸機(jī)(BareMetal)系統(tǒng)上。no-OS驅(qū)動(dòng)程序旨在為給定精密轉(zhuǎn)換器的數(shù)字接口訪問提供高級(jí)API。no-OS驅(qū)動(dòng)程序使用器件的這些API接口訪問、配置、讀取、寫入數(shù)據(jù),而無需知道寄存器地址(存儲(chǔ)器映射)及其內(nèi)容。
no-OS驅(qū)動(dòng)程序利用平臺(tái)驅(qū)動(dòng)程序?qū)觼碇С挚缍鄠€(gè)硬件/軟件平臺(tái)復(fù)用相同的no-OS驅(qū)動(dòng)程序,使固件高度可移植。平臺(tái)驅(qū)動(dòng)程序?qū)拥氖褂脤o-OS驅(qū)動(dòng)程序隔絕開來,后者無需知道平臺(tái)特定接口(如SPI、I2C、GPIO等)的低級(jí)細(xì)節(jié),因此no-OS驅(qū)動(dòng)程序不需要修改就能跨多個(gè)平臺(tái)復(fù)用。
圖1.精密轉(zhuǎn)換器固件協(xié)議棧
使用no-OS驅(qū)動(dòng)程序
圖2顯示了no-OS驅(qū)動(dòng)程序的典型代碼結(jié)構(gòu)。
圖2.no-OS驅(qū)動(dòng)程序代碼結(jié)構(gòu)
圖3.器件配置枚舉、結(jié)構(gòu)和API
精密轉(zhuǎn)換器的no-OS驅(qū)動(dòng)程序代碼通常包含在兩個(gè)以C編程語(yǔ)言編寫的源文件中:adxxxx.c和adxxxx.h,其中xxxx代表器件名稱(例如AD7606、AD7124等)。器件頭文件(adxxxx.h)包含器件特定結(jié)構(gòu)、枚舉、寄存器地址和位掩碼的公共編程接口,將此文件包含到所需的源文件中便可使用這些公開訪問接口。器件源文件(adxxxx.c)包含接口的實(shí)現(xiàn),用于初始化和移除器件、讀/寫器件寄存器、從器件讀取數(shù)據(jù)、獲取/設(shè)置器件特定參數(shù)等。
典型的no-OS驅(qū)動(dòng)程序圍繞一組常見功能來構(gòu)建:
?器件特定寄存器地址、位掩碼宏、器件配置枚舉、讀/寫器件特定參數(shù)(如過采樣、增益、基準(zhǔn)電壓等)的結(jié)構(gòu)的聲明。
?通過no-OS驅(qū)動(dòng)程序的器件初始化/移除函數(shù)以及器件特定的初始化和驅(qū)動(dòng)程序結(jié)構(gòu)與描述符初始化物理器件/解除器件初始化。
?使用器件寄存器讀/寫函數(shù)訪問器件存儲(chǔ)器映射或寄存器詳細(xì)信息,例如adxxxx_read_register()或adxxxx_write_register()。
no-OS驅(qū)動(dòng)程序代碼使用
使用器件特定地址、位掩碼、參數(shù)配置枚舉和結(jié)構(gòu):
如前所述,adxxxx.h頭文件包含所有器件特定枚舉和結(jié)構(gòu)的聲明,這些枚舉和結(jié)構(gòu)被傳遞到器件特定的函數(shù)或API以配置或訪問器件參數(shù)。具體情況如圖3所示。
圖3中顯示的adxxxx_config結(jié)構(gòu)允許用戶選擇多路復(fù)用器通道并為其設(shè)置過采樣率。此結(jié)構(gòu)的成員(afe_mux_channel和oversampling)是存在于同一頭文件中的枚舉,其包含這兩個(gè)字段的所有可能值的數(shù)字常量,用戶可以選擇。
adxxxx.c文件中定義的adxxxx_set_adc_config()函數(shù)通過配置結(jié)構(gòu)獲取用戶傳遞的配置/參數(shù),并進(jìn)一步調(diào)用adxxxx_spi_reg_write()函數(shù),通過數(shù)字接口(在上例中是SPI)將數(shù)據(jù)寫入ADXXXX_REG_CONFIG器件寄存器。
使用no-OS驅(qū)動(dòng)程序結(jié)構(gòu)和初始化函數(shù)初始化器件:
圖4.器件初始化和驅(qū)動(dòng)程序結(jié)構(gòu)的聲明
除了器件配置枚舉和結(jié)構(gòu)之外,no-OS驅(qū)動(dòng)程序還提供以下兩個(gè)結(jié)構(gòu):
?器件初始化結(jié)構(gòu)。
?設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)。
器件初始化結(jié)構(gòu)允許用戶在用戶應(yīng)用程序代碼中定義器件特定的參數(shù)和配置。初始化結(jié)構(gòu)包含其他器件特定的參數(shù)結(jié)構(gòu)和枚舉的成員。圖5顯示了器件初始化結(jié)構(gòu)的定義。
器件驅(qū)動(dòng)程序結(jié)構(gòu)通過器件初始化函數(shù)adxxxx_init()加載器件初始化參數(shù)。器件驅(qū)動(dòng)程序結(jié)構(gòu)是在運(yùn)行時(shí)(動(dòng)態(tài))從堆空間中分配內(nèi)存。器件驅(qū)動(dòng)程序結(jié)構(gòu)和器件初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。器件驅(qū)動(dòng)程序結(jié)構(gòu)是器件初始化結(jié)構(gòu)的運(yùn)行時(shí)版本。
以下步驟說明典型的器件初始化函數(shù)和初始化流程:
?第1步:在應(yīng)用程序中創(chuàng)建器件初始化結(jié)構(gòu)的定義(或?qū)嵗ɡ?strong>struct adxxxx_init_params),以初始化用戶特定的器件參數(shù)和平臺(tái)相關(guān)的驅(qū)動(dòng)程序參數(shù)。參數(shù)在編譯期間定義。
注意:初始化結(jié)構(gòu)中定義的參數(shù)因器件而異。
?第2步:在應(yīng)用程序代碼中創(chuàng)建器件驅(qū)動(dòng)程序結(jié)構(gòu)的指針實(shí)例(變量)。
用戶應(yīng)用程序需要?jiǎng)?chuàng)建器件驅(qū)動(dòng)程序結(jié)構(gòu)的單個(gè)指針實(shí)例。將此實(shí)例傳遞給所有no-OS驅(qū)動(dòng)程序API/函數(shù)以訪問器件特定參數(shù)。應(yīng)用程序代碼中定義的此指針實(shí)例指向堆中動(dòng)態(tài)分配的內(nèi)存,這是通過no-OS驅(qū)動(dòng)程序中定義的器件初始化函數(shù)(如adxxxx_init())完成的。
?第3步:調(diào)用器件初始化函數(shù)以初始化器件和其他平臺(tái)特定的外設(shè)。
no-OS驅(qū)動(dòng)程序中定義的adxxxx_init()函數(shù)用adxxx_init_param結(jié)構(gòu)傳遞的用戶特定參數(shù)初始化器件。器件驅(qū)動(dòng)程序結(jié)構(gòu)的指針實(shí)例和器件初始化結(jié)構(gòu)的實(shí)例作為兩個(gè)參數(shù)傳遞給此初始化函數(shù)。用戶應(yīng)用程序代碼可以多次調(diào)用adxxxx_init()函數(shù),只要調(diào)用初始化函數(shù)之后再調(diào)用器件移除函數(shù)來平衡。
通過器件寄存器讀/寫函數(shù)訪問存儲(chǔ)器映射(寄存器內(nèi)容)如圖6所示
用戶可以通過no-OS驅(qū)動(dòng)程序器件特定的adxxx_read/write()函數(shù)訪問器件寄存器內(nèi)容(例如產(chǎn)品ID、暫存區(qū)值、OSR等)。
大多數(shù)情況下,用戶不會(huì)直接使用寄存器訪問函數(shù)。器件特定的函數(shù)通過這些寄存器訪問函數(shù)(如adxxxx_spi_reg_read/write())來調(diào)用。如果可能,建議使用器件配置和狀態(tài)API來訪問器件存儲(chǔ)器映射,而不要使用直接寄存器訪問函數(shù),因?yàn)檫@樣能確保器件驅(qū)動(dòng)程序結(jié)構(gòu)與器件中的配置保持同步。
平臺(tái)驅(qū)動(dòng)程序
平臺(tái)驅(qū)動(dòng)程序是包裝平臺(tái)特定API的硬件抽象層(HAL)之一。它們由no-OS器件驅(qū)動(dòng)程序或用戶應(yīng)用程序代碼調(diào)用,使后者可以獨(dú)立于底層硬件和軟件平臺(tái)。平臺(tái)驅(qū)動(dòng)程序包裝了平臺(tái)特定的低級(jí)硬件功能,例如SPI/I2C初始化和讀/寫、GPIO初始化和讀/寫、UART初始化和接收/發(fā)送、用戶特定的延遲、中斷等。
圖5.用戶應(yīng)用程序中的器件初始化結(jié)構(gòu)定義
圖6.訪問寄存器內(nèi)容
SPI平臺(tái)驅(qū)動(dòng)程序模塊的典型文件結(jié)構(gòu)如圖7所示。
使用平臺(tái)驅(qū)動(dòng)程序
平臺(tái)驅(qū)動(dòng)程序代碼通常包含在以C/C++編程語(yǔ)言編寫的三個(gè)源文件中。
1) spi.h:這是一個(gè)與平臺(tái)無關(guān)的文件,包含SPI功能所需的器件結(jié)構(gòu)和枚舉。此頭文件中定義的C編程接口沒有平臺(tái)依賴性。
初始化和器件結(jié)構(gòu)中聲明的所有參數(shù)對(duì)任何平臺(tái)上的SPI接口都是通用的。
器件初始化結(jié)構(gòu)中使用的void *extra參數(shù)允許用戶傳遞額外的參數(shù),這些參數(shù)可以是所用平臺(tái)特定的。
SPI驅(qū)動(dòng)程序結(jié)構(gòu)和SPI初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。SPI驅(qū)動(dòng)程序結(jié)構(gòu)是SPI初始化結(jié)構(gòu)的運(yùn)行時(shí)版本。
2) spi.cpp/.c:此文件包含spi.h文件中聲明的函數(shù)的實(shí)現(xiàn),這些函數(shù)用于初始化特定平臺(tái)的SPI外設(shè)以及讀/寫數(shù)據(jù)。廣義的“平臺(tái)”是指硬件微控制器(目標(biāo)器件)和軟件(如RTOS或Mbed-OS)的組合。此文件依賴于平臺(tái),移植到其他平臺(tái)時(shí)需要修改。
圖9詳細(xì)說明了Mbed平臺(tái)的SPI接口,并顯示了如何使用這些接口和器件初始化/驅(qū)動(dòng)程序結(jié)構(gòu)來初始化SPI和讀/寫數(shù)據(jù)。
圖7.SPI平臺(tái)驅(qū)動(dòng)程序代碼結(jié)構(gòu)
圖8.SPI初始化和驅(qū)動(dòng)程序結(jié)構(gòu)
圖9.SPI API或函數(shù)注意:增加的spi_init()和spi_write_and_read()代碼是節(jié)略代碼,
為清楚起見而省略了細(xì)節(jié)。
圖10.SPI額外的初始化和驅(qū)動(dòng)程序結(jié)構(gòu)
3) spi_extra.h:此文件包含其他器件結(jié)構(gòu)或枚舉,其特定于給定平臺(tái)。它允許用戶應(yīng)用程序代碼提供通用spi.h文件中未涉及的配置。例如,SPI引腳可能隨平臺(tái)而異,因此可以作為這些平臺(tái)特定的額外結(jié)構(gòu)的一部分添加。
移植平臺(tái)驅(qū)動(dòng)程序
平臺(tái)驅(qū)動(dòng)程序可以從一個(gè)平臺(tái)(微控制器)移植到另一個(gè)平臺(tái);若要移植,通常需要?jiǎng)?chuàng)建平臺(tái)特定的.cpp/.c和_extra.h文件。平臺(tái)驅(qū)動(dòng)程序駐留在微控制器單元供應(yīng)商提供的器件特定硬件抽象層(HAL)之上的一層。因此,為將平臺(tái)驅(qū)動(dòng)程序從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái),與調(diào)用供應(yīng)商提供的HAL中存在的函數(shù)或API相關(guān)的平臺(tái)驅(qū)動(dòng)程序代碼需要做一些細(xì)微改動(dòng)。
圖12區(qū)分了基于Mbed的SPI平臺(tái)驅(qū)動(dòng)程序和ADuCM410 SPI平臺(tái)驅(qū)動(dòng)程序。
ADI no-OS存儲(chǔ)庫(kù)和平臺(tái)驅(qū)動(dòng)程序的GitHub源代碼鏈接可在ADI公司W(wǎng)iki和GitHub頁(yè)面上找到。
為no-OS驅(qū)動(dòng)程序做貢獻(xiàn)
ADI no-OS驅(qū)動(dòng)程序已開源并托管在GitHub上。驅(qū)動(dòng)程序不僅支持精密轉(zhuǎn)換器,也支持許多其他ADI產(chǎn)品,如加速度計(jì)、收發(fā)器、光電器件等。任何熟悉源代碼的人都可以為這些驅(qū)動(dòng)程序做貢獻(xiàn),方式是提交變更和創(chuàng)建拉取請(qǐng)求來審核這些變更。
有許多示例項(xiàng)目可以在Linux和/或Windows環(huán)境中運(yùn)行。許多示例項(xiàng)目是用硬件描述性語(yǔ)言(HDL)開發(fā)的,以便在Xilinx?、Intel?等公司開發(fā)的FPGA以及由不同供應(yīng)商開發(fā)的目標(biāo)處理器上運(yùn)行。
如需無操作系統(tǒng)的系統(tǒng)的no-OS軟件驅(qū)動(dòng)程序(用C編寫),請(qǐng)?jiān)L問ADI公司no-OS GitHub存儲(chǔ)庫(kù)。
ADI公司W(wǎng)iki頁(yè)面提供了使用Mbed和ADuCMxxx平臺(tái)為精密轉(zhuǎn)換器開發(fā)的示例。
圖11.Mbed平臺(tái)特定的SPI初始化實(shí)現(xiàn)
圖12.平臺(tái)驅(qū)動(dòng)程序差異
作者簡(jiǎn)介
Mahesh Phalke是ADI公司位于印度班加羅爾的精密轉(zhuǎn)換器技術(shù)軟件部門的高級(jí)軟件工程師。2011年畢業(yè)于瀑內(nèi)大學(xué),獲電子工程學(xué)士學(xué)位。聯(lián)系方式:mahesh.phalke@analog.com。
關(guān)鍵詞: 驅(qū)動(dòng)程序 微控制器 操作系統(tǒng)
您可能也感興趣:
今日熱點(diǎn)
為您推薦
湖北省棉花“保險(xiǎn)+期貨”項(xiàng)目落地三縣市 5萬棉農(nóng)將成為受益者
新華保險(xiǎn)去年投資收益增長(zhǎng)23.5% 資產(chǎn)規(guī)模突破萬億元
更多
- 了解和使用no-OS及平臺(tái)驅(qū)動(dòng)程序
- 浙江自貿(mào)區(qū)形成制度創(chuàng)新成果335項(xiàng) 多項(xiàng)改革舉措走在全國(guó)前列
- C&K 推出透明、冷白光帶燈按鍵開關(guān)
- 企業(yè)引入自動(dòng)化以打造完善的客戶體驗(yàn)
- 西門子軟件擴(kuò)展“Xcelerator 即服務(wù)”解決方案 加快推進(jìn)...
- Mavenir獲得沃達(dá)豐葡萄牙公司授予的云原生融合分組核心網(wǎng)絡(luò)合同
- 意法半導(dǎo)體公布IFRS 2021年報(bào)和分紅提案
- 軟通動(dòng)力鴻蒙書籍《HarmonyOS應(yīng)用開發(fā)》正式出版
更多
- 無錫太湖新城5億元超短期融資券將兌付 利率2.57%
- 廈門建發(fā)集團(tuán)發(fā)行10億元中期票據(jù) 發(fā)行利率1.87%
- 中關(guān)村發(fā)展集團(tuán)20億公司債券將付息 利率3.74%
- 交銀施羅德雙輪動(dòng)債券暫停100.00萬元以上大額申購(gòu)
- 陜西旅游集團(tuán)6億元公司債將于4月25日付息 票面利率7.66%
- 中金:淺談“縮表”的機(jī)制與影響
- 香港特區(qū)政府將重啟零售綠債發(fā)行
- 評(píng)級(jí)展望負(fù)面,弘陽(yáng)地產(chǎn)關(guān)關(guān)難過關(guān)關(guān)過?
排行
- 廈門部署金磚創(chuàng)新基地建設(shè) 推進(jìn)更高水平對(duì)外開放
- 科技智庫(kù)需要進(jìn)一步加快智庫(kù)成果轉(zhuǎn)化
- 雄安設(shè)立兩年 290家京企“搶灘登陸”
- 女子拽男友公交車方向盤受審 涉嫌危害公共安全罪
- 成都實(shí)施創(chuàng)新驅(qū)動(dòng)發(fā)展戰(zhàn)略,將挖掘培養(yǎng)高素質(zhì)職工人才
- “人造雪粉”接觸眼睛或被誤食可能有危險(xiǎn)
- 這一年,我們?yōu)榭萍肌俺尺^的架”真不少
- “四成人不知電商法”該如何破題
- 監(jiān)督搭平臺(tái)信息都上網(wǎng) 打通精準(zhǔn)監(jiān)督‘最后一公里’
- 智能烹飪機(jī),選購(gòu)有講究
最近更新
- 無錫太湖新城5億元超短期融資券將兌付 利率2.57%
- 了解和使用no-OS及平臺(tái)驅(qū)動(dòng)程序
- 乘聯(lián)會(huì):3月乘用車市場(chǎng)零售同比下降10.5%
- ?最新!蘇州放松限售:二手房限售由5年改為3年
- 機(jī)構(gòu):多地進(jìn)行公積金政策調(diào)整 中央支持合理住房需求
- 磨合四年未果保利發(fā)展、合富輝煌合作生變
- 蔚來漲價(jià)股價(jià)跳水,董事長(zhǎng)李斌:扛不住了,迫不得己
- 滁州經(jīng)開區(qū)多渠道解決企業(yè)用工荒難題 助推企業(yè)發(fā)展壯大
- 無錫經(jīng)開區(qū)出臺(tái)十條措施助企紓困 涵蓋扶持、補(bǔ)貼等多方面
- 泰達(dá)宏利基金:通脹助長(zhǎng)加息預(yù)期,A股風(fēng)險(xiǎn)偏好暫降溫
- 市民對(duì)露營(yíng)的熱情逐漸升溫 消費(fèi)潛力帶來新商機(jī)
- 從探索到標(biāo)桿澳思?xì)W恩為板材走過的創(chuàng)新路
- 辰海集團(tuán)與騰訊云達(dá)成戰(zhàn)略合作,攜手打造出海企業(yè)合規(guī)服務(wù)新...
- 為愛戰(zhàn)疫 守“滬”寶寶,美贊臣中國(guó)全方位保障上海奶粉供應(yīng)
- 錢小樂:以“金融+場(chǎng)景”為抓手 提升數(shù)字化轉(zhuǎn)型質(zhì)效
- 浙江自貿(mào)區(qū)打造油品全產(chǎn)業(yè)鏈 積極推進(jìn)數(shù)字化改革
- 伊利金領(lǐng)冠首創(chuàng)“數(shù)字化三位一體”運(yùn)營(yíng)體系!以消費(fèi)者為中心...
- 亳州高新區(qū)持續(xù)創(chuàng)優(yōu)營(yíng)商環(huán)境 在創(chuàng)新機(jī)制上尋求突破
- 伴小笙新秀入局,萬億小吃賽道里的麻辣燙江湖
- 經(jīng)常手抖就是帕金森?
- 四川航空回應(yīng)一員工發(fā)布不當(dāng)言論:已停職處理
- 無癥狀感染通過什么傳染
- 報(bào)名≈零門檻 家庭教育指導(dǎo)師培訓(xùn)緣何“兇猛”生長(zhǎng)
- 無癥狀感染傳播厲害嗎
- 高通脹迫使新西蘭民眾捂緊腰包
- 鼻子癢眼睛癢?過敏季應(yīng)對(duì)“變態(tài)反應(yīng)”這樣做
- 警惕早期癥狀 早介入早治療
- 春季遠(yuǎn)離皮膚過敏找準(zhǔn)原因精準(zhǔn)施策
- 提高醫(yī)保公共服務(wù)能力 多措并舉便民利民
- 浙江自貿(mào)區(qū)形成制度創(chuàng)新成果335項(xiàng) 多項(xiàng)改革舉措走在全國(guó)前列
今日要聞
- 乘聯(lián)會(huì):3月乘用車市場(chǎng)零售同比下降10.5%
- 市民對(duì)露營(yíng)的熱情逐漸升溫 消費(fèi)潛力帶來新商機(jī)
- 無錫太湖新城5億元超短期融資券將兌付 利率2.57%
- 磨合四年未果保利發(fā)展、合富輝煌合作生變
- ?最新!蘇州放松限售:二手房限售由5年改為3年
- 蔚來漲價(jià)股價(jià)跳水,董事長(zhǎng)李斌:扛不住了,迫不得己
- 浙江自貿(mào)區(qū)打造油品全產(chǎn)業(yè)鏈 積極推進(jìn)數(shù)字化改革
- 了解和使用no-OS及平臺(tái)驅(qū)動(dòng)程序
- 亳州高新區(qū)持續(xù)創(chuàng)優(yōu)營(yíng)商環(huán)境 在創(chuàng)新機(jī)制上尋求突破
- 機(jī)構(gòu):多地進(jìn)行公積金政策調(diào)整 中央支持合理住房需求