色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

AWBus-lite的拓撲結構及應用設計

AGk5_ZLG_zhiyua ? 來源:互聯網 ? 作者:佚名 ? 2018-06-21 09:10 ? 次閱讀

本文導讀

為了管理系統中各式各樣的硬件設備(或虛擬硬件設備),AWorks推出了領先的輕量級總線管理框架:AWBus-lite,實現了硬件設備和驅動的徹底分離,使設備驅動可以最大限度的得到復用。本文介紹了AWBus-lite的基礎概念,以及如何使用和配置AWbus-lite。

本文為《面向AWorks框架和接口編程》第三部分軟件篇——第12章AWBus-lite總線框架——第1~4小節:AWBus-lite簡介、AWBus-lite拓撲結構、系統硬件資源和訪問設備。

本章導讀

嵌入式系統中,硬件外設的種類非常繁多,例如,GPIO、ADCUART、按鍵、數碼管、RTC、LM75、EEPROMSD卡、U盤等。正確使用各個外設的基礎是平臺中具有相應的驅動,隨著外設種類的不斷增加,驅動也隨之越來越多,為了高效的管理眾多的外設和驅動,AWorks推出了領先的輕量級總線管理框架:AWBus-lite。AWBus-lite作為AWorks中最重要的組件之一,負責管理系統中所有的硬件設備(或虛擬硬件設備),實現硬件外設和驅動的分離,使驅動可以最大限度的得到復用。

本章作為AWBus-lite的入門,主要介紹了AWBus-lite的拓撲結構,以及基本的設備、總線、驅動相關的概念,重點從用戶角度出發,講述如何使用、配置AWBus-lite。

12.1 AWBus-lite簡介

隨著MCU的快速發展,越來越多的硬件外設集成到了MCU內部(片內外設),這部分外設可以直接通過CPU操作相應的寄存器使用,例如,i.MX28x中的GPIO、ADC、UART等。一些外設在MCU外部(片外外設),必須通過某種總線進行訪問,比如PCF85063,需要通過I2C總線訪問;SD卡,需要通過SDIO總線訪問。

為了使用統一的拓撲結構描述所有的片外和片內外設,在AWBus-lite中,把CPU直接控制的總線統稱為PLB(Processor Local Bus,CPU本地總線),集成在MCU內部的外設就掛在該總線上。例如:在一個系統中,硬件設備連接示意圖詳見圖12.1(a),其對應的AWBus-lite軟件拓撲結構詳見圖12.1(b)。

圖12.1 AWBus-lite抽象

AWBus-lite提供了一種機制,使得我們可以在軟件環境里建立、還原系統的硬件總線拓撲結構。如圖12.1所示,圖12.1(a)為一個可能的系統總線的物理拓撲結構(僅作示例之用),圖12.1(b)為在AWBus-lite中抽象出來的系統總線模型。由此可見,在軟件中抽象出來的對象同真實世界的對象一一對應!

圖12.1(a)僅作為一種示例,與實際硬件可能存在差異。整個硬件被分為了核心板(i.MX28xPack board)和用戶板(User Board)兩部分。核心板又分為MCU(i.MX28x)和外圍器件(ICs)兩個部分,MCU又分為內核(ARM)和片內外設兩個部分。

內核的核心是CPU,其可以直接控制片上外設,這里虛擬了一個PLB控制器,其產生了一條PLB總線,由CPU直接控制,片內外設均直接掛在PLB總線上。

片內外設集成在芯片內部,例如,GPIO、I2C、UART等,它們掛在PLB總線上。其中部分片內外設又是總線控制器(比如I2C),它們又可以擴展出一條總線到片外,例如,I2C0擴展出一條總線I2C bus 0,I2C1擴展出一條總線II2C bus 1。擴展的總線可以連接一些外圍器件。

這些器件可能處于核心板中,比如

SC18IS602B(一款I2C轉SPI芯片,僅用作拓撲結構展示,無需深入了解)、

CAT24C02(EEPROM)、PCF85063(RTC芯片),也可能處于用戶板上,比如CAT9555(一款I2C轉GPIO芯片,僅用作拓撲結構展示,無需深入了解)。

一些外圍器件可能又是總線控制器,則其又可以擴展出一條總線,比如SC18IS602B,其為I2C轉SPI芯片,可以擴展出SPI總線,在SPI總線上,又可以掛在其它SPI接口的器件,比如:SC16IS752(一款SPI轉UART芯片,僅用作拓撲結構展示,用戶無需了解具體細節)。特別地,若連接的芯片又是一個總線控制器,則可以繼續擴展總線,從理論上講,通過添加總線控制器,可以將系統的總線層次無限地增加,即系統的功能外設可無限擴展。

圖12.1(b)為對應的軟件拓撲結構圖,在軟件環境中,外設對象與真實硬件設備呈一一對應關系。不過,軟件環境中并不區分設備的物理位置,只考慮設備的父總線,比如CAT9555(用戶板上)和PCF85063(核心板上)都是掛在I2C bus 1上的,則它們處于同一個層級。

12.2 AWBus-lite拓撲結構

在圖12.1中,以一個具體的示例說明了AWbus-lite的基本結構,展示了AWBus-Lite對現實世界的一種抽象。從具體到一般,一個更加抽象的總線拓撲結構詳見圖12.2。

圖12.2 AWBus-lite總線拓撲結構圖

其中,Bus Controller 0是由CPU直接控制的總線控制器,通常情況下,其為PLBController,以擴展出一條PLB總線。在總線拓撲結構圖中,抽象了3個重要的概念:設備、總線控制器、總線。

  • 設備

設備是指掛在某條總線上的硬件外設(或虛擬外設)。例如,圖12.1中的GPIO、CAT24C02、CAT9555等。

  • 總線控制器

總線控制器是一種特殊的設備,它可以擴展出一條下游總線,這條總線上又能掛其它設備(包括總線控制器)。例如,圖12.1中的I2C0、SC18IS602B等。

  • 總線

任何設備或總線控制器都必須掛在一條總線上。AWBus-lite不區分CPU的具體類型,把CPU直接控制的總線統稱為 PLB,PLB為根總線。其它總線由總線控制器產生,例如,圖12.1中的I2C Bus 0、I2C Bus 1、SPI Bus等。

“設備”是最為核心的概念,其它概念都可以基于“設備”進行描述:“設備”掛在“總線”上,特殊“設備”(總線控制器設備)擴展出一條下游總線。能夠正常使用一個設備的前提是系統中具有設備相應的驅動,例如,要使用i.MX28x的GPIO去控制一個LED,就必須具有相應的GPIO驅動,以設置GPIO的模式、輸出電平等,最終達到控制LED的目的。也就是說,要使系統具有訪問和控制設備的能力,就必須具有相應的驅動。這就需要掌握另外一個非常重要的概念:設備驅動。

設備驅動提供了訪問和控制設備(包括特殊的設備:總線控制器)的能力,在AWBus-lite中,將設備和驅動進行了很好的分離,使驅動可以最大限度的得到復用。通常情況下,系統中可能存在多個相同類型的設備。例如,在i.MX28x中,存在I2C0和I2C1共計兩個I2C總線控制器,它們的操作方法是完全相同的,這種情況下,I2C0和I2C1設備即可復用一份驅動。示意圖詳見圖12.3。

圖12.3I2C0和I2C1復用同一份驅動

其它片上外設或外圍器件同樣如此,多個同類型的設備可以復用一份驅動,這不僅極大的提高了代碼復用率,縮小了程序占用的存儲空間,也給代碼的管理、維護、擴展帶來了極大的便利。這是面向對象編程帶來的好處,在這里,設備驅動就相當于一個類,而設備就是類的一個實例。

12.3 系統硬件資源

在開發實際應用程序前,首先要規劃系統的硬件資源,即要構建出如圖12.1(a)所示的硬件物理拓撲結構。接下來,就需要對系統軟件進行配置,添加相應的設備,以搭建出與之對應的如圖12.1(b)所示的軟件拓撲結構。通常情況下,AWorks SDK提供的工程模板已經配置好了系統相應的硬件資源,完成了基礎軟件拓撲結構的搭建,對于不同的用戶需求,可能需要添加或刪除一些設備,這種情況下,可以直接在模板工程的基礎上對系統硬件資源進行簡要的調整。

12.3.1 硬件設備列表

AWBus-lite使用名為

awbus_lite_hwconf_usrcfg.c的硬件配置文件來定義系統的硬件資源,此文件存放于AWorks SDK提供的工程模板中。硬件配置文件的核心功能是為系統提供一個硬件列表,即一個名為:g_awbl_devhcf_list[]的數組,該數組的每一個成員都描述了系統中的一個硬件設備。一個簡單的示例片段詳見程序清單12.1。

程序清單12.1 硬件設備列表(awbus_lite_hwconf_usrcfg.c)

在AWBus-lite中,以“awbl_”作為命名空間,“awbl”是AWBus-lite的縮寫。aw_const是用于定義常量的修飾符,其等效于C語言中的關鍵字:const。

g_awbl_devhcf_list[]數組為定義的硬件設備列表,g_awbl_devhcf_list_count定義了列表中設備的個數。AW_NELEMENTS()為獲取數組元素個數的宏,其定義如下(aw_common.h):

12.3.2 設備描述類型

由數組的定義可知,數組中每個元素的實際類型為struct awbl_devhcf,其描述了一個硬件設備在系統總線拓撲結構中的位置以及設備的配置,具體類型定義詳見程序清單12.2。

程序清單12.2 struct awbl_devhcf類型定義(awbus_lite.h)

1. 設備名

設備名為一個字符串,此名字需要與設備驅動的名字一致,系統將根據此名字查找該設備對應的驅動。在系統啟動時,最重要的步驟之一就是將設備和設備驅動綁定,以便正確使用各個設備。要使系統能夠正確查找到設備相應的驅動,設備名必須與相應的驅動名一致。

為確保一致性,在開發驅動時,往往使用宏定義的形式將驅動名定義在頭文件中,在描述一個硬件設備時,直接使用該宏定義作為其設備名即可。

例如,i.MX28x的片上I2C設備驅動,其對應的驅動頭文件為:awbl_imx28_i2c.h,在該文件中,定義了驅動名為AWBL_IMX28_I2C_NAME,完整定義如下:

基于此,在描述I2C設備(如描述I2C1設備),對應的設備名應該設定為:

AWBL_IMX28_I2C_NAME。

又如,對于PCF85063設備驅動,其對應的驅動頭文件為:awbl_pcf85063.h,在該文件中,定義了驅動名為:AWBL_PCF85063_NAME。其完整的定義如下:

基于此,在描述PCF85063設備時,其設備名應該設定為:

AWBL_PCF85063_NAME。

2. 設備單元號

設備單元號用于區分系統中幾個相同的硬件設備,它們的設備名一樣,復用同一份驅動。

AWBus-lite建議設備單元號從0開始連續分配。

例如,在i.MX28x中,具有兩個I2C片內外設,則I2C0的設備單元號為0,I2C1的設備單元號為1。又如,對于PCF85063設備,若只外接了一個PCF85063,則設備單元號為0,若外接了兩個PCF85063,則設備單元號分別為0、1。通常情況下,一個系統中只會使用一個外部RTC,不會連接兩個外部RTC芯片,此時,將設備單元號設置為0即可。

注意,在通用接口中,通常有一個用于指定設備的ID,例如,在RTC接口中,使用ID指定要操作的RTC設備。設備單元號與該ID的概念是不同的,設備單元號用于區分幾個使用同一驅動的設備,ID用于區分同一類的設備(這些設備不一定使用相同的驅動)。

例如,i.MX28x具有片上RTC外設,其掛在PLB總線上,顯然,其驅動方法與掛在I2C總線上的PCF85063是不一樣的。若系統同時使用了片上RTC外設和一個片外PCF85063,由于它們并不使用同一份驅動,因此,在描述這兩個設備時,設備名是不一樣的,設備單元號可各自獨立分配,互不影響,均可設置為0。但是,由于這兩個設備均可以為系統RTC服務,可以使用RTC通用接口操作這兩個設備,為了區分這兩個設備,它們的ID必須統一編排,例如,為片上RTC外設分配編號0,為PCF85063分配編號1,不可設置為一樣。ID在一個設備對應的設備信息中配置,將在后文詳細介紹。

3. 設備父總線的類型

設備父總線的類型指出了設備掛接在哪種類型的總線上,例如,PLB、I2C、SPI、USB、SDIO、PCI等。各總線的類型已經在awbus_lite.h文件中定義,部分常用總線對應的宏定義詳見表12.1。

表12.1 總線類型宏定義

例如,i.MX28x的片上I2C1設備,其由CPU直接控制,掛接在PLB總線上,因此,對于I2C1設備,bus_type的值為:AWBL_BUSID_PLB。

對于PCF85063設備,其作為一種I2C從機器件,掛接在I2C總線上,因此,對于PCF85063設備,bus_type的值為:AWBL_BUSID_I2C

4. 設備父總線的編號

設備父總線的編號用于區分系統中多條類型相同的總線。AWBus-lite建議總線編號從0開始連續分配。

在AWBus-lite中,PLB總線是一條特殊的虛擬總線,只有一條,因此,對于掛在PLB總線上的設備,比如i.MX28x的片上I2C1設備,它們的設備父總線編號總是為0。其它類型的總線可能有多條,例如,i.MX28x具有兩個I2C片上外設:I2C0、I2C1,它們作為一種總線控制器,可以各自擴展出一條I2C總線,致使系統中有兩條I2C總線,可將它們的總線編號分別設置為0、1。對于PCF85063,若其連接在I2C0總線上,則bus_index的值為0;若其連接在I2C1總線上,則bus_index的值為1。

5. 設備實例內存

設備驅動相當于定義了一個類,而具體的設備相當于這個類的一個實例,顯然,實例需要占用一定的內存空間。而在AWBus-lite中,并不使用動態內存分配,因此,需要在描述一個設備的同時,完成設備實例的靜態定義,為設備實例分配必要的內存空間。p_dev即為指向靜態定義的設備實例的指針,其類型struct awbl_dev是AWBus-lite定義的基礎設備類型,其具體定義用戶無需關心。實際設備類型均是從基礎設備類型派生而來的,例如,PCF85063的設備類型可能定義為:

由于實際設備類型僅用于在描述設備時分配設備實例相關的內存,并不需要操作其中的成員,因此,用戶并不需要關心實際設備類型的具體定義(比如,具體包含哪些成員等)。用戶只需要了解到實際設備類型是從基礎設備類型派生而來的,因而可以將實際設備類型的指針強轉為基礎設備類型的指針進行使用(之類轉換為父類)。

例如,對于i.MX28x的片上I2C1設備,在其對應的驅動頭文件awbl_imx28_i2c.h中定義了I2C設備的類型為struct awbl_imx28_i2c_dev,使用該類型定義一個I2C1設備實例,即可完成設備實例的內存分配,例如:

注: aw_local用于將函數作用域限制在文件內部,或將變量的作用域限制在文件或函數內部,同時,將aw_local修飾的變量存放在全局靜態區域,在整個程序的生命周期均保持有效。其本質上等效于C語言中的關鍵字:static。

其地址&__g_imx28_i2c1_dev即可作為設備描述中p_dev的值。雖然其類型與p_dev的類型并不相同,但由于struct awbl_imx28_i2c_dev類型繼承自struct awbl_dev類型,是基礎設備類型的一個子類,可以將子類轉換為父類使用,例如,將p_dev設置為:

同理,對于PCF85063設備,在其對應的驅動頭文件awbl_pcf85063.h中定義了PCF85063的設備類型為struct awbl_pcf85063_dev,使用該類型定義一個PCF85063設備實例,即可完成設備實例的內存分配,例如:

其地址&__g_pcf85063_0_dev即可作為設備描述中p_dev的值,例如,將p_dev設置為:

6. 設備信息

設備信息描述了設備的一些配置信息,例如,設備的基地址、中斷號等信息。設備信息的具體類型是由設備驅動定義的。用戶需要根據實際設備信息的類型定義一個設備信息,并將其地址賦值給設備描述中的p_devinfo。該信息最終會傳遞給驅動使用,以便正確的驅動相應設備。

  • I2C1設備信息定義范例

對于i.MX28x的片上I2C1設備,在其對應的驅動頭文件awbl_imx28_i2c.h中定義了I2C設備信息類型為struct awbl_imx28_i2c_devinfo,其具體定義詳見程序清單12.3。

程序清單12.3 I2C設備信息類型定義(awbl_imx28_i2c.h)

I2C設備是一個I2C控制器,可以擴展出一條I2C總線,i2c_master_devinfo即用于提供I2C線相關的信息,比如:總線的編號、速率、超時時間等。其類型structawbl_i2c_master_devinfo的定義詳見程序清單12.4。

程序清單12.4 struct awbl_i2c_master_devinfo類型定義(awbl_i2cbus.h)

其中bus_index表示該I2C控制器擴展出的I2C總線對應的編號,若某一設備(如PCF85063)在硬件上與I2C1連接,則在其設備描述中,父總線的編號應與該值保持一致。speed表示該I2C總線的速率。通常情況下,為了便于配置,將總線編號和速率使用宏的形式定義在aw_prj_param.h文件中,例如,將總線ID定義為1,速率定義為200KHz:

后續使用這兩個宏分別作為bus_index和speed的值即可。

timeout表示超時時間,若使用通用I2C接口在該總線上的某一操作(如讀數據或寫數據)超過了該處定義的超時超時,則相應接口將返回超時錯誤。特別地,若將該值設置為

AWBL_I2C_WAITFOREVER

(其是在awbl_i2cbus.h文件中定義的宏),則表示永久等待,也可以設置為其它正整數值,例如,500,則表示超時時間為500個tick。

regbase表示I2C設備的基地址,對于i.MX28x,所有片內外設的基地址均在imx28x_regbase.h文件中定義,例如,I2C1的基地址定義如下:

由此可見,I2C1設備的基地址為0x8005A000,該值可以從i.MX28x的用戶手冊中獲得。

inum表示I2C設備的中斷號,驅動可以使用該中斷號使用系統中斷資源,以使I2C設備可以基于中斷機制進行數據通信。對于i.MX28x,所有片內外設的中斷號均在imx28x_inum.h文件中定義,例如,I2C1設備的中斷號定義如下:

由此可見,I2C1設備的中斷號為110,該值可以從i.MX28x的用戶手冊中獲得。

clkfreq表示I2C模塊的輸入時鐘頻率,在i.MX28x中,默認頻率為24MHz,該值通常不需要修改。

pfunc_plfm_init是一個函數指針,指向一個無參數、無返回值的平臺初始化函數,用于完成平臺相關的初始化操作,比如引腳配置等。例如,在定義一個平臺初始化函數,完成I2C1設備的SCL和SDA引腳配置,詳見詳見程序清單12.5。

程序清單12.5 實現一個平臺初始化函數

其中,__imx28_i2c1_plfm_init為實現的平臺初始化函數,其可直接作為設備信息中

pfunc_plfm_init的值。

基于上面對各個成員的描述,可以定義一個典型的設備信息,詳見程序清單12.6。

程序清單12.6 I2C1設備信息定義

完成設備信息的定義后,其地址

&__g_imx28_i2c1_devinfo即可作為設備描述中p_devinfo的值。

  • PCF85063設備信息定義范例

對于PCF85063設備,在其對應的驅動頭文件awbl_pcf85063.h中定義了PCF85063的設備信息類型為awbl_pcf85063_devinfo_t,其具體定義詳見程序清單12.7。

程序清單12.7 PCF85063設備信息類型定義(awbl_pcf85063.h)

其中,rtc_servinfo包含了RTC標準服務相關的信息,目前僅包含了RTC的編號,其類型定義詳見程序清單12.8。

程序清單12.8 RTC通用服務信息類型定義(awbl_rtc.h)

通過RTC通用接口的介紹可知,在使用通用接口操作RTC時,需要通過rtc_id指定使用的RTC設備,rtc_id通常從0開始編號。rtc_servinfo中的rtc_id即用于指定該設備對應的ID號,如果設置為0,則用戶在使用RTC通用接口時,將rtc_id參數設置為0即可操作到此處定義的硬件設備。

addr為PCF85063的7位I2C從機地址,通過查看PCF85063的數據手冊可知,PCF85063的7位I2C從機地址為0x51。

基于rtc_id和addr的值,可以完成PCF85063設備信息的定義,詳見程序清單12.9。

程序清單12.9 PCF85063設備信息定義范例

完成設備信息的定義后,其地址

&__g_pcf85063_0_devinfo即可作為設備描述中p_devinfo的值。

12.3.3 設備描述宏定義

在g_awbl_devhcf_list[]數組中,每個元素都是以“AWBL_HWCONF_”作為前綴的一個宏。該宏本質上完成了一個設備描述的定義。

例如,對于i.MX28x的片上I2C1設備,其對應的宏為:AWBL_HWCONF_IMX28_I2C0。基于前面介紹的設備描述中各個成員的值,可以完成該宏的定義,詳見程序清單12.10。

程序清單12.10 I2C1設備描述宏定義

對于PCF85063設備,其對應的宏為

AWBL_HWCONF_PCF8563_0,基于前面介紹的設備描述中各個成員的值,可以完成該宏的定義,詳見程序清單12.11。

程序清單12.11 PCF85063設備描述宏定義

通常情況下,為了保持

awbus_lite_hwconf_usrcfg.c文件的簡潔,將設備描述宏的定義(包括設備、設備信息的定義)單獨存放到一個頭文件中,I2C1設備描述宏定義相關的信息存放在awbl_hwconf_imx28_i2c1.h文件中,PCF85063設備描述宏定義相關的信息存放在awbl_hwconf_pcf85063_0.h文件中。

這些文件已經在模板工程中提供,在硬件設備列表中,只需加入該宏即可,詳見程序清單12.1。通過設備的描述可知,I2C1設備掛在PLB總線上,PCF85063設備掛在I2C1總線上,設備描述與拓撲結構的關系詳見圖12.4。

圖12.4 I2C1和PCF85063設備描述與拓撲結構的對應關系

12.3.4 設備的配置與裁剪

設備配置主要是基于工程模板中提供的配置文件,進行設備描述或設備信息的修改。用戶若需修改硬件設備的配置,只需找到該硬件設備相應的頭文件,修改其中的相關信息即可。

例如,需要修改PCF85063的rtc_id為1,僅需將程序清單12.9中的第3行修改為1。若需調整設備在總線拓撲結構中的位置。一般來講,一個設備的父總線類型是確定的,不會修改。如PCF85063,其父總線類型必定為:

AWBL_BUSID_I2C。調整設備在總線拓撲結構中的位置往往是修改父總線的編號,如要將PCF85063掛在I2C0上,僅需將程序清單12.11中,第6行對應的父總線編號修改為I2C0對應的總線總線編號,即:IMX28_I2C0_BUSID。

除簡單的配置外,另外一種特殊的操作是裁剪,例如,用戶不需要使用PCF85063,則可以在硬件列表中刪除該設備的描述宏:

AWBL_HWCONF_PCF85063_0。為了便于用戶裁剪,避免直接操作g_awbl_devhcf_list[]數組,在awbl_hwconf_pcf85063_0.h文件中,使用了另外一個使能宏來控制

AWBL_HWCONF_PCF85063_0宏的定義,詳見程序清單12.12。

程序清單12.12 增加PCF85063設備使能宏(awbl_hwconf_pcf85063_0.h)

程序中,增加了一個使能宏:

AW_DEV_EXTEND_PCF85063_0。若該宏被有效定義,則AWBL_HWCONF_PCF85063_0宏的定義為完整的設備描述,此時,PCF85063設備正常的加入到設備列表中;反之,若使能宏未被定義,則AWBL_HWCONF_PCF85063_0宏將是一個空的宏定義,同時,相關的設備實例,設備信息也不會被定義。此時,在設備列表中,將不存在PCF85063設備的描述,相當于裁剪掉了該設備。同理可以新增一個I2C1設備的使能宏,以便對I2C1設備進行裁剪,詳見程序清單12.13。

程序清單12.13 增加I2C1設備使能宏(awbl_hwconf_imx28_i2c1.h)

程序中,新增了AW_DEV_IMX28_I2C_1宏對I2C1設備是否使能進行控制。為便于查找,在AWorks中,類似的設備相關的使能宏均在模板工程下的aw_prj_params.h文件中進行統一的定義,詳見程序清單12.14。

程序清單12.14 設備使能宏定義(aw_prj_params.h)

若其中的某一個宏被用戶注釋掉了,則對應的設備就會被裁剪。通過查看aw_prj_params.h文件,用戶可以了解哪些設備被使能了,哪些設備被禁能了,并根據需要,靈活的調整。例如,不再使用PCF85063,則可以注釋掉該宏,詳見程序清單12.15。

程序清單12.15 設備裁剪范例(aw_prj_params.h)

值得注意的是,部分特殊的片上外設,例如,GPIO、中斷控制器等,系統必須使用,不能被裁剪,此時,將不會在相應的配置文件中增加額外的使能宏。

12.3.5 注冊設備驅動

在描述一個設備時,通過設備名指定了該設備對應的驅動,要使設備正常工作,系統中必須存在設備對應的驅動。AWorks作為一個完備的軟件平臺,已經支持眾多的芯片和外圍器件,提供了許許多多的設備驅動,隨著AWorks的進一步發展,提供的驅動還會越來越多。

顯然,為了節省系統資源,并不能將所有驅動都加載到系統中,而應該只將使用到的驅動加載到系統中,驅動的加載在aw_prj_config.c文件中的awbl_group_init()函數中完成,該函數在系統啟動時被自動調用。

每個驅動都提供了一個驅動注冊函數,要使用該驅動,則應在awbl_group_init()函數中調用驅動提供的注冊函數。例如,對于PCF85063設備驅動,其提供的驅動注冊函數在驅動頭文件awbl_pcf85063.h文件中聲明,即:

如需使用PCF85063,則應將該驅動加載到系統中,即:

一般來講,新增的驅動都添加到函數尾部。同理,為了便于裁剪,不直接修改aw_prj_config.c文件,往往使用一個宏對是否注冊相應驅動進行控制,只有當宏使能時,才進行相應的驅動注冊,詳見程序清單12.16。

程序清單12.16 通過宏控制驅動是否注冊的原理

程序中,若定義了

AW_DRV_EXTEND_PCF85063_0宏,則會調用驅動注冊函數將驅動注冊到系統之中;否則,驅動將不會被注冊,相應的驅動代碼就得到了裁剪。

為便于管理,在AWorks中,類似的驅動相關的使能宏均在模板工程下的aw_prj_params.h文件中進行統一的定義,例如:

實際中,只要使用PCF85063設備,就必須將PCF85063的設備驅動注冊到系統之中,為了確保這一關系,模板工程中,做了一個簡單的自動定義操作,在設備和設備驅動的使能宏之間進行了恰當的關聯,即:

由此可見,只要PCF85063設備被使能,AW_DRV_AWBL_EXTEND_PCF85063_0宏將被自動定義,使相應的驅動也隨之注冊到系統之中。

這里僅僅只是簡單的展示了設備驅動加載的原理,幫助用戶更深入的理解AWBus-lite。實際中,模板工程已經對此進行了恰當的處理,當一個設備被使能后,其相應的驅動會被一并使能,用戶只需要控制設備的使能/禁能即可。

12.3.6 硬件設備的父總線設備

對于PCF85063,其父總線類型為:

AWBL_BUSID_I2C,即PCF85063掛在某一I2C總線上,顯然I2C總線需要由I2C總線控制器設備產生,比如在i.MX28x中,片上外設I2C0和I2C1均可以產生I2C總線。

這也就意味著,要使用PCF85063設備,除使能PCF85063設備本身外,還必須使能其父總線對應的設備。如在i.MX28x中,I2C0和I2C1設備對應的使能宏在aw_prj_params.h文件中定義為:

基于此,若PCF85063掛在I2C0上,則必須使能AW_DEV_IMX28_I2C_0宏。若掛在I2C1上,則必須使能AW_DEV_IMX28_I2C_1宏。

在i.MX28x中,I2C設備又掛在PLB總線上,PLB總線作為CPU本地總線,不需要額外使能,始終有效。特別地,若父總線設備又掛在另外一條總線上,而不是PLB總線上,則相應的父總線設備對應的控制器同樣需要使能,以此類推,確保所有父總線設備均被使能。

例如,在圖12.1(b)所示的結構圖中,若需要使用SC16IS752設備,則必須使能SC16IS752設備的父總線設備:SC18IS602B設備,同時,還需使能SC18IS602B設備的父總線設備:I2C0設備。

12.4 訪問設備

若系統硬件資源定義正確,并且所需的驅動也注冊到了系統中,則可以通過AWorks定義的通用接口訪問這些硬件設備。

12.4.1 通用接口

AWorks 為每一類設備都定義了一套精簡強大的通用接口,不同的平臺、不同的硬件,只要是通用接口支持的類型,都可以使用通用接口進行訪問。例如,使用RTC通用接口訪問RTC設備,使用GPIO通用接口訪問GPIO設備,使用LED通用接口訪問LED。

無論硬件設備掛在何種總線上,處在AWbus-lite拓撲結構中的何種位置,對同一類硬件設備,均可使用相同的接口對它們進行訪問。例如,在一個基于i.MX28x的系統中,使用了兩個RTC設備:i.MX28x 片上RTC外設,外圍器件PCF85063。它們的編號分別為0、1,使用通用接口對它們進行訪問的示意圖詳見圖12.5。

圖12.5 使用RTC通用接口訪問RTC設備

由此可見,盡管它們處于不同的總線上,但卻可以使用相同的接口進行操作。對應用程序來說,硬件設備的具體位置并不會對應用程序產生任何影響。這就將硬件底層和應用層進行了很好的隔離,后續即使將PCF85063更換為其它RTC器件(例如,RX8025T、DS1302等),應用程序也不需要做任何改動。

再以串口為例,查看一種更加復雜的拓撲結構,示意圖詳見圖12.6。

圖12.6 使用RTC通用接口訪問RTC設備

在圖12.6中,SC16IS752是一種SPI轉兩路UART芯片。這里僅作為訪問UART設備的一種示例,以便于用戶理解,用戶無需深入了解這款芯片,僅需知道SC16IS752是一種SPI轉串口芯片即可。

在圖12.6中,總共有5個串口:MCU片內有1個串口,兩片SC16IS752外擴了4個串口,它們的串口號分別為COM0、COM1、COM2、COM3和COM4。在實際硬件連接中,訪問SC16IS752芯片需要經過PLB總線、I2C總線和SPI總線,進而使用其中的UART功能,但對于用戶來講,同樣只需要簡單的調用串行通用接口即可使用SC16IS752芯片提供的串口功能,和使用片內的UART外設并無區別。

再如,每個MCU都具有一定數量的GPIO,但是,當GPIO不夠用時,可能需要通過外圍器件對GPIO進行擴展,示意圖詳見圖12.7。

圖12.7 使用GPIO通用接口訪問GPIO設備

在圖12.7中,總共有兩個GPIO設備:

  • MCU片內GPIO,引腳編號范圍:

    PIO0_0~PIO6_24;

  • 外擴芯片CAT9555,引腳編號范圍:

    EXPIO0_0~EXPIO0_7、

    EXPIO1_0~EXPIO1_7。

它們同樣可以使用相同的接口進行訪問。

12.4.2 資源ID

在前面的例子中,一個系統中可能存在多個同類設備,它們之間使用“資源ID”進行區分,通用接口則使用“資源ID”指定要訪問的設備。

通常情況下,“資源ID”為int類型的整數,并從0開始順序編號。為了便于管理以及增強程序的可讀性,通常將這些資源ID定義為宏,通過宏名體現其真實的含義。例如,在i.MX28x的I2C0配置文件awbl_hwconf_imx28_i2c0.h中,定義了I2C0設備的設備信息,詳見程序清單12.17。

程序清單12.17 I2C0設備信息配置(awbl_hwconf_imx28_i2c0.h)

在設備信息中,IMX28_I2C0_BUSID即為I2C0總線的ID宏,默認情況下,該宏在aw_prj_param.h文件中定義為0,詳見程序清單12.18。

程序清單12.18 I2C0設備對應的資源ID宏定義(aw_prj_param.h)

后續要修改I2C0的ID,僅需修改該宏的值即可。

需要注意的是,“資源ID”的類型并不局限于int類型,只要用于區分同種類型下的多個設備,都可以視為一種“資源ID”,可以是指針類型,字符串類型等等。

在同一個系統中,某類設備的資源ID必須統一分配,某一資源ID不能被重復分配至多個設備,確保每個設備資源ID的唯一性。例如,在i.MX28x的GPIO配置文件awbl_hwconf_imx28_gpio.h中,定義了GPIO設備信息,詳見程序清單12.19。

程序清單12.19 GPIO設備信息配置(awbl_hwconf_imx28_gpio.h)

其中,PIO0_0 ~ PIO6_24為GPIO資源ID宏,它們的定義詳見程序清單12.20。

程序清單12.20 GPIO設備資源ID宏定義(imx28x_pin.h)

由此可見,PIO0_0的值為0,PIO6_24的值為216,因此,i.MX28x的片上GPIO占用的資源ID范圍為:0 ~ 216。此時,若使用擴展芯片(比如:CAT9555)對GPIO進行了擴展,則為擴展芯片分配的資源ID范圍就必須大于216(不含),以避免范圍重疊。

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

    關注

    146

    文章

    17316

    瀏覽量

    352497
  • 總線
    +關注

    關注

    10

    文章

    2900

    瀏覽量

    88346
  • AWorks
    +關注

    關注

    1

    文章

    16

    瀏覽量

    5729

原文標題:AWorks軟件篇 — AWBus-lite 總線框架

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    交直流變換器拓撲結構是什么

    在電力電子領域,交直流變換器(AC/DC Converter)作為實現電能轉換的核心設備,其拓撲結構的設計與選擇對于設備的性能、效率和可靠性具有至關重要的影響。本文旨在深入探討交直流變換器的拓撲
    的頭像 發表于 01-30 14:48 ?75次閱讀

    LDO芯片的拓撲結構

    LDO(Low Dropout Regulator)芯片,即低壓差線性穩壓器芯片,是一種用于電源穩壓的集成電路芯片。其拓撲結構是理解其工作原理和性能特點的基礎。
    的頭像 發表于 09-11 09:51 ?796次閱讀

    電力電子變壓器的主要拓撲結構

    電力電子變壓器(PET)作為一種新型的電能路由設備,在智能電網與能源互聯網領域展現出了巨大的應用潛力。其拓撲結構是實現電能高效、穩定轉換的關鍵,涉及到多種復雜的電路形式和控制策略。以下是對電力電子變壓器拓撲
    的頭像 發表于 08-27 16:27 ?1084次閱讀

    三電平dcdc拓撲結構有幾種

    三電平DC-DC拓撲結構是一種高效的電力轉換技術,廣泛應用于電力電子領域。 三電平DC-DC拓撲結構的基本原理 三電平DC-DC拓撲
    的頭像 發表于 07-12 09:45 ?1561次閱讀

    請問mesh網絡中拓撲結構是如何管理的?

    請問mesh網絡中拓撲結構是如何管理的? 在mesh_demo 中,espconn_mesh_get_node_info(MESH_NODE_ALL, &sub_dev_mac
    發表于 07-12 06:20

    從星型到網狀:多種網絡拓撲結構的優缺點及應用

    網絡拓撲作為網絡設計的基礎,對于網絡的性能、可靠性和擴展性起著重要作用。不同的網絡拓撲結構類型各有其特點和適用場景。在選擇網絡拓撲結構時,需
    的頭像 發表于 06-26 15:19 ?2910次閱讀
    從星型到網狀:多種網絡<b class='flag-5'>拓撲</b><b class='flag-5'>結構</b>的優缺點及應用

    開關電源幾種拓撲結構介紹

    結構有以下幾種: 降壓型(Buck)拓撲結構 降壓型拓撲結構的主要功能是將輸入電壓降至一個較低的電壓水平,使得輸出電壓低于輸入電壓。 在所有
    的頭像 發表于 06-09 16:47 ?1534次閱讀
    開關電源幾種<b class='flag-5'>拓撲</b><b class='flag-5'>結構</b>介紹

    單相光伏并網系統的拓撲結構簡介

    在單相小功率光伏并網系統中,有隔離型和非隔離型兩種拓撲結構。隔離型有成本高、體積大等諸多缺點,因此非隔離型成為目前主流的拓撲結構,本文主要介紹非隔離型的全橋以及HERIC兩種較為常用的
    的頭像 發表于 06-01 08:14 ?1236次閱讀
    單相光伏并網系統的<b class='flag-5'>拓撲</b><b class='flag-5'>結構</b>簡介

    常見的電路拓撲結構

    開關電源的相關拓撲電路簡化與原理及計算總結。
    發表于 05-29 14:53 ?12次下載

    儲能變流器的拓撲結構介紹

    流器的拓撲結構則是決定其性能的關鍵因素之一。本文將對儲能變流器的拓撲結構進行詳細介紹,包括其基本概念、分類、優缺點以及應用場景等,以期為相關領域的研究和應用提供參考。
    的頭像 發表于 05-17 16:08 ?2371次閱讀

    中科院合肥研究院拓撲結構構筑研究獲新進展

    拓撲結構具有獨特的拓撲特性和優越的穩定性,便于電流調控,有潛力成為未來磁電子學器件的核心元件,從而突破傳統磁存儲的局限。早前,該團隊已經成功地通過反轉磁場控制生成多種拓撲荷磁
    的頭像 發表于 04-28 16:52 ?771次閱讀

    儲能變流器拓撲結構有哪些種類

    儲能變流器(PCS)的拓撲結構是其設計和性能的核心部分,它決定了變流器的效率、可靠性和成本。
    的頭像 發表于 04-22 14:52 ?2748次閱讀

    buck電路的拓撲結構 buck電路臨界條件怎么來的

    Buck電路作為一種常見的降壓電路,其拓撲結構十分重要。本文將詳細介紹Buck電路的拓撲結構,并深入討論了Buck電路的臨界條件。 Buck電路的基本原理與
    的頭像 發表于 02-14 17:31 ?3555次閱讀

    什么是Mesh?Mesh組網拓撲結構淺析

    什么是Mesh?Mesh組網拓撲結構淺析? Mesh(網狀結構)是一種網絡拓撲結構,它由多個節點相互連接而成,每個節點都可以直接與其他節點通
    的頭像 發表于 02-04 14:07 ?3350次閱讀

    網絡拓撲結構有哪幾種類型 網絡拓撲結構的優缺點

    網絡拓撲結構是指計算機網絡中節點與連接線之間的總體布局形式。根據節點與連接線的布局形式,網絡拓撲結構可以分為以下幾種類型: 星型拓撲:星型
    的頭像 發表于 02-04 10:22 ?2432次閱讀
    主站蜘蛛池模板: 亚洲精品一区三区三区在线观看 | 福利视频一二三在线观看 | 久久99国产精品蜜臀AV | 国产三级在线精品男人的天堂 | 动漫美女喷水 | 在线播放日韩欧美亚洲日本 | 男人边吃奶边摸边做刺激情话 | 日本美国群交P片内射捆绑 日本毛片久久国产精品 | 日韩爽爽影院在线播放 | 性色少妇AV蜜臀人妻无码 | 色欲档案之麻雀台上淫 | 国产成人精选免费视频 | 久久久久九九 | 精品第一国产综合精品蜜芽 | 岳打开双腿开始配合日韩视频 | 日本中文字幕巨大的乳专区 | 国产免费变态视频网址网站 | 亚洲欧美强伦一区二区另类 | 爽爽窝窝午夜精品一区二区 | 久久yy99re66| 日本免费无码A专区在线观看 | 欧美乱妇日本无乱码特黄大片 | 色小妹影院 | 在线国内自拍精品视频 | 国产睡熟迷奷系列网站 | 亚洲国产精品免费观看 | 绑着男军人的扒开内裤 | 欧美伊人久久大香线蕉综合69 | 98色精品视频在线 | 亚洲一卡二卡三卡四卡无卡麻豆 | 父亲猜女儿在线观看 | yw193.c国产在线观看 | 亚洲香蕉网久久综合影院 | 手机观看毛片 | 成人无码精品一区二区在线观看 | 欧美男男网站免费观看videos | 一本色道久久综合亚洲精品蜜桃冫 | 在线观看99 | 青青娱乐网 | 91久久综合精品国产丝袜长腿 | 久久国产精品萌白酱免费 |