按键矩阵
4 Dec 2024
Read time: 3 minute(s)
此章节介绍按键矩阵的使用方法以及相关配置。
Luban 可以实现按键矩阵,具体配置步骤如下
内核配置
在 Luban 根目录下执行 make kernel-menuconfig,进入 kernel
的功能配置,按如下选择:
Linux
Device Drivers
[*] Input device Support
<*> Event interface
[*] Keyboards
<*> ADC Ladder Buttons
软件配置
在 Luban 的根目录下通过 make menuconfig 可以打开
keyadc:
Artinchip packages
Sample code
[*] test-keyadc
DTS 参数配置
这些参数主要在文件 target/d211/方案 x/board.dts 中,功能参数的设置必须和硬件原理图相匹配
设置数据通路如下:
key_button: adc-keys {
compatible = "adc-keys";
io-channels = <&gpai 6>;
io-channel-names = "buttons";
poll-interval = <200>;
keyup-threshold-microvolt = <3000000>;
up-key {
label = "up_key";
linux,code = <KEY_UP>;
press-threshold-microvolt = <300000>;
};
down-key {
label = "down_key";
linux,code = <KEY_DOWN>;
press-threshold-microvolt = <800000>;
};
left-key {
label = "left_key";
linux,code = <KEY_LEFT>;
press-threshold-microvolt = <1400000>;
};
right-key {
label = "right_key";
linux,code = <KEY_RIGHT>;
press-threshold-microvolt = <2000000>;
};
};
其中:
-
io-channels:所选择的 io 通道
-
io-channels-names:io 通道的别名
-
poll-interval:表示获取 ADC 值的轮询间隔(单位毫秒)
-
keyup-threshold-microvolt:按键抬起时,对应 io 通道的电压(单位微伏),可设置为标准电压
-
label:键值的说明
-
linux,code:按键上报的键值
-
press-threshold-microvolt:按键按下时,对应 io 通道的电压(单位微伏)
threshold-microvolt 范围判断逻辑如下:
为了简洁表格,up-key 的 microvolt 配置简写为 mv,同理得 mv、left_mv、right_mv。keyup-threshold-microvolt 简写为 mv。
参数定义范围 | 含义 |
---|---|
(right_mv + keyup_mv)/2 <= value | no key pressed |
(left_mv + right_mv)/2 <= value < (right_mv + keyup_mv)/2 | KEY_RIGHT pressed |
(down_mv + left_mv)/2 <= value < (left_mv + right_mv)/2 | KEY_LEFT pressed |
(up_mv + down_mv)/2 <= value < (down_mv + right_mv)/2 | KEY_DOWN pressed |
value < (up_mv + down_mv)/2 | KEY_UP pressed |
注:
所有 microvolt 值需均小于 microvolt,并且 microvolt 间需均不相同。
测试指南
在 Shell 中直接运行
keyadc_test
:[aic@]# keyadc_test -h
Usage: keyadc_test [options]:
-d, --device The name of event device
-h, --usage
Example: keyadc_test -d event0
keyadc_test
的使用示例:[aic@]# keyadc_test -d event0
key up pressed
key left pressed
key right pressed
key down pressed