亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        了解和使用no-OS及平臺(tái)驅(qū)動(dòng)程序

        2022-04-09 19:01:03MaheshPhalke
        電子產(chǎn)品世界 2022年3期

        Mahesh Phalke

        摘要:快速發(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(亞德諾半導(dǎo)體)公司精密模數(shù)轉(zhuǎn)換器和數(shù)模轉(zhuǎn)換器的應(yīng)用固件,這些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。

        關(guān)鍵詞:ADI;模數(shù)轉(zhuǎn)換器;數(shù)模轉(zhuǎn)換器;no-OS

        ADI公司提供基于no-OS驅(qū)動(dòng)程序的嵌入式固件示例來(lái)支持精密轉(zhuǎn)換器。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)一步處理。

        1??? no-OS和平臺(tái)驅(qū)動(dòng)程序簡(jiǎn)介

        顧名思義,no-OS驅(qū)動(dòng)程序設(shè)計(jì)用于通用(或無(wú)特定)操作系統(tǒng)。該名稱還意味著這些驅(qū)動(dòng)程序可以用在沒(méi)有任何OS支持的裸機(jī)(BareMetal,亦稱裸金屬主機(jī))系統(tǒng)上。no-OS驅(qū)動(dòng)程序旨在為給定精密轉(zhuǎn)換器的數(shù)字接口訪問(wèn)提供高級(jí)API(Application Programming Interface,應(yīng)用程序接口),如圖1所示。no-OS驅(qū)動(dòng)程序使用器件的這些API接口訪問(wèn)、配置、讀取、寫入數(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(Serial Peripheral Interface,串行外設(shè)接口)、IC(Inter-Integrated Circuit,集成電路總線)、GPIO(通用輸入輸出)等)的低級(jí)細(xì)節(jié),因此no-OS驅(qū)動(dòng)程序不需要修改就能跨多個(gè)平臺(tái)復(fù)用。

        2??? 使用no-OS驅(qū)動(dòng)程序

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

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

        典型的no-OS驅(qū)動(dòng)程序圍繞一組常見(jiàn)功能來(lái)構(gòu)建。

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

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

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

        3??? no-OS驅(qū)動(dòng)程序代碼使用

        1)使用器件特定地址、位掩碼、參數(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ù)寫入ADXXXX_REG_CONFIG器件寄存器。

        2)使用no-OS驅(qū)動(dòng)程序結(jié)構(gòu)和初始化函數(shù)初始化器件

        除了器件配置枚舉和結(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)通過(guò)器件初始化函數(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í)版本。

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

        第1步:在應(yīng)用程序中創(chuàng)建器件初始化結(jié)構(gòu)的定義(或?qū)嵗ɡ鐂truct 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ù)以訪問(wèn)器件特定參數(shù)。應(yīng)用程序代碼中定義的此指針實(shí)例指向堆中動(dòng)態(tài)分配的內(nèi)存,這是通過(guò)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ù)來(lái)平衡。

        3)通過(guò)器件寄存器讀/寫函數(shù)訪問(wèn)存儲(chǔ)器映射(寄存器內(nèi)容)

        用戶可以通過(guò)no-OS驅(qū)動(dòng)程序器件特定的adxxx read/write()函數(shù)訪問(wèn)器件寄存器內(nèi)容(例如產(chǎn)品ID、暫存區(qū)值、OSR等),如圖6所示。

        大多數(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)與器件中的配置保持同步。

        4??? 平臺(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/IC初始化和讀/寫、GPIO初始化和讀/寫、UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)初始化和接收/發(fā)送、用戶特定的延遲、中斷等。

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

        5??? 使用平臺(tái)驅(qū)動(dòng)程序

        平臺(tái)驅(qū)動(dòng)程序代碼通常包含在以C/C++編程語(yǔ)言編寫的三個(gè)源文件中。

        1)spi.h:這是一個(gè)與平臺(tái)無(wú)關(guān)的文件,包含SPI功能所需的器件結(jié)構(gòu)和枚舉。此頭文件中定義的C編程接口沒(méi)有平臺(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ì)說(shuō)明了Mbed平臺(tái)的SPI接口,并顯示了如何使用這些接口和器件初始化/ 驅(qū)動(dòng)程序結(jié)構(gòu)來(lái)初始化SPI和讀/寫數(shù)據(jù)。

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

        6??? 移植平臺(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è)面上找到。

        7??? 為no-OS驅(qū)動(dòng)程序做貢獻(xiàn)

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

        有許多示例項(xiàng)目可以在Linux和/或Windows環(huán)境中運(yùn)行。許多示例項(xiàng)目是用硬件描述性語(yǔ)言(HDL)開(kāi)發(fā)的,以便在Xilinx、Intel等公司開(kāi)發(fā)的FPGA(Field Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)以及由不同供應(yīng)商開(kāi)發(fā)的目標(biāo)處理器上運(yùn)行。

        少妇高潮呻吟求饶视频网站| 国产一区二区三区四区五区vm| 伊人久久大香线蕉在观看| 风韵丰满妇啪啪区老老熟女杏吧| 国产三级不卡一区不卡二区在线| 成人做受黄大片| 极品粉嫩嫩模大尺度无码| 亚洲在战AV极品无码| 91精品人妻一区二区三区水蜜桃| 97人人模人人爽人人喊网| 蜜桃av噜噜一区二区三区| 亚洲国产字幕| 亚洲视频在线观看第一页| 精品亚洲国产成人| 精品国产福利一区二区在线| 日本一区二区在线播放观看| 大香蕉av一区二区三区| 极品少妇被猛的白浆直喷白浆| 欧美自拍丝袜亚洲| 男女午夜视频一区二区三区| 亚洲偷自拍国综合第一页| 美女又色又爽视频免费| 国产人成亚洲第一网站在线播放 | 国产精品久久久亚洲| 精品国产精品久久一区免费式| 四虎国产精品成人影院| 一区二区三区中文字幕在线播放 | 亚洲色AV性色在线观看| 人妻熟女中文字幕av| 高h小月被几个老头调教| 国产精品天天狠天天看| 久久久久AV成人无码网站| 亚洲中文字幕九色日本| 亚洲日产一线二线三线精华液 | 国产成人一区二区三区免费观看| 国产一区二区在线中文字幕| 少妇伦子伦精品无吗| 国产黄页网站在线观看免费视频 | 欧美成人在线A免费观看| 色综合中文字幕综合网| 国产av国片精品jk制服|