開發GPIO驅動的基本套路


最近完成了基於AR9331的GPIO驅動的開發,主要包括:控制一個連接GPIO的燈控;接收一個連接GPIO的按鍵事件;以及接收一個連接GPIO的脈沖事件。

這里,結合開發實踐,總結一下GPIO驅動開發的基本套路

一.准備環節

    拿到硬件連接圖,找到硬件實體連接中的GPIO是具體哪個,以及高低電平的控制含義

    閱讀CPU的Datasheet,找到控制GPIO的寄存器地址以及寄存器value的字段含義

 

二.實現環節

1.注冊一個字符設備驅動  --- 一般GPIO驅動都注冊為一個字符設備驅動;在字符設備中定義好file_operations結構體以及其中的open,write,read,ioctl等函數實現

2. 針對燈控的GPIO

    2.1 設置其工作在輸出模式 --- 即此GPIO為對外輸出信號;

    2.2 設置該GPIO的初始輸出信號值:高 or 低;

    2.3 創建一個proc目錄文件,並提供write和read函數接口;此文件接口可以供上層應用使用,從而可以根據需要控制GPIO輸出高or低電平。進而控制燈的亮or滅;

3.針對按鍵的GPIO,

   3.1 設置其工作在輸入模式---即此GPIO為從外部獲得信號;

   3.2 設置其中斷觸發方式 --- 電平觸發或者邊沿觸發(根據硬件設計而定)

   3.3 獲得該GPIO對應的IRQ中斷號,並定義中斷處理函數 --- 當從此GPIO上獲得信號后,即觸發中斷處理函數的執行;

   3.4 在中斷處理函數中,則可以根據業務需求,實現具體的信號判斷和進一步的處理

4.針對脈沖事件的GPIO

   基本同3,只是這個中斷是周期定時產生的,故具體的內部邏輯處理,須具體情況具體對待

 

特別提出:

1.針對GPIO的通用設置函數,包括:設置為輸入/輸出模式;設置中斷觸發方式;獲得IRQ中斷號;從GPIO讀值;向GPIO寫值,等等,都應該是基礎SDK封裝好的,直接使用就可以了 

2.有些GPIO引腳存在復用情況,需要根據硬件要求,顯示地將此GPIO引腳的非所需功能給關閉掉;

3.向GPIO引腳對應寄存器寫值,到此值在寄存器中生效,是需要一定的時間的,因此可以考慮采用usleep等延時函數,適當得等待一會兒 

 

 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM