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