上期講述了搭建工程讓MCU在AMetal平臺運(yùn)行起來,為后續(xù)開發(fā)外設(shè)驅(qū)動奠定基礎(chǔ)。接下來可以進(jìn)入下一步的通用驅(qū)動外設(shè)開發(fā)工作,本次向大家介紹開發(fā)通用外設(shè)的一般流程與規(guī)范。
外設(shè)驅(qū)動開發(fā)的過程主要包括硬件層驅(qū)動函數(shù)的編寫、驅(qū)動層函數(shù)的實(shí)現(xiàn)、通用示例程序的編寫及其相關(guān)外設(shè)的配置文件開發(fā)。
圖1 AMetal架構(gòu)
基于AMetal驅(qū)動架構(gòu),帶大家來了解一下通用外設(shè)驅(qū)動開發(fā)的主要流程,如下所示:
了解標(biāo)準(zhǔn)函數(shù)接口
對于通用MCU而言,AMetal提供了各個通用外設(shè)的標(biāo)準(zhǔn)層接口,開發(fā)者不需要額外開發(fā),只需了解標(biāo)準(zhǔn)外設(shè)的接口函數(shù)即可。通用外設(shè)一般是多實(shí)例設(shè)備,標(biāo)準(zhǔn)接口層函數(shù)的第一個參數(shù)均為外設(shè)標(biāo)準(zhǔn)服務(wù)操作句柄handle。雖然標(biāo)準(zhǔn)函數(shù)接口不需要用戶編寫,但用戶還是需要充分了解標(biāo)準(zhǔn)接口層,才能夠清楚驅(qū)動層需要開發(fā)的內(nèi)容——即如何實(shí)現(xiàn)函數(shù)接口等。AMetal提供的所有標(biāo)準(zhǔn)層驅(qū)動文件均在{SDK}\interface路徑下,標(biāo)準(zhǔn)接口層包含的文件如下所示:
圖2 標(biāo)準(zhǔn)接口層文件
通用外設(shè)硬件層開發(fā)
通過對標(biāo)準(zhǔn)層的了解,我們知道標(biāo)準(zhǔn)層實(shí)現(xiàn)的函數(shù)功能,以及需要驅(qū)動層提供的函數(shù)。但驅(qū)動層并不是凌空搭建的,驅(qū)動層介乎于HW層和標(biāo)準(zhǔn)接口層之間,簡單來說就是調(diào)用HW層的函數(shù)來提供給標(biāo)準(zhǔn)層,所以在完成驅(qū)動層開發(fā)前,要先來實(shí)現(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文件,只有當(dāng)某些硬件功能設(shè)置較為復(fù)雜時(shí),才提供對應(yīng)的非內(nèi)聯(lián)函數(shù),存放在.c文件中。
開發(fā)HW層前,我們需要根據(jù)芯片用戶手冊,來大概了解一下該芯片外設(shè)的寄存器。從而對外設(shè)功能有一定的了解之后再開始開發(fā),其流程如下:
添加寄存器列表,以確保硬件層接口的完整和準(zhǔn)確性;
編寫寄存器相關(guān)操作函數(shù):對該外設(shè)的所有寄存器提供操作函數(shù);
查漏補(bǔ)缺:檢查補(bǔ)充所需功能函數(shù);
添加指向寄存器塊的指針,方便用戶或驅(qū)動層使用。
以ZLG116為例,如下圖所示為開發(fā)通用外設(shè)過程中各個驅(qū)動文件所存放的位置。
圖3 芯片外設(shè)驅(qū)動文件
外設(shè)驅(qū)動層開發(fā)
通過對標(biāo)準(zhǔn)接口層文件的分析與理解,清楚了驅(qū)動層需要為標(biāo)準(zhǔn)接口層提供哪些具體內(nèi)容,加上驅(qū)動層本身應(yīng)該提供給用戶的初始化函數(shù)和解初始化函數(shù)。因此,外設(shè)驅(qū)動層需要編寫的總體內(nèi)容如下:
編寫好標(biāo)準(zhǔn)接口層需要使用的基本函數(shù);
驅(qū)動初始化函數(shù);
驅(qū)動解初始化函數(shù);
外設(shè)用戶配置文件開發(fā)。
由于用戶調(diào)用驅(qū)動層的初始化函數(shù)時(shí),需要傳入設(shè)備地址和設(shè)備信息地址作為參數(shù)。為了方便用戶使用,我們需要將設(shè)備變量和設(shè)備信息常量定義好;從而用戶調(diào)用驅(qū)動的初始化函數(shù)時(shí),只需要使用已經(jīng)定義好的設(shè)備變量和設(shè)備信息常量即可,不需要再額外定義。因此,我們把這個用于存放設(shè)備變量和設(shè)備常量信息和驅(qū)動初始化函數(shù)的文件稱之為外設(shè)用戶配置文件。通常情況下,AMetal平臺為每一個外設(shè)均提供了一個獨(dú)立的用戶配置文件。
開發(fā)完驅(qū)動層我們知道,用戶使用一個外設(shè)的過程是,先調(diào)用驅(qū)動初始化函數(shù),該函數(shù)返回一個handle,后續(xù)的所有操作,用戶直接使用該handle作為參數(shù)調(diào)用標(biāo)準(zhǔn)接口層函數(shù)即可。這樣一來,可以實(shí)現(xiàn)數(shù)據(jù)與代碼的分離,即達(dá)到驅(qū)動復(fù)用的效果。以I2C外設(shè)為例,在操作該外設(shè)時(shí),四個I2C的操作方式完全一樣,僅僅是引腳、中斷號、寄存器基地址不同的區(qū)別而已:
圖4 驅(qū)動的可復(fù)用性
外設(shè)例程文件開發(fā)
開發(fā)完驅(qū)動文件之后,最后是編寫例程文件。例程文件開發(fā)主要分為兩個部分:基于硬件層實(shí)現(xiàn)的HW例程、基于標(biāo)準(zhǔn)層實(shí)現(xiàn)的STD例程以及在板測試的板級例程。為了將外設(shè)所有的例程(包括HW例程和STD例程)統(tǒng)一管理,例程統(tǒng)一存放{SDK}\examples\board\xxx_core\peripheral_name路徑。HW層的實(shí)現(xiàn)與標(biāo)準(zhǔn)層的實(shí)現(xiàn),在文件上的命名,分別采用hw與std作為關(guān)鍵字。到了這一步,我們就需要依托硬件測試驗(yàn)證我們的代碼功能,最終即可實(shí)現(xiàn)通用外設(shè)的開發(fā)。
以上就是基于AMetal開發(fā)通用外設(shè)的流程與規(guī)范的全部內(nèi)容,相信大家熟悉了AMetal平臺上開發(fā)MCU通用外設(shè)的流程。
-
寄存器
+關(guān)注
關(guān)注
31文章
5250瀏覽量
119192 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4235瀏覽量
61964 -
代碼
+關(guān)注
關(guān)注
30文章
4670瀏覽量
67760 -
ametal
+關(guān)注
關(guān)注
2文章
24瀏覽量
11374
發(fā)布評論請先 登錄
相關(guān)推薦
評論