按鍵對映 4 查詢方式來寫按鍵驅動程式 詳解

2021-10-12 21:26:19 字數 2164 閱讀 1663

本節目標:

寫second程式,內容:通過查詢方式驅動按鍵

1.寫出框架

1.1寫file_oprations結構體,second_drv_open函式,second_drv_read函式

1.2寫入口函式,並自動建立裝置節點,修飾入口函式

1.3寫出口函式,並自動登出裝置節點,修飾出口函式

1.4 寫module_license(「gpl v2」)宣告函式許可證

1.5 在入口函式中,利用class_create和class_device_create自動建立裝置節點

在出口函式中,利用class_destroy和class_device_unregister登出裝置節點

2.寫makefile並編譯後,放在板子上insmod後,看看lsmod、cat /porc/devices、 ls -l /dev/second是否載入成功,如下圖:

3.在框架中實現硬體操作

3.1看原理圖,確定用什麼暫存器控制按鍵引腳,如下圖

按鍵0~3分別是gpf0,gpf2,gpg3,gpg11

由於是使用查詢模式,並不是外部中斷模式

所以配置 gpfcon(0x56000050)的位[0:1]、位[4:5]等於0x00(輸入模式)

gpgcon(0x56000060)的位[6:7]、位[22:23]等於0x00

通過gpgdat (0x56000054) 和gpgdat(0x56000064)來查詢按鍵狀態

3.2寫**

init入口函式中使用ioremap()函式對映暫存器虛擬位址

exit出口函式中使用iounmap()函式登出虛擬位址

open函式中配置gpxcon初始化按鍵

read函式中先檢查讀出的字元是否是4個,然後獲取gpxdat狀態,用key_vals[4]陣列儲存4個按鍵值,最後使用 copy_to_user(buf, key_vals,sizeof(key_vals)) 上傳給使用者層

4.寫測試程式secondtext.c

用法就是./ secondtext

使用read(fd,val,sizeof(val));函式讀取核心層的資料

5.然後輸入./ secondtext進行測試,按下key2時,如下圖:

6.使用./ secondtext & 後台執行測試程式

後台會一直執行這個程式,當我們有按鍵按下時,就會列印資料出來,如下圖:

7.通過top命令可以發現這個./ secondtext佔了cpu的99%時間

因為,我們的secondtext測試程式一直在while中通過查詢方式讀取按鍵狀態,這樣的效率是非常低的.

接下來開始使用中斷方式來改進按鍵驅動程式,提高效率,先來分析核心裡中斷如何執行的。

本節secondtext測試程式**如下:

#include  //呼叫sys目錄下types.**件#include  獲取檔案屬性#include #include #include /*secondtext while一直獲取按鍵資訊 */int main(int argc,char **ar**){ int fd,ret; unsigned char val[4]; fd=open("/dev/buttons

6410之寫查詢方式的按鍵驅動

查詢的方式獲取按鍵值驅動的步驟大致如下 一 框架 1.file operations的填充 2.入口函式註冊register chrdev 3.修飾入口函式 出口函式 4.自動建立裝置節點 二 硬體操作 一 框架 include include include include include inc...

arm 驅動基礎 查詢方式的按鍵驅動程式

原理圖 驅動程式 include include include include include include include include include include static struct class seconddrv class static struct class devic...

3 按鍵輸入驅動(中斷方式)

1 配置中斷優先順序分組 2 根據硬體初始化gpio為上 下拉輸入 3 外部中斷初始化 4 編寫中斷服務函式 我是分割線 一 中斷優先順序分組一般選擇為2 nvic prioritygroupconfig nvic prioritygroup 2 設定nvic中斷分組2 2位搶占優先順序,2位響應優...