本文件以sc806-cn-00(8909平台)為例,結合實際的原理圖,說明矩陣鍵盤配置方法。
下面是乙個鍵盤的原理圖,4*5的矩陣鍵盤,行號為row0-3,列號為col0-4。
嗯,鍵盤圖畫的很漂亮。
ok,我們開始看看相關的文件:
kernel/documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
kernel/documentation/devicetree/bindings/input/matrix-keymap.txt
開啟gpio-matrix-keypad.txt:
把example這部分內容,原樣copy到 kernel/arch/arm/boot/dts/qcom/sc806-evk/msm8909-mtp.dtsi
修改:debounce-delay-ms = <200>
col-scan-delay-us = <200>
上述兩個值,根據實際按鍵效果自行調整,避免誤判和錯判。
matrix-keymap.txt 對 linux,keymap做了解釋:
以某個值為例:
以原理圖的key8為例,是由row3*col0交叉而成,行號:0x03;列號:0x00
那麼鍵值是多少呢?
key8對應」←」功能鍵,查詢kernel/include/uapi/linux/input.h,裡面列出了所有鍵值。
到這裡,我們確定了key8的鍵值是105,換算成16進製制0x69。
那麼key8在keymap中對應的值就是:0x03000069,鍵值不夠16bit高位用0補齊。
現在我們寫下里程碑的第乙個keymap值:
linux,keymap = <0x03000069 //105 key_left
用同樣的辦法,參考原理圖,計算出其他按鍵對應的keymap值。
keymap值的排列順序無所謂,可以按照個人喜好,只要和實際電路圖相符即可。
這一步很簡單,根據原理圖找出行和列對應的gpio管腳,注意是gpio號,不是模組的管腳編號。
把上圖的資訊整理並順序填入 kernel/arch/arm/boot/dts/qcom/sc806-evk/msm8909-mtp.dtsi
在 kernel/arch/arm/configs/la0920_defconfig 和 kernel/arch/arm/configs/la0920_user_defconfig中增加編譯選項:
config_keyboard_matrix=y
提取碼:9w4n
矩陣鍵盤掃瞄
矩陣鍵盤掃瞄一般採取行列掃瞄法。比如先拉低所有列線,拉高行線,之後讀取行線狀態,如果行線有一行為低,則假設有按鍵按下,此時再延時20毫秒左右後判 斷行線的某一行是否仍然為低,若為低則確認有鍵按下。這時可以進行按鍵鍵值判斷,即判別在哪一行哪一列有按鍵按下。判斷的方法是通過拉高列線,依次置行線 的某一行...
矩陣鍵盤掃瞄
矩陣鍵盤掃瞄 module matrix keyboard input clk 50m,50m時鐘 input rst n,復位 input 3 0 row,矩陣鍵盤行輸入 output reg 3 0 col,矩陣鍵盤列輸出 output reg key flag,按鍵按下標誌 output re...
矩陣鍵盤掃瞄
根據矩陣鍵盤的原理圖可知,當沒有按鍵按下時,p1 0xf0 然後依次將p1 0 p1 3單獨置低電平,其他置高,再掃瞄各列的狀態,來判斷是哪個按鍵按下,比如,將p1 0輸出低電平,其他的引腳都輸出高電平,即p1 0xfe,那麼當第1行有按鍵按下時p1的相應值為,1x1 01111110 0x7e 1...