快速發(fā)展的技術(shù)需要軟件支持(固件驅(qū)動(dòng)程序和代碼示例)來(lái)簡(jiǎn)化設(shè)計(jì)導(dǎo)入過(guò)程,。本文介紹如何利用no-OS(無(wú)操作系統(tǒng))驅(qū)動(dòng)程序和平臺(tái)驅(qū)動(dòng)程序來(lái)構(gòu)建ADI公司精密模數(shù)轉(zhuǎn)換器和數(shù)模轉(zhuǎn)換器的應(yīng)用固件,,這些器件在速度,、功耗,、尺寸和分辨率方面提供高水平的性能,。
ADI公司提供基于no-OS驅(qū)動(dòng)程序的嵌入式固件示例來(lái)支持精密變換器,。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ì)用于通用(或無(wú)特定)操作系統(tǒng),。該名稱(chēng)還意味著這些驅(qū)動(dòng)程序可以用在沒(méi)有任何OS支持的裸機(jī)(BareMetal)系統(tǒng)上。no-OS驅(qū)動(dòng)程序旨在為給定精密轉(zhuǎn)換器的數(shù)字接口訪問(wèn)提供高級(jí)API,。no-OS驅(qū)動(dòng)程序使用器件的這些API接口訪問(wèn),、配置、讀取,、寫(xiě)入數(shù)據(jù),,而無(wú)需知道寄存器地址(存儲(chǔ)器映射)及其內(nèi)容。
no-OS驅(qū)動(dòng)程序利用平臺(tái)驅(qū)動(dòng)程序?qū)觼?lái)支持跨多個(gè)硬件/軟件平臺(tái)復(fù)用相同的no-OS驅(qū)動(dòng)程序,,使固件高度可移植,。平臺(tái)驅(qū)動(dòng)程序?qū)拥氖褂脤o-OS驅(qū)動(dòng)程序隔絕開(kāi)來(lái),后者無(wú)需知道平臺(tái)特定接口(如SPI,、I2C,、GPIO等)的低級(jí)細(xì)節(jié),因此no-OS驅(qū)動(dòng)程序不需要修改就能跨多個(gè)平臺(tái)復(fù)用,。
精密轉(zhuǎn)換器的no-OS驅(qū)動(dòng)程序代碼通常包含在兩個(gè)以C編程語(yǔ)言編寫(xiě)的源文件中:adxxxx.c和adxxxx.h,,其中xxxx代表器件名稱(chēng)(例如AD7606、AD7124等),。器件頭文件(adxxxx.h)包含器件特定結(jié)構(gòu),、枚舉、寄存器地址和位掩碼的公共編程接口,,將此文件包含到所需的源文件中便可使用這些公開(kāi)訪問(wèn)接口,。器件源文件(adxxxx.c)包含接口的實(shí)現(xiàn),用于初始化和移除器件,、讀/寫(xiě)器件寄存器,、從器件讀取數(shù)據(jù)、獲取/設(shè)置器件特定參數(shù)等,。
典型的no-OS驅(qū)動(dòng)程序圍繞一組常見(jiàn)功能來(lái)構(gòu)建:
?器件特定寄存器地址,、位掩碼宏、器件配置枚舉,、讀/寫(xiě)器件特定參數(shù)(如過(guò)采樣,、增益、基準(zhǔn)電壓等)的結(jié)構(gòu)的聲明,。
?通過(guò)no-OS驅(qū)動(dòng)程序的器件初始化/移除函數(shù)以及器件特定的初始化和驅(qū)動(dòng)程序結(jié)構(gòu)與描述符初始化物理器件/解除器件初始化。
?使用器件寄存器讀/寫(xiě)函數(shù)訪問(wèn)器件存儲(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以配置或訪問(wèn)器件參數(shù)。具體情況如圖3所示,。
圖3中顯示的adxxxx_config結(jié)構(gòu)允許用戶選擇多路復(fù)用器通道并為其設(shè)置過(guò)采樣率,。此結(jié)構(gòu)的成員(afe_mux_channel和oversampling)是存在于同一頭文件中的枚舉,其包含這兩個(gè)字段的所有可能值的數(shù)字常量,,用戶可以選擇,。
adxxxx.c文件中定義的adxxxx_set_adc_config()函數(shù)通過(guò)配置結(jié)構(gòu)獲取用戶傳遞的配置/參數(shù),并進(jìn)一步調(diào)用adxxxx_spi_reg_write()函數(shù),,通過(guò)數(shù)字接口(在上例中是SPI)將數(shù)據(jù)寫(xiě)入ADXXXX_REG_CONFIG器件寄存器,。
使用no-OS驅(qū)動(dòng)程序結(jié)構(gòu)和初始化函數(shù)初始化器件:
用戶可以通過(guò)no-OS驅(qū)動(dòng)程序器件特定的adxxx_read/write()函數(shù)訪問(wèn)器件寄存器內(nèi)容(例如產(chǎn)品ID、暫存區(qū)值,、OSR等),。
大多數(shù)情況下,用戶不會(huì)直接使用寄存器訪問(wèn)函數(shù),。器件特定的函數(shù)通過(guò)這些寄存器訪問(wèn)函數(shù)(如adxxxx_spi_reg_read/write())來(lái)調(diào)用,。如果可能,建議使用器件配置和狀態(tài)API來(lái)訪問(wèn)器件存儲(chǔ)器映射,,而不要使用直接寄存器訪問(wèn)函數(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初始化和讀/寫(xiě),、GPIO初始化和讀/寫(xiě)、UART初始化和接收/發(fā)送,、用戶特定的延遲,、中斷等。
作者簡(jiǎn)介
Mahesh Phalke是ADI公司位于印度班加羅爾的精密轉(zhuǎn)換器技術(shù)軟件部門(mén)的高級(jí)軟件工程師,。2011年畢業(yè)于瀑內(nèi)大學(xué),,獲電子工程學(xué)士學(xué)位。