上期講述了開發(fā)通用外設(shè)之實戰(zhàn)TIM的流程,讓大家逐步深入了解如何開發(fā)通用外設(shè)的驅(qū)動。接下來將繼續(xù)進行通用外設(shè)開發(fā)的實戰(zhàn)篇,本次向大家介紹開發(fā)通用外設(shè)之GPIO。
按照如下步驟開發(fā)通用外設(shè)GPIO驅(qū)動:
了解通用外設(shè)標準接口層、外設(shè)硬件層開發(fā)、外設(shè)驅(qū)動層開發(fā)、外設(shè)用戶配置文件開發(fā)。
圖1 通用外設(shè)文件結(jié)構(gòu)
標準層了解
1、標準接口相關(guān)類型定義
如下所示為GPIO的標準接口文件中對GPIO引腳功能、引腳模式、輸出電平以及中斷觸發(fā)方式等的定義。
圖2GPIO標準接口文件宏定義
2、標準接口函數(shù)
如下所示為GPIO標準層的函數(shù)接口,通過傳入引腳編號、配置功能標志、回調(diào)函數(shù)等對應(yīng)的參數(shù),即可實現(xiàn)GPIO引腳的功能配置。在了解GPIO外設(shè)標準層數(shù)據(jù)類型和接口函數(shù)之后,就明確了驅(qū)動層需要為標準層所提供的內(nèi)容。
圖3GPIO標準層函數(shù)接口
外設(shè)HW層開發(fā)
HW層對應(yīng)到具體的外設(shè),其提供的API基本上是直接操作寄存器的內(nèi)聯(lián)函數(shù)。根據(jù)芯片手冊來添加外設(shè)的寄存器列表;并編寫寄存器相關(guān)操作的內(nèi)聯(lián)函數(shù)。以某款芯片的GPIO為例,如下所示為GPIO的寄存器列表,從而來明確各個寄存器的功能。
圖4GPIO寄存器列表
根據(jù)寄存器列表,我們了解并分析了各個寄存器功能以及要配置的各個功能,其他寄存器位該如何配合等。如下所示為GPIO寄存器結(jié)構(gòu)體定義。
圖5GPIO寄存器塊結(jié)構(gòu)體定義
接下來編寫每個寄存器的功能操作函數(shù)即可完成外設(shè)硬件層的開發(fā)。以GPIO的端口位清除寄存器brr為例,來編寫該寄存器的硬件層函數(shù)接口,如下所示:
圖6GPIO_BRR寄存器操作函數(shù)
在每個寄存器的操作函數(shù)編寫完畢后,可能硬件層的接口還有所欠缺,需要提供一些方便用戶使用的簡單的功能性函數(shù)。在后續(xù)開發(fā)時,若發(fā)現(xiàn)有需要,可以反過來再添加。
外設(shè)驅(qū)動層開發(fā)
1、定義設(shè)備信息結(jié)構(gòu)體和設(shè)備結(jié)構(gòu)體
驅(qū)動層首先應(yīng)該搭建好相關(guān)結(jié)構(gòu),再去實現(xiàn)外設(shè)的功能函數(shù)。在AMetal中,每個設(shè)備都應(yīng)該有與之對應(yīng)的設(shè)備結(jié)構(gòu)體和設(shè)備信息結(jié)構(gòu)體。
設(shè)備結(jié)構(gòu)體主要用于內(nèi)存分配,與設(shè)備相關(guān)的變量都應(yīng)該定義在設(shè)備結(jié)構(gòu)體中。
設(shè)備信息結(jié)構(gòu)體通常至少包含一個硬件層定義的指向寄存器基地址的指針類型成員,除此之外,還包含一些設(shè)備的初始化配置信息,如中斷號、外設(shè)信息等成員。
圖7 GPIO設(shè)備信息結(jié)構(gòu)體和設(shè)備結(jié)構(gòu)體定義
2、驅(qū)動函數(shù)實現(xiàn)
驅(qū)動函數(shù)主要包括兩部分:一部分是提供給標準層的驅(qū)動函數(shù),另一部分是面向用戶的初始化、解初始化函數(shù)。
我們可根據(jù)標準接口層函數(shù)來搭建相應(yīng)的GPIO外設(shè)的驅(qū)動層功能函數(shù)框架;進一步通過芯片用戶手冊中對應(yīng)操作說明來完成GPIO的驅(qū)動層功能函數(shù)驅(qū)動。
如下所示為GPIO初始化函數(shù)和解初始化函數(shù);初始化函數(shù)主要是為了初始化設(shè)備中的標準服務(wù)和硬件相關(guān)設(shè)置;解初始化函數(shù)是為了釋放內(nèi)存資源和硬件資源。
圖8GPIO初始化函數(shù)和解初始化函數(shù)
外設(shè)用戶配置文件開發(fā)
開發(fā)完驅(qū)動層我們知道,用戶使用一個外設(shè)的過程是,先調(diào)用驅(qū)動初始化函數(shù),該函數(shù)返回一個handle,后續(xù)的所有操作,用戶直接使用該handle作為參數(shù)調(diào)用標準接口層函數(shù)即可。
以某款芯片的GPIO為例,如下所示為GPIO的用戶配置文件,主要包含設(shè)備信息結(jié)構(gòu)體、設(shè)備實例結(jié)構(gòu)體及其平臺初始化函數(shù)與解初始化函數(shù)。
圖9GPIO用戶配置文件
外設(shè)例程文件
外設(shè)的例程文件主要分為HW層示例和STD示例。
對于STD示例,調(diào)用標準層函數(shù)和實例初始化函數(shù)來實現(xiàn)外設(shè)功能。
對于HW示例,通過調(diào)用硬件層的函數(shù)完成相應(yīng)的配置,以此實現(xiàn)功能。如下所示為通過硬件層驅(qū)動來實現(xiàn)按鍵切換LED狀態(tài)的示例。
圖10GPIO_HW層示例
至此,我們完成了一個通用外設(shè)GPIO驅(qū)動的開發(fā)。
來源:立功科技
-
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051 -
ametal
+關(guān)注
關(guān)注
2文章
24瀏覽量
11398
發(fā)布評論請先 登錄
相關(guān)推薦
評論