am335矩陣按鍵驅動的使用
矩陣按鍵掃描原理
(即當我們按下一個矩陣鍵盤的按鍵時,如何獲取按鍵的位置)
方法有2種,一種是逐行掃描,一種是行列掃描.接下來就主要講講行列掃描.
行列掃描的話,就是一開始讓p1口高4位輸出高電平,低4位輸出低電平,若這4行按鍵里,有按鍵按下了,那么那一行按鍵對應的io的電平就會被拉低,我們就可以知道按鍵的行坐標.獲取按鍵列坐標的方法也是類似的,就是一開始讓p1口高4位輸出低電平,低4位輸出高電平,若這4列按鍵里,有按鍵按下了,那么那一列按鍵對應的io的電平就會被拉低,我們就可以知道按鍵的列坐標,獲得了行坐標x,列坐標y后,4*(x-1)+y就是按鍵的編號.
修改dtsi文件
設備樹的說明文檔參考
linux4.4.54-ti-r93/Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
linux4.4.54-ti-r93/Documentation/devicetree/bindings/input/matrix-keymap.txt
實例
matrix-keypad { compatible = "gpio-matrix-keypad"; debounce-delay-ms = <5>; col-scan-delay-us = <2>; row-gpios = <&gpio2 25 0 &gpio2 26 0 &gpio2 27 0>; col-gpios = <&gpio2 21 0 &gpio2 22 0>; linux,keymap = <0x0000008B 0x0100009E 0x02000069 0x0001006A 0x0101001C 0x0201006C>; keypad,num-rows = <2>; keypad,num-columns = <8>; };
注
(1)compatible是系統用來決定綁定到設備的設備驅動的關鍵。compatible屬性是用來查找節點的方法之一
(2)keymap的設置可以參考Documentation/devicetree/bindings/input/matrix-keymap.tx
在這里面可以看到keymap值的計算方式:row << 24 | column << 16 | key-code
(3)key-code可以參考Documentation/input/event-codes.txt文檔
按鍵使用
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-boneblack.dtb
sudo cp arch/arm/boot/dts/am335x-boneblack.dtb /media/kobe/rootfs
生成并更新dtb文件后,可以直接使用按鍵了
命令hexdump /dev/event0 可以獲取按鍵的事件
共九列:
第六列表示上報事件: 0001 --> EV_KEY; 0000 ---> EV_SYN
第七列表示鍵值: 0004
第八列表示按鍵事件: 0001 --> PRESS, 0000 --> RELEASE
小程序
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。