KeyPad使用参考
1. 概述¶
为方便用户使用矩阵按键,开发板规划了14个IO口,最大支持7x7键盘,共49个按键。由底层硬件直接处理按键信息,减轻cpu负担。
2. UBOOT配置¶
2.1. 修改keypad上报的键值¶
在kernel/drivers/mstar/keypad/mdrv_keypad.c
中修改以下二维数组即可改变上报键值:
2.2. 修改uboot下的使用的keypad大小¶
1:keypad7*7,使用KP_E_STANDARD_MODE1
2:keypad4*4,使用KP_E_STANDARD_MODE2
3:keypad3*3,使用KP_E_STANDARD_MODE3
默认使用keypad7*7,且初始化过程中padmux自动切换。
2.3. 打开Mstar drivers对Keypad的配置¶
选中SSTAR_KEYPAD使得keypad driver编进uboot。
2.4. Uboot下扫描键值¶
在boot/common/board_r.c
中上图位置处判断uboot启动过程中是否有按键按下。
如果检测到按键按下,处理逻辑中时间过长,则需要trigger watchdog。 按键扫描不在main_loop()的func中,故进入uboot cmd line无法检测到按键按下。 仅支持在uboot启动过程中检测按键是否按下,完成一些客制化操作。
3. Kernel配置¶
3.1. Demo板支持的keypad padmux¶
表2-1
KeyPad Group | Mode | GPIO | DEV |
---|---|---|---|
7x7 | 1 | PAD_KEY0 ~ PAD_KEY13 | /dev/input/event0 or /dev/input/event1 |
4x4 | 2 | PAD_KEY0 ~ PAD_KEY7 | |
3x3 | 3 | PAD_KEY8 ~ PAD_KEY13 |
3.2. KeyPad的dts配置¶
-
Pioneer.dtsi
-
Standard: 选择使用矩阵键盘大小。
-
keypad7*7,使用PINMUX_FOR_BT1120_MODE_1
-
keypad4*4,使用PINMUX_FOR_BT1120_MODE_2
-
keypad3*3,使用PINMUX_FOR_BT1120_MODE_3
-
-
Keypadmode:按键触发中断类型。
-
Occur Irq in key Pressed or release. Keep all press and all release key status.
release result will be store R17-1e->{64:128}
-
Occur Irq in key Pressed.Keep current press and last time press status.
last time pressd result store R17-1e->{64:128}
-
Occur Irq in key release. Keep current release and last time release status.
last time relsase result store R17-1e->{64:128}
-
Occur Irq in key Pressed. Support press single key.(暂不支持使用)
-
-
Keypad-rowX: 用户定义键值
-
-
Keypad mode设置,修改pioneer3-ssc020a-s01a-demo-padmux.dtsi,三种选择其中一种
-
使用7x7键盘,设置mode为PINMUX_FOR_BT1120_MODE_1
-
使用4x4键盘,设置mode为PINMUX_FOR_BT1120_MODE_2
-
使用3x3键盘,设置mode为PINMUX_FOR_BT1120_MODE_3
-
3.3. Kernel Config¶
打开SStar I2C对Keypad的配置
4. KEYPAD短接帽配置¶
-
使用7x7键盘,所有短接帽都靠左接
-
使用4x4键盘,SW1 ~ SW8靠右接
-
使用3x3键盘,SW9 ~ SW14靠右接
5. KEYPAD测试¶
5.1. Kernel下测试Keypad¶
以使用7x7Keypad为例,确保Keypad对应的pin脚不被占用。
查看当前Keypad mode。7x7 Keys:mode1;4x4 Keys:mode2;3x3 Keys,mode3。
Keypad mode对应reg地址为103ce4(读取16位地址时e4右移一位为72)。
读取到mode为1,使用7x7的按键设定。
查看Keypad设备节点,Keypad对应event0。
测试按键:
按下按键和释放按键会显示键值和event信息。
6. DEMO示例¶
6.1. Kernel demo示例¶
测试源码test_keypad.c
使用7x7 Keypad按键板测试:
-
编译源码生成测试bin。
arm-linux-gnueabihf-gcc –o test_keypad test_keypad.c
-
挂载至板端,执行测试bin档。
打印按键按下/弹起键值: