am335矩阵按键驱动使用

网友投稿 522 2022-05-29

矩阵按键扫描原理

(即当我们按下一个矩阵键盘的按键时,如何获取按键的位置)

方法有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文件后,可以直接使用按键了

am335矩阵按键驱动的使用

命令hexdump /dev/event0 可以获取按键的事件

共九列:

第六列表示上报事件: 0001 --> EV_KEY; 0000 ---> EV_SYN

第七列表示键值: 0004

第八列表示按键事件: 0001 --> PRESS, 0000 --> RELEASE

小程序

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于二轮差速小车轮速计算和里程计计算
下一篇:如何使用AppCube应用魔方创建业务大屏应用
相关文章