本例以触摸屏中断PE18为例
1.利用 sunxi_pinctrl 的 debug 节点
挂载文件节点,并进入相应目录:
mount -t debugfs none /sys/kernel/debug
cd /sys/kernel/debug/sunxi_pinctrl
1.1查看 pin 的配置:
echo PE18 > sunxi_pin
cat sunxi_pin_configure
可以看见PE18被配置为中断
执行下面命令
cat /proc/interrupts
这里可以显示从开机到现在注册的中断以及其触发次数
找到gt911中断(即PE18),此处显示,开机到现在有117次中断触发:
点击屏幕然后再次输入指令:
cat /proc/interrupts
可以看到中断次数增加
1.2修改 pin 为中断
每个 pin 都有四种属性,如复用 (function),数据 (data),驱动能力 (dlevel),上下拉 (pull),
当 (function) 为0时,表示输入, 为1输出,其它功能请具体请参考《T5_Series_User Manual_V1.0(Draft).pdf》中的<10.6 port control>小节。另外,不是所有引脚都有中断功能,中断一般是(function)6
执行下面命令
cat /proc/interrupts
这里可以显示从开机到现在注册的中断以及其触发次数
找到gt911中断(即PE18),此处显示,开机到现在有117次中断触发:
点击屏幕然后再次输入指令:
cat /proc/interrupts
可以看到中断次数增加
将PE18修改为输出模式:
echo PE18 1 > function //将PE18设置成输出
cat sunxi_pin_configure //查看修改情况
点击屏幕然后再次输入指令:
cat /proc/interrupts
发现中断次数不再变化
将PE18修改为中断模式:
echo PE18 6 > function //将PE18设置成输出
cat sunxi_pin_configure //查看修改情况
点击屏幕然后再次输入指令:
cat /proc/interrupts
发现中断次数变化
**2.在设备树中 **
gpio口对应手册《T5_Series_User Manual_V1.0(Draft).pdff》的<10.6port control>小节,请参考手册来阅读。对应驱动为与 dts 为:
kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw9p1-pinctrl.dtsi
kernel/linux-4.9/drivers/pinctrl/sunxi/pinctrl-sun50iw9p1.c
kernel/linux-4.9/drivers/pinctrl/sunxi/pinctrl-sun50iw9p1-r.c
kernel/linux-4.9/drivers/pinctrl/sunxi/pinctrl-sunxi.c
要添加或者修改 io 口时,可以通过 dts 文件, 一般在 dts 中引脚以以下方式出现 :
goodix_int = <&pio PE 18 1 0 1 0>;
其具体格式为:
name = <&pio P[A-I] [0-32] func drv_level pull value>;
其中: name:驱动中使用的名子 [A-I]:表示端口号 [0-32]:表示此端口中的引脚号 :表示此引脚要用作的功能,0 为输入,1 为输出,其它功能请具体请参考《T5_Series_User Manual_V1.0(Draft).pdf》中的<10.6 port control>小节。另外,不是所有引脚都有中断功能,中断一般是 func6,具体见手册。当找不到对应功能时(如常见的 func 7)表io disabled。 :是否使用上拉,0:不上下拉,1:上拉,2:下拉 <drv_level>:驱动能力(上下拉力度),可取值 0~3,越高驱动能越高。 :io 的初始值
如果把引脚配置为中断功能,一般在上写上6。另外,不是所有引脚都有中断功能,中断一般是 func6,具体见手册。
下图是触摸屏中断引脚配置
-END-
|