按键矩阵
Read time: 2 minute(s)
此章节介绍按键矩阵的使用方法以及相关配置。
Luban 可以实现按键矩阵,具体配置步骤如下
内核配置
-
在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
make kernel-menuconfig
或使用简写命令
make km
-
在内核配置界面,按如下选择:
Linux Device Drivers [*] Input device Support <*> Event interface [*] Keyboards <*> ADC Ladder Buttons
软件配置
-
在 SDK 根目录下,执行下列命令,进入 menuconfig 功能配置界面:
make menuconfig
-
按如下选择,打开 test-keyadc:
Artinchip packages Sample code [*] test-keyadc
DTS 参数配置
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
命令:keyadc_test -h
输出结果示例如下:Usage: keyadc_test [options]: -d, --device The name of event device -h, --usage Example: keyadc_test -d event0
-
以 -d 为例,keyadc_test 使用示例如下:
keyadc_test -d event0
key up pressed key left pressed key right pressed key down pressed