国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

no-OS及平臺驅動程序的了解和使用

微云疏影 ? 來源:ADI ? 作者:ADI ? 2022-04-12 14:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

快速發展的技術需要軟件支持(固件驅動程序和代碼示例)來簡化設計導入過程。本文介紹如何利用no-OS(無操作系統)驅動程序和平臺驅動程序來構建ADI公司精密模數轉換器數模轉換器的應用固件,這些器件在速度、功耗、尺寸和分辨率方面提供高水平的性能。

ADI公司提供基于no-OS驅動程序的嵌入式固件示例來支持精密變換器。no-OS驅動程序負責器件配置、轉換器數據采集、執行校準等,而基于no-OS驅動程序的固件示例則便于將數據傳輸到主機進行顯示、存儲和進一步處理。

no-OS和平臺驅動程序簡介

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

no-OS驅動程序利用平臺驅動程序層來支持跨多個硬件/軟件平臺復用相同的no-OS驅動程序,使固件高度可移植。平臺驅動程序層的使用將no-OS驅動程序隔絕開來,后者無需知道平臺特定接口(如SPI、I2C、GPIO等)的低級細節,因此no-OS驅動程序不需要修改就能跨多個平臺復用。

poYBAGJVHGWAKAETAABC-YEmmMs388.jpg

圖1.精密轉換器固件協議棧

使用no-OS驅動程序

圖2顯示了no-OS驅動程序的典型代碼結構。

pYYBAGJVHGWAKKmoAABOxRt7JJA320.jpg

圖2.no-OS驅動程序代碼結構

poYBAGJVHGWAb1iuAABNRtCvkX8998.jpg

圖3.器件配置枚舉、結構和API

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

典型的no-OS驅動程序圍繞一組常見功能來構建:

?器件特定寄存器地址、位掩碼宏、器件配置枚舉、讀/寫器件特定參數(如過采樣、增益、基準電壓等)的結構的聲明。

?通過no-OS驅動程序的器件初始化/移除函數以及器件特定的初始化和驅動程序結構與描述符初始化物理器件/解除器件初始化。

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

no-OS驅動程序代碼使用

使用器件特定地址、位掩碼、參數配置枚舉和結構:

如前所述,adxxxx.h頭文件包含所有器件特定枚舉和結構的聲明,這些枚舉和結構被傳遞到器件特定的函數或API以配置或訪問器件參數。具體情況如圖3所示。

圖3中顯示的adxxxx_config結構允許用戶選擇多路復用器通道并為其設置過采樣率。此結構的成員(afe_mux_channel和oversampling)是存在于同一頭文件中的枚舉,其包含這兩個字段的所有可能值的數字常量,用戶可以選擇。

adxxxx.c文件中定義的adxxxx_set_adc_config()函數通過配置結構獲取用戶傳遞的配置/參數,并進一步調用adxxxx_spi_reg_write()函數,通過數字接口(在上例中是SPI)將數據寫入ADXXXX_REG_CONFIG器件寄存器。

使用no-OS驅動程序結構和初始化函數初始化器件:

pYYBAGJVHGWAZx2tAABL2bYDErw095.jpg

圖4.器件初始化和驅動程序結構的聲明

除了器件配置枚舉和結構之外,no-OS驅動程序還提供以下兩個結構:

?器件初始化結構。

?設備驅動程序結構。

器件初始化結構允許用戶在用戶應用程序代碼中定義器件特定的參數和配置。初始化結構包含其他器件特定的參數結構和枚舉的成員。圖5顯示了器件初始化結構的定義。

器件驅動程序結構通過器件初始化函數adxxxx_init()加載器件初始化參數。器件驅動程序結構是在運行時(動態)從堆空間中分配內存。器件驅動程序結構和器件初始化結構中聲明的參數幾乎完全相同。器件驅動程序結構是器件初始化結構的運行時版本。

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

?第1步:在應用程序中創建器件初始化結構的定義(或實例)(例如struct adxxxx_init_params),以初始化用戶特定的器件參數和平臺相關的驅動程序參數。參數在編譯期間定義。

注意:初始化結構中定義的參數因器件而異。

poYBAGJVHGWAcvjwAAAQnW7dm7I922.jpg

?第2步:在應用程序代碼中創建器件驅動程序結構的指針實例(變量)。

用戶應用程序需要創建器件驅動程序結構的單個指針實例。將此實例傳遞給所有no-OS驅動程序API/函數以訪問器件特定參數。應用程序代碼中定義的此指針實例指向堆中動態分配的內存,這是通過no-OS驅動程序中定義的器件初始化函數(如adxxxx_init())完成的。

pYYBAGJVHGWAWlyaAAASbpghT_4661.jpg

?第3步:調用器件初始化函數以初始化器件和其他平臺特定的外設。

pYYBAGJVHGWAJUOJAAAsT4pHePE463.jpg

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

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

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

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

平臺驅動程序

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

poYBAGJVHGWAHsrcAABAc03-L9Q171.jpg

圖5.用戶應用程序中的器件初始化結構定義

pYYBAGJVHGWANg5NAAA3XhKTKaU502.jpg

圖6.訪問寄存器內容

SPI平臺驅動程序模塊的典型文件結構如圖7所示。

使用平臺驅動程序

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

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

初始化和器件結構中聲明的所有參數對任何平臺上的SPI接口都是通用的。

器件初始化結構中使用的void *extra參數允許用戶傳遞額外的參數,這些參數可以是所用平臺特定的。

SPI驅動程序結構和SPI初始化結構中聲明的參數幾乎完全相同。SPI驅動程序結構是SPI初始化結構的運行時版本。

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

圖9詳細說明了Mbed平臺的SPI接口,并顯示了如何使用這些接口和器件初始化/驅動程序結構來初始化SPI和讀/寫數據。

poYBAGJVHGWAfkn2AAA5o9vQyC0051.jpg

圖7.SPI平臺驅動程序代碼結構

pYYBAGJVHGaAbiGeAAA9ZVL9Tz0942.jpg

圖8.SPI初始化和驅動程序結構

poYBAGJVHGaAMdOkAABH4mQQqJw347.jpg

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

為清楚起見而省略了細節。

pYYBAGJVHGaAbYy_AAA6OndrnWk685.jpg

圖10.SPI額外的初始化和驅動程序結構

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

移植平臺驅動程序

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

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

ADI no-OS存儲庫和平臺驅動程序的GitHub源代碼鏈接可在ADI公司Wiki和GitHub頁面上找到。

為no-OS驅動程序做貢獻

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

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

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

ADI公司Wiki頁面提供了使用Mbed和ADuCMxxx平臺為精密轉換器開發的示例。

poYBAGJVHGaAHA3BAABvio1saXQ195.jpg

圖11.Mbed平臺特定的SPI初始化實現

pYYBAGJVHGaATCyfAABeE33tMj8987.jpg

圖12.平臺驅動程序差異

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 轉換器
    +關注

    關注

    27

    文章

    9418

    瀏覽量

    156344
  • 數據采集
    +關注

    關注

    41

    文章

    8038

    瀏覽量

    120886
  • 驅動程序
    +關注

    關注

    19

    文章

    869

    瀏覽量

    50460
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何制作 rt117x 閃存驅動程序?

    我目前正在做一個 rt1170 UDS 引導加載程序升級項目。由于閃存驅動程序在 Pflash 中固化,因此可能存在安全風險。因此,我想創建一個flashdriver文件,從上位機下載到rt1170
    發表于 03-04 06:38

    【「Linux 設備驅動開發(第 2 版)」閱讀體驗】Linux內核平臺抽線共和設備驅動程序

    \"; vcc-supply = <&vdd_3v3>; wakeup-source; }; }; 設備、驅動程序平臺抽象簡介 LDM是Linux內核
    發表于 02-03 21:57

    摩爾線程發布圖形顯卡驅動程序v310.120

    8月20日,摩爾線程發布版本號為v310.120的圖形顯卡驅動程序。本次更新帶來多項重大技術升級:新增對Windows 11 24H2版本的正式支持,WDDM驅動同步升級至3.2版本。同時,新驅動
    的頭像 發表于 08-21 16:07 ?1378次閱讀

    為FreeRTOS增加新的設備驅動程序

    如果你正在使用FreeRTOS構建嵌入式系統,并且考慮添加新的設備驅動程序,那么這篇文章很適合你。高效的設備集成不僅僅是讓設備功能正常運行——更關乎模塊化、可靠性和安全性。
    的頭像 發表于 08-06 15:44 ?984次閱讀
    為FreeRTOS增加新的設備<b class='flag-5'>驅動程序</b>

    zephyr設備驅動程序模型

    ? ? 1:Zephyr 內核支持多種設備驅動程序。驅動程序是否可用取決于board 和驅動程序。 Zephyr 設備模型為配置作為系統一部分的驅動程序提供了一致的設備模型。設備型號負
    的頭像 發表于 07-29 10:34 ?691次閱讀
    zephyr設備<b class='flag-5'>驅動程序</b>模型

    摩爾線程發布圖形顯卡驅動程序v300.110.1

    近日,摩爾線程發布版本號為v300.110.1的圖形顯卡驅動程序。本次更新針對近期上市的高人氣游戲《劍星》進行了專項優化,MTT S80在該游戲中的平均幀率提升近80%。
    的頭像 發表于 06-24 18:01 ?1170次閱讀

    如何安裝 CY7C65213 的驅動程序?

    無法連接 teraterm。 我嘗試安裝 CypressDriverInstaller_1,但是驅動程序沒有更新。 你能指導如何安裝 CY7C65213 的驅動程序嗎?
    發表于 05-27 07:58

    CY4500 EZ-PD協議分析儀缺少驅動程序怎么解決?

    Win10 CY4500 Analyzer 4.0.0 安裝程序似乎不包含硬件驅動程序。固件更新實用程序或 CY4500 產品頁面上的支持部分也是如此。顯然沒有驅動程序
    發表于 05-23 06:43

    摩爾線程發布圖形顯卡驅動程序v300.110

    近日,摩爾線程發布版本號為v300.110的圖形顯卡驅動程序,為游戲玩家和專業用戶帶來全方位的性能優化與體驗提升,特別在3DMark基準測試工具Steel Nomad中,測試成績顯著提升35%,將MTT S80的性能潛力進一步釋放。
    的頭像 發表于 05-22 17:26 ?1183次閱讀

    求助,關于CY7C65213-32LTXIT驅動程序的問題求解

    我的客戶對 CY7C65213-32LTXIT 驅動程序有疑問。 (1) 要使用CY7C65213-32LTXIT,我認為有必要在PC(Windows)上安裝驅動程序。 如果您使用Cypress
    發表于 05-16 07:33

    是否有辦法用標準Windows驅動程序控制GPIO嗎?

    關于 CY7C65213-28PVXI 的控制, 我正在考慮更改 VenderID 并使用標準 Windows 驅動程序對其進行控制。 但是,使用標準 Windows 驅動程序存在一個
    發表于 05-08 07:05

    USB串行Windows驅動程序安裝程序無法下載是怎么回事?

    USB 串行 Windows 驅動程序安裝程序無法下載
    發表于 05-07 08:09

    Linux環境再升級:PLIN驅動程序正式發布

    PLIN驅動程序現已正式發布,本文將展示如何安裝PLIN驅動程序,以及如何在Linux環境下進行基本的PLIN通信操作,確保您能夠快速掌握并應用這一新工具。
    的頭像 發表于 04-21 15:29 ?1047次閱讀
    Linux環境再升級:PLIN<b class='flag-5'>驅動程序</b>正式發布

    如何使用MCAL的TJA1145實現驅動程序?

    你好: 我希望使用 MCAL 的 TJA1145 實現驅動程序,您能幫我嗎
    發表于 04-03 06:50

    RTC芯片有Linux PCA2131驅動程序嗎?

    RTC 芯片有 Linux PCA2131驅動程序嗎? 1) 如果沒有,我可以使用任何兼容的驅動程序驅動這個 RTC 芯片嗎? 2) 如果是,我在哪里可以找到它?
    發表于 03-31 06:22