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

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

了解和使用no-OS及平臺驅(qū)動程序

發(fā)布時間:2022-04-20 來源:ADI,Mahesh Phalke 責(zé)任編輯:wenwei

【導(dǎo)讀】快速發(fā)展的技術(shù)需要軟件支持(固件驅(qū)動程序和代碼示例)來簡化設(shè)計導(dǎo)入過程。本文介紹如何利用no-OS(無操作系統(tǒng))驅(qū)動程序和平臺驅(qū)動程序來構(gòu)建ADI公司精密模數(shù)轉(zhuǎn)換器和數(shù)模轉(zhuǎn)換器的應(yīng)用固件,這些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。


ADI公司提供基于no-OS驅(qū)動程序的嵌入式固件示例來支持精密變換器。no-OS驅(qū)動程序負(fù)責(zé)器件配置、轉(zhuǎn)換器數(shù)據(jù)采集、執(zhí)行校準(zhǔn)等,而基于no-OS驅(qū)動程序的固件示例則便于將數(shù)據(jù)傳輸?shù)街鳈C(jī)進(jìn)行顯示、存儲和進(jìn)一步處理。


no-OS和平臺驅(qū)動程序簡介


顧名思義,no-OS驅(qū)動程序設(shè)計用于通用(或無特定)操作系統(tǒng)。該名稱還意味著這些驅(qū)動程序可以用在沒有任何OS支持的裸機(jī)(BareMetal)系統(tǒng)上。no-OS驅(qū)動程序旨在為給定精密轉(zhuǎn)換器的數(shù)字接口訪問提供高級API。no-OS驅(qū)動程序使用器件的這些API接口訪問、配置、讀取、寫入數(shù)據(jù),而無需知道寄存器地址(存儲器映射)及其內(nèi)容。


no-OS驅(qū)動程序利用平臺驅(qū)動程序?qū)觼碇С挚缍鄠€硬件/軟件平臺復(fù)用相同的no-OS驅(qū)動程序,使固件高度可移植。平臺驅(qū)動程序?qū)拥氖褂脤o-OS驅(qū)動程序隔絕開來,后者無需知道平臺特定接口(如SPI、I2C、GPIO等)的低級細(xì)節(jié),因此no-OS驅(qū)動程序不需要修改就能跨多個平臺復(fù)用。


1.jpg

圖1.精密轉(zhuǎn)換器固件協(xié)議棧


使用no-OS驅(qū)動程序


圖2顯示了no-OS驅(qū)動程序的典型代碼結(jié)構(gòu)。


2.jpg

圖2.no-OS驅(qū)動程序代碼結(jié)構(gòu)


3.jpg

圖3.器件配置枚舉、結(jié)構(gòu)和API


精密轉(zhuǎn)換器的no-OS驅(qū)動程序代碼通常包含在兩個以C編程語言編寫的源文件中:adxxxx.c和adxxxx.h,其中xxxx代表器件名稱(例如AD7606、AD7124等)。器件頭文件(adxxxx.h)包含器件特定結(jié)構(gòu)、枚舉、寄存器地址和位掩碼的公共編程接口,將此文件包含到所需的源文件中便可使用這些公開訪問接口。器件源文件(adxxxx.c)包含接口的實現(xiàn),用于初始化和移除器件、讀/寫器件寄存器、從器件讀取數(shù)據(jù)、獲取/設(shè)置器件特定參數(shù)等。


典型的no-OS驅(qū)動程序圍繞一組常見功能來構(gòu)建:


器件特定寄存器地址、位掩碼宏、器件配置枚舉、讀/寫器件特定參數(shù)(如過采樣、增益、基準(zhǔn)電壓等)的結(jié)構(gòu)的聲明。


通過no-OS驅(qū)動程序的器件初始化/移除函數(shù)以及器件特定的初始化和驅(qū)動程序結(jié)構(gòu)與描述符初始化物理器件/解除器件初始化。


使用器件寄存器讀/寫函數(shù)訪問器件存儲器映射或寄存器詳細(xì)信息,例如adxxxx_read_register()或adxxxx_write_register()。


no-OS驅(qū)動程序代碼使用


使用器件特定地址、位掩碼、參數(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)是存在于同一頭文件中的枚舉,其包含這兩個字段的所有可能值的數(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ū)動程序結(jié)構(gòu)和初始化函數(shù)初始化器件:


4.jpg

圖4.器件初始化和驅(qū)動程序結(jié)構(gòu)的聲明


除了器件配置枚舉和結(jié)構(gòu)之外,no-OS驅(qū)動程序還提供以下兩個結(jié)構(gòu):


器件初始化結(jié)構(gòu)。


設(shè)備驅(qū)動程序結(jié)構(gòu)。


器件初始化結(jié)構(gòu)允許用戶在用戶應(yīng)用程序代碼中定義器件特定的參數(shù)和配置。初始化結(jié)構(gòu)包含其他器件特定的參數(shù)結(jié)構(gòu)和枚舉的成員。圖5顯示了器件初始化結(jié)構(gòu)的定義。


器件驅(qū)動程序結(jié)構(gòu)通過器件初始化函數(shù)adxxxx_init()加載器件初始化參數(shù)。器件驅(qū)動程序結(jié)構(gòu)是在運(yùn)行時(動態(tài))從堆空間中分配內(nèi)存。器件驅(qū)動程序結(jié)構(gòu)和器件初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。器件驅(qū)動程序結(jié)構(gòu)是器件初始化結(jié)構(gòu)的運(yùn)行時版本。


以下步驟說明典型的器件初始化函數(shù)和初始化流程:


第1步:在應(yīng)用程序中創(chuàng)建器件初始化結(jié)構(gòu)的定義(或?qū)嵗ɡ鐂truct adxxxx_init_params),以初始化用戶特定的器件參數(shù)和平臺相關(guān)的驅(qū)動程序參數(shù)。參數(shù)在編譯期間定義。


注意:初始化結(jié)構(gòu)中定義的參數(shù)因器件而異。


5.jpg


第2步:在應(yīng)用程序代碼中創(chuàng)建器件驅(qū)動程序結(jié)構(gòu)的指針實例(變量)。


用戶應(yīng)用程序需要創(chuàng)建器件驅(qū)動程序結(jié)構(gòu)的單個指針實例。將此實例傳遞給所有no-OS驅(qū)動程序API/函數(shù)以訪問器件特定參數(shù)。應(yīng)用程序代碼中定義的此指針實例指向堆中動態(tài)分配的內(nèi)存,這是通過no-OS驅(qū)動程序中定義的器件初始化函數(shù)(如adxxxx_init())完成的。


6.jpg


第3步:調(diào)用器件初始化函數(shù)以初始化器件和其他平臺特定的外設(shè)。


7.jpg


no-OS驅(qū)動程序中定義的adxxxx_init()函數(shù)用adxxx_init_param結(jié)構(gòu)傳遞的用戶特定參數(shù)初始化器件。器件驅(qū)動程序結(jié)構(gòu)的指針實例和器件初始化結(jié)構(gòu)的實例作為兩個參數(shù)傳遞給此初始化函數(shù)。用戶應(yīng)用程序代碼可以多次調(diào)用adxxxx_init()函數(shù),只要調(diào)用初始化函數(shù)之后再調(diào)用器件移除函數(shù)來平衡。


通過器件寄存器讀/寫函數(shù)訪問存儲器映射(寄存器內(nèi)容)如圖6所示


用戶可以通過no-OS驅(qū)動程序器件特定的adxxx_read/write()函數(shù)訪問器件寄存器內(nèi)容(例如產(chǎn)品ID、暫存區(qū)值、OSR等)。


大多數(shù)情況下,用戶不會直接使用寄存器訪問函數(shù)。器件特定的函數(shù)通過這些寄存器訪問函數(shù)(如adxxxx_spi_reg_read/write())來調(diào)用。如果可能,建議使用器件配置和狀態(tài)API來訪問器件存儲器映射,而不要使用直接寄存器訪問函數(shù),因為這樣能確保器件驅(qū)動程序結(jié)構(gòu)與器件中的配置保持同步。


平臺驅(qū)動程序


平臺驅(qū)動程序是包裝平臺特定API的硬件抽象層(HAL)之一。它們由no-OS器件驅(qū)動程序或用戶應(yīng)用程序代碼調(diào)用,使后者可以獨(dú)立于底層硬件和軟件平臺。平臺驅(qū)動程序包裝了平臺特定的低級硬件功能,例如SPI/I2C初始化和讀/寫、GPIO初始化和讀/寫、UART初始化和接收/發(fā)送、用戶特定的延遲、中斷等。


8.jpg

圖5.用戶應(yīng)用程序中的器件初始化結(jié)構(gòu)定義


9.jpg

圖6.訪問寄存器內(nèi)容


SPI平臺驅(qū)動程序模塊的典型文件結(jié)構(gòu)如圖7所示。


使用平臺驅(qū)動程序


平臺驅(qū)動程序代碼通常包含在以C/C++編程語言編寫的三個源文件中。


1) spi.h:這是一個與平臺無關(guān)的文件,包含SPI功能所需的器件結(jié)構(gòu)和枚舉。此頭文件中定義的C編程接口沒有平臺依賴性。


初始化和器件結(jié)構(gòu)中聲明的所有參數(shù)對任何平臺上的SPI接口都是通用的。


器件初始化結(jié)構(gòu)中使用的void *extra參數(shù)允許用戶傳遞額外的參數(shù),這些參數(shù)可以是所用平臺特定的。


SPI驅(qū)動程序結(jié)構(gòu)和SPI初始化結(jié)構(gòu)中聲明的參數(shù)幾乎完全相同。SPI驅(qū)動程序結(jié)構(gòu)是SPI初始化結(jié)構(gòu)的運(yùn)行時版本。


2) spi.cpp/.c:此文件包含spi.h文件中聲明的函數(shù)的實現(xiàn),這些函數(shù)用于初始化特定平臺的SPI外設(shè)以及讀/寫數(shù)據(jù)。廣義的“平臺”是指硬件微控制器(目標(biāo)器件)和軟件(如RTOS或Mbed-OS)的組合。此文件依賴于平臺,移植到其他平臺時需要修改。


圖9詳細(xì)說明了Mbed平臺的SPI接口,并顯示了如何使用這些接口和器件初始化/驅(qū)動程序結(jié)構(gòu)來初始化SPI和讀/寫數(shù)據(jù)。


10.jpg

圖7.SPI平臺驅(qū)動程序代碼結(jié)構(gòu)


11.jpg

圖8.SPI初始化和驅(qū)動程序結(jié)構(gòu)


12.jpg

圖9.SPI API或函數(shù)注意:增加的spi_init()和spi_write_and_read()代碼是節(jié)略代碼,


為清楚起見而省略了細(xì)節(jié)。


13.jpg

圖10.SPI額外的初始化和驅(qū)動程序結(jié)構(gòu)


3) spi_extra.h:此文件包含其他器件結(jié)構(gòu)或枚舉,其特定于給定平臺。它允許用戶應(yīng)用程序代碼提供通用spi.h文件中未涉及的配置。例如,SPI引腳可能隨平臺而異,因此可以作為這些平臺特定的額外結(jié)構(gòu)的一部分添加。


移植平臺驅(qū)動程序


平臺驅(qū)動程序可以從一個平臺(微控制器)移植到另一個平臺;若要移植,通常需要創(chuàng)建平臺特定的.cpp/.c和_extra.h文件。平臺驅(qū)動程序駐留在微控制器單元供應(yīng)商提供的器件特定硬件抽象層(HAL)之上的一層。因此,為將平臺驅(qū)動程序從一個平臺移植到另一個平臺,與調(diào)用供應(yīng)商提供的HAL中存在的函數(shù)或API相關(guān)的平臺驅(qū)動程序代碼需要做一些細(xì)微改動。


圖12區(qū)分了基于Mbed的SPI平臺驅(qū)動程序和ADuCM410 SPI平臺驅(qū)動程序。


ADI no-OS存儲庫和平臺驅(qū)動程序的GitHub源代碼鏈接可在ADI公司W(wǎng)iki和GitHub頁面上找到。


為no-OS驅(qū)動程序做貢獻(xiàn)


ADI no-OS驅(qū)動程序已開源并托管在GitHub上。驅(qū)動程序不僅支持精密轉(zhuǎn)換器,也支持許多其他ADI產(chǎn)品,如加速度計、收發(fā)器、光電器件等。任何熟悉源代碼的人都可以為這些驅(qū)動程序做貢獻(xiàn),方式是提交變更和創(chuàng)建拉取請求來審核這些變更。


有許多示例項目可以在Linux和/或Windows環(huán)境中運(yùn)行。許多示例項目是用硬件描述性語言(HDL)開發(fā)的,以便在Xilinx?、Intel?等公司開發(fā)的FPGA以及由不同供應(yīng)商開發(fā)的目標(biāo)處理器上運(yùn)行。


如需無操作系統(tǒng)的系統(tǒng)的no-OS軟件驅(qū)動程序(用C編寫),請訪問ADI公司no-OS GitHub存儲庫。


ADI公司W(wǎng)iki頁面提供了使用Mbed和ADuCMxxx平臺為精密轉(zhuǎn)換器開發(fā)的示例。


14.jpg

圖11.Mbed平臺特定的SPI初始化實現(xiàn)


15.jpg

圖12.平臺驅(qū)動程序差異


作者簡介


Mahesh Phalke是ADI公司位于印度班加羅爾的精密轉(zhuǎn)換器技術(shù)軟件部門的高級軟件工程師。2011年畢業(yè)于瀑內(nèi)大學(xué),獲電子工程學(xué)士學(xué)位。聯(lián)系方式:mahesh.phalke@analog.com。



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


推薦閱讀:


MPS首款消費(fèi)類PD協(xié)議芯片MP5031

開源、可重復(fù)使用的軟件堆棧助力實現(xiàn)實時處理和CbM算法開發(fā)

衛(wèi)星運(yùn)行狀況:航天級IC如何改進(jìn)遙測電路設(shè)計

用于狀態(tài)監(jiān)控的高保真振動采集平臺

氮化鎵和碳化硅的區(qū)別在哪里?這篇指南送給你

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

關(guān)閉

?

關(guān)閉

久久午夜影院,91精品国产调教在线观看,日韩午夜免费,伊人久久大香线蕉av不卡
福利欧美精品在线| 日韩精品免费一区二区夜夜嗨 | 国产美女久久| 亚洲精品伊人| 日韩在线网址| 欧美亚洲三级| 精品一区二区三区视频在线播放| 国产欧美在线| 国产a亚洲精品| 精品国产a一区二区三区v免费| 麻豆国产欧美一区二区三区| 国产一区二区精品久| 91精品韩国| 国模 一区 二区 三区| 婷婷激情久久| 蜜桃久久av一区| 欧美成人精品一级| 久久久777| 欧美日韩亚洲国产精品| 98精品视频| 免费在线看一区| 久久精品午夜| 亚洲欧美激情诱惑| 麻豆国产欧美一区二区三区| 欧美日韩免费看片| 婷婷综合电影| 韩国久久久久久| 日本中文字幕一区二区| 超碰在线99| 国产综合婷婷| 麻豆久久久久久久| 玖玖精品视频| 香蕉成人av| 国产精品嫩草影院在线看| 99久久婷婷| 丰满少妇一区| 日韩一区二区三区四区五区| 中文字幕人成乱码在线观看| 亚洲精品无播放器在线播放| 久久婷婷丁香| 精品国产亚洲一区二区三区| 亚洲欧美日韩国产综合精品二区| 国产成人精品福利| 日韩精品视频中文字幕| 国内精品亚洲| 久久国际精品| 日韩高清在线一区| 亚洲精品福利| 免费观看在线综合| 五月天综合网站| 亚洲成av人片一区二区密柚| 老司机精品视频网| 欧美一级久久| 日韩精品免费视频人成| 日韩专区在线视频| 亚洲女同中文字幕| 国产伊人精品| 欧美日韩三区| 在线综合欧美| 快播电影网址老女人久久| 国产精品黑丝在线播放| 国产精品chinese| 精品视频在线观看网站| 日韩有码av| 国产精品亲子伦av一区二区三区 | 蜜桃av一区| 午夜在线精品偷拍| 日韩视频在线一区二区三区 | 亚洲精品精选| 日本91福利区| 久久中文字幕一区二区三区| а√天堂8资源中文在线| 日韩中文影院| 黄色不卡一区| 亚洲精品高潮| 国产一区二区三区不卡视频网站 | 久久精品av麻豆的观看方式| 亚洲字幕久久| 国产精选一区| 国模精品一区| 99pao成人国产永久免费视频| 在线综合亚洲| 久久不见久久见中文字幕免费| 国产在线看片免费视频在线观看| 日韩毛片视频| 综合国产在线| 成人在线视频区| 久久亚洲色图| 久久久国产精品网站| 国产成人免费精品| 性欧美xxxx免费岛国不卡电影| 欧美日韩国产探花| 日韩中文在线电影| 亚洲婷婷免费| 日韩精品一区二区三区中文| 色乱码一区二区三区网站| 亚洲欧美日韩国产一区| 你懂的亚洲视频| 亚洲少妇在线| 国产夫妻在线| 国产午夜一区| 综合在线一区| 欧美日韩国产欧| 久久av免费| 一区二区三区网站| 欧美freesex黑人又粗又大| 欧美精品观看| 日韩1区2区3区| 日韩亚洲在线| 蜜桃成人av| 日韩精品久久久久久久电影99爱| 国产精品白浆| 日韩高清不卡一区| 蜜臀精品一区二区三区在线观看 | 亚洲最新av| 欧美不卡视频| xxxxx性欧美特大| 国产一区二区视频在线看| 日韩中文字幕无砖| 亚洲免费成人av在线| 日韩午夜av| 激情综合网址| 夜夜嗨网站十八久久| 婷婷久久一区| 欧美日韩国产传媒| 亚洲精品91| 激情五月综合| 99精品网站| 亚洲v在线看| 在线精品视频在线观看高清| 精精国产xxxx视频在线播放 | 色综合视频一区二区三区日韩| 免费成人在线观看| 日韩不卡在线观看日韩不卡视频| 日韩一级精品| 日韩极品在线观看| 欧美成人aaa| sm捆绑调教国产免费网站在线观看 | 久久蜜桃av| 麻豆精品网站| 国产精品嫩草影院在线看| 美女精品视频在线| 久久男人av资源站| 欧美一级精品| 日本欧洲一区二区| 久久av网址| 久久久久久黄| 亚洲精品大片| 久久久免费人体| 久久久久久免费视频| 五月精品视频| 国产午夜久久av| 精品国产18久久久久久二百| 黑丝一区二区三区| 国产探花一区二区| 九九精品调教| 欧美在线日韩| 黑丝一区二区三区| 国产精品观看| 最新国产拍偷乱拍精品| 美日韩一区二区三区| 99国产精品久久久久久久 | 在线亚洲精品| 国内精品麻豆美女在线播放视频| 99久久夜色精品国产亚洲1000部| 亚洲一区二区动漫| 国产在线一区不卡| 日韩视频1区| 好看的av在线不卡观看| 大香伊人久久精品一区二区| 免费看欧美美女黄的网站| 中文在线资源| 精品在线网站观看| 亚洲天堂av资源在线观看| 色爱av综合网| 精品国产欧美| 国产精品hd| 国产日本久久| 国产日韩一区二区三区在线| 亚洲二区视频| 国产成人精品亚洲线观看 | 午夜精品影院| 欧美成人基地| 国产精品毛片久久| 精品国产黄a∨片高清在线| 欧美日韩一视频区二区| 伊人精品久久| 亚洲精品一级| 亚洲aa在线| 日本欧美一区二区在线观看| 久久av一区| 蜜桃视频一区二区三区在线观看| 久久国产欧美| 99久久99久久精品国产片果冰| 蜜臀久久精品| 欧美二三四区| 欧美日韩高清| 伊人久久一区| 欧美欧美黄在线二区| 美女免费视频一区|