am335矩阵按键驱动的使用

举报
kobesdu 发表于 2022/01/29 17:21:25 2022/01/29
【摘要】 矩阵按键扫描原理(即当我们按下一个矩阵键盘的按键时,如何获取按键的位置)方法有2种,一种是逐行扫描,一种是行列扫描.接下来就主要讲讲行列扫描.行列扫描的话,就是一开始让p1口高4位输出高电平,低4位输出低电平,若这4行按键里,有按键按下了,那么那一行按键对应的io的电平就会被拉低,我们就可以知道按键的行坐标.获取按键列坐标的方法也是类似的,就是一开始让p1口高4位输出低电平,低4位输出高电平...

矩阵按键扫描原理
(即当我们按下一个矩阵键盘的按键时,如何获取按键的位置)
方法有2种,一种是逐行扫描,一种是行列扫描.接下来就主要讲讲行列扫描.
行列扫描的话,就是一开始让p1口高4位输出高电平,低4位输出低电平,若这4行按键里,有按键按下了,那么那一行按键对应的io的电平就会被拉低,我们就可以知道按键的行坐标.获取按键列坐标的方法也是类似的,就是一开始让p1口高4位输出低电平,低4位输出高电平,若这4列按键里,有按键按下了,那么那一列按键对应的io的电平就会被拉低,我们就可以知道按键的列坐标,获得了行坐标x,列坐标y后,4*(x-1)+y就是按键的编号.
修改dtsi文件
设备树的说明文档参考
linux4.4.54-ti-r93/Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
linux4.4.54-ti-r93/Documentation/devicetree/bindings/input/matrix-keymap.txt
实例

matrix-keypad {
compatible = "gpio-matrix-keypad";
debounce-delay-ms = <5>;
col-scan-delay-us = <2>;
row-gpios = <&gpio2 25 0
&gpio2 26 0
&gpio2 27 0>;
col-gpios = <&gpio2 21 0
&gpio2 22 0>;
linux,keymap = <0x0000008B
0x0100009E
0x02000069
0x0001006A
0x0101001C
0x0201006C>;
keypad,num-rows = <2>;
keypad,num-columns = <8>;
};



(1)compatible是系统用来决定绑定到设备的设备驱动的关键。compatible属性是用来查找节点的方法之一
(2)keymap的设置可以参考Documentation/devicetree/bindings/input/matrix-keymap.tx
在这里面可以看到keymap值的计算方式:row << 24 | column << 16 | key-code
(3)key-code可以参考Documentation/input/event-codes.txt文档
按键使用
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-boneblack.dtb
sudo cp arch/arm/boot/dts/am335x-boneblack.dtb /media/kobe/rootfs
生成并更新dtb文件后,可以直接使用按键了
命令hexdump /dev/event0 可以获取按键的事件
共九列:
第六列表示上报事件: 0001 --> EV_KEY; 0000 ---> EV_SYN
第七列表示键值: 0004
第八列表示按键事件: 0001 --> PRESS, 0000 --> RELEASE


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。