上期講述了搭建工程讓MCU在AMetal平臺運行起來,為后續(xù)開發(fā)外設(shè)驅(qū)動奠定基礎(chǔ)。接下來可以進入下一步的通用驅(qū)動外設(shè)開發(fā)工作,本次向大家介紹開發(fā)通用外設(shè)的一般流程與規(guī)范。
外設(shè)驅(qū)動開發(fā)的過程主要包括硬件層驅(qū)動函數(shù)的編寫、驅(qū)動層函數(shù)的實現(xiàn)、通用示例程序的編寫及其相關(guān)外設(shè)的配置文件開發(fā)。

圖1 AMetal架構(gòu)
基于AMetal驅(qū)動架構(gòu),帶大家來了解一下通用外設(shè)驅(qū)動開發(fā)的主要流程,如下所示:
了解標準函數(shù)接口
對于通用MCU而言,AMetal提供了各個通用外設(shè)的標準層接口,開發(fā)者不需要額外開發(fā),只需了解標準外設(shè)的接口函數(shù)即可。通用外設(shè)一般是多實例設(shè)備,標準接口層函數(shù)的第一個參數(shù)均為外設(shè)標準服務(wù)操作句柄handle。雖然標準函數(shù)接口不需要用戶編寫,但用戶還是需要充分了解標準接口層,才能夠清楚驅(qū)動層需要開發(fā)的內(nèi)容——即如何實現(xiàn)函數(shù)接口等。AMetal提供的所有標準層驅(qū)動文件均在{SDK}\interface路徑下,標準接口層包含的文件如下所示:

圖2 標準接口層文件
通用外設(shè)硬件層開發(fā)
通過對標準層的了解,我們知道標準層實現(xiàn)的函數(shù)功能,以及需要驅(qū)動層提供的函數(shù)。但驅(qū)動層并不是凌空搭建的,驅(qū)動層介乎于HW層和標準接口層之間,簡單來說就是調(diào)用HW層的函數(shù)來提供給標準層,所以在完成驅(qū)動層開發(fā)前,要先來實現(xiàn)HW層的接口函數(shù)。
HW層對應(yīng)到具體的外設(shè),其提供的API基本上是直接操作寄存器的內(nèi)聯(lián)函數(shù),其效率最高,內(nèi)聯(lián)函數(shù)直接定義在.h文件中。硬件層中所有的符號及函數(shù)命名均以amhw_/AMHW_開頭。通常情況下,HW層只有.h文件,只有當某些硬件功能設(shè)置較為復(fù)雜時,才提供對應(yīng)的非內(nèi)聯(lián)函數(shù),存放在.c文件中。
開發(fā)HW層前,我們需要根據(jù)芯片用戶手冊,來大概了解一下該芯片外設(shè)的寄存器。從而對外設(shè)功能有一定的了解之后再開始開發(fā),其流程如下:
添加寄存器列表,以確保硬件層接口的完整和準確性;
編寫寄存器相關(guān)操作函數(shù):對該外設(shè)的所有寄存器提供操作函數(shù);
查漏補缺:檢查補充所需功能函數(shù);
添加指向寄存器塊的指針,方便用戶或驅(qū)動層使用。
以ZLG116為例,如下圖所示為開發(fā)通用外設(shè)過程中各個驅(qū)動文件所存放的位置。

圖3 芯片外設(shè)驅(qū)動文件
外設(shè)驅(qū)動層開發(fā)
通過對標準接口層文件的分析與理解,清楚了驅(qū)動層需要為標準接口層提供哪些具體內(nèi)容,加上驅(qū)動層本身應(yīng)該提供給用戶的初始化函數(shù)和解初始化函數(shù)。因此,外設(shè)驅(qū)動層需要編寫的總體內(nèi)容如下:
編寫好標準接口層需要使用的基本函數(shù);
驅(qū)動初始化函數(shù);
驅(qū)動解初始化函數(shù);
外設(shè)用戶配置文件開發(fā)。
由于用戶調(diào)用驅(qū)動層的初始化函數(shù)時,需要傳入設(shè)備地址和設(shè)備信息地址作為參數(shù)。為了方便用戶使用,我們需要將設(shè)備變量和設(shè)備信息常量定義好;從而用戶調(diào)用驅(qū)動的初始化函數(shù)時,只需要使用已經(jīng)定義好的設(shè)備變量和設(shè)備信息常量即可,不需要再額外定義。因此,我們把這個用于存放設(shè)備變量和設(shè)備常量信息和驅(qū)動初始化函數(shù)的文件稱之為外設(shè)用戶配置文件。通常情況下,AMetal平臺為每一個外設(shè)均提供了一個獨立的用戶配置文件。
開發(fā)完驅(qū)動層我們知道,用戶使用一個外設(shè)的過程是,先調(diào)用驅(qū)動初始化函數(shù),該函數(shù)返回一個handle,后續(xù)的所有操作,用戶直接使用該handle作為參數(shù)調(diào)用標準接口層函數(shù)即可。這樣一來,可以實現(xiàn)數(shù)據(jù)與代碼的分離,即達到驅(qū)動復(fù)用的效果。以I2C外設(shè)為例,在操作該外設(shè)時,四個I2C的操作方式完全一樣,僅僅是引腳、中斷號、寄存器基地址不同的區(qū)別而已:

圖4 驅(qū)動的可復(fù)用性
外設(shè)例程文件開發(fā)
開發(fā)完驅(qū)動文件之后,最后是編寫例程文件。例程文件開發(fā)主要分為兩個部分:基于硬件層實現(xiàn)的HW例程、基于標準層實現(xiàn)的STD例程以及在板測試的板級例程。為了將外設(shè)所有的例程(包括HW例程和STD例程)統(tǒng)一管理,例程統(tǒng)一存放{SDK}\examples\board\xxx_core\peripheral_name路徑。HW層的實現(xiàn)與標準層的實現(xiàn),在文件上的命名,分別采用hw與std作為關(guān)鍵字。到了這一步,我們就需要依托硬件測試驗證我們的代碼功能,最終即可實現(xiàn)通用外設(shè)的開發(fā)。
以上就是基于AMetal開發(fā)通用外設(shè)的流程與規(guī)范的全部內(nèi)容,相信大家熟悉了AMetal平臺上開發(fā)MCU通用外設(shè)的流程。
-
寄存器
+關(guān)注
關(guān)注
31文章
5600瀏覽量
129574 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4413瀏覽量
67201 -
代碼
+關(guān)注
關(guān)注
30文章
4956瀏覽量
73492 -
ametal
+關(guān)注
關(guān)注
2文章
24瀏覽量
11698
發(fā)布評論請先 登錄
面向ametal框架與接口的編程ametal uart總線
靈動微電子MM32 MCU正式入駐AMetal平臺
靈動微課堂 (第122講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal平臺新建工程
靈動微課堂 (第123講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal LED燈控制
靈動微課堂 (第123講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal LED燈控制
基于Ametal平臺開發(fā),快速完成開發(fā)設(shè)計!
AMetal適配:以TIM為例來展示如何開發(fā)通用驅(qū)動外設(shè)代碼
AMetal開發(fā)通用外設(shè)的流程與規(guī)范
評論