KeyPad使用参考

Version 1.1


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配置

  1. Pioneer.dtsi

    1. Standard: 选择使用矩阵键盘大小。

      1. keypad7*7,使用PINMUX_FOR_BT1120_MODE_1

      2. keypad4*4,使用PINMUX_FOR_BT1120_MODE_2

      3. keypad3*3,使用PINMUX_FOR_BT1120_MODE_3

    2. Keypadmode:按键触发中断类型。

      1. Occur Irq in key Pressed or release. Keep all press and all release key status.

        release result will be store R17-1e->{64:128}

      2. Occur Irq in key Pressed.Keep current press and last time press status.

        last time pressd result store R17-1e->{64:128}

      3. Occur Irq in key release. Keep current release and last time release status.

        last time relsase result store R17-1e->{64:128}

      4. Occur Irq in key Pressed. Support press single key.(暂不支持使用)

    3. Keypad-rowX: 用户定义键值

  2. Keypad mode设置,修改pioneer3-ssc020a-s01a-demo-padmux.dtsi,三种选择其中一种

    1. 使用7x7键盘,设置mode为PINMUX_FOR_BT1120_MODE_1

    2. 使用4x4键盘,设置mode为PINMUX_FOR_BT1120_MODE_2

    3. 使用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按键板测试:

  1. 编译源码生成测试bin。

    arm-linux-gnueabihf-gcc –o test_keypad test_keypad.c
    
  2. 挂载至板端,执行测试bin档。

    打印按键按下/弹起键值: