GPADC检测按键
1.GPADC
GPADC(General Purpose Analog to Digital Converter)是指高精度数模转换模块,拥有12bit分辨率,8位采集精度。模拟输入范围0~1.8V,最高采样率1MHz。
GPADC 驱动路径:
t113i_tinasdk5.0-v1/kernel/linux-5.4/drivers/input/sensor/sunxi_gpadc.c
t113i_tinasdk5.0-v1/kernel/linux-5.4/drivers/input/sensor/sunxi_gpadc.h
1.1 GPADC硬件介绍
查看原理图,如下:
AVCC 为 1.8V 电源供电,通过一个电阻串联到GPADC的按键组。按键通过不同阻值的电阻相连接,按下不同的按键,GPADC0 口的电压不同,CPU 通过对这个电压的采样来决定具体是哪一个按键被按下。上图按键与电压的对应关系如下表所示:
0.21V | 0.41V | 0.59V |
---|---|---|
VOL+ | VOL- | MENU |
当按键按下时,会触发 GPADC 模块的中断,CPU 会采集 GPADC 的数据,采集到的数据转换成相应的键值之后通过 input 子系统上传到 /dev/input/event
节点,程序便可以从相应的节点获取数据。
1.2 GPADC软件配置
设备树配置
GPADC 的设备树配置分为两个部分:
第一部分包括基础的寄存器配置、设备驱动绑定配置和时钟中断配置。这一部分的配置位于 t113i_tinasdk5.0-v1/kernel/linux-5.4/arch/arm/boot/dts/sun8iw20p1.dtsi
文件内。这一部分通常不需要修改。
gpadc: gpadc@2009000 {
compatible = "allwinner,sunxi-gpadc";
reg = <0x0 0x02009000 0x0 0x400>;
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_GPADC>;
clock-names = "bus";
resets = <&ccu RST_BUS_GPADC>;
status = "okay";
};
第二部分包括采样相关的配置,键值,电压数据等等,在 t113i_tinasdk5.0-v1/device/config/chips/t113_i/configs/evb1_auto/linux-5.4/board.dts
文件内。
&gpadc {
channel_num = <1>;
channel_select = <0x1>;
channel_data_select = <0>;
channel_compare_select = <0x1>;
channel_cld_select = <0x1>;
channel_chd_select = <0>;
channel0_compare_lowdata = <1700000>;
channel0_compare_higdata = <1200000>;
channel1_compare_lowdata = <460000>;
channel1_compare_higdata = <1200000>;
key_cnt = <5>;
key0_vol = <210>;
key0_val = <115>;
key1_vol = <410>;
key1_val = <114>;
key2_vol = <590>;
key2_val = <119>;
key3_vol = <750>;
key3_val = <373>;
key4_vol = <880>;
key4_val = <28>;
status = "okay";
};
内核驱动配置
进入源码根目录t113i_tinasdk5.0-v1/
执行./build.sh menuconfig
,找到Device Drivers
,进入。
找到 Input device support
,进入。
找到 Sensors
空格勾选并进入。
空格选中 <*> sunxi gpadc driver support
,保存并退出配置页面。
在源码根目录上,先编译内核./build.sh kernel
,再执行./build.sh
,最后打包./build.sh pack
。
打包完成后,生成的固件保存在 t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot
目录下,镜像是t113_i_linux_evb1_auto_uart0.img
:
ubuntu@dshanpi:~/meihao/t113i_tinasdk5.0-v1/out/t113_i/evb1_auto/buildroot$ ls -la
total 825244
drwxrwxr-x 4 ubuntu ubuntu 4096 7月 17 08:53 .
drwxrwxr-x 4 ubuntu ubuntu 4096 7月 16 20:29 ..
-rw-rw-r-- 1 ubuntu ubuntu 6 7月 17 08:53 arisc
-rwxrwxr-x 1 ubuntu ubuntu 12986128 7月 17 08:53 bImage
-rw-rw-r-- 1 ubuntu ubuntu 66 7月 17 08:53 .board.dtb.d.dtc.tmp
-rw-rw-r-- 1 ubuntu ubuntu 79218 7月 17 08:53 .board.dtb.dts.tmp
-rw-rw-r-- 1 ubuntu ubuntu 40960 7月 16 16:31 boot0_mmc_car_fastboot_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 45056 7月 16 16:31 boot0_mmcfastboot_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 49152 7月 16 16:31 boot0_nand_car_fastboot_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 53248 7月 16 16:31 boot0_nandfastboot_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 49152 7月 16 16:31 boot0_nand_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 40960 7月 16 16:31 boot0_sdcard_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 32768 7月 16 16:31 boot0_spinor_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 9521152 7月 17 08:53 boot.img
-rw-rw-r-- 1 ubuntu ubuntu 4924 7月 17 08:53 .buildconfig
drwxrwxr-x 7 ubuntu ubuntu 4096 7月 17 08:54 buildroot
-rw-rw-r-- 1 ubuntu ubuntu 127042 7月 17 08:53 .config
lrwxrwxrwx 1 ubuntu ubuntu 18 7月 17 08:53 dist -> lib/modules/5.4.61
-rwxrwxr-x 1 ubuntu ubuntu 168392 7月 17 08:53 dtc
-rw-rw-r-- 1 ubuntu ubuntu 21152 7月 16 16:31 fes1_sun8iw20p1.bin
drwxrwxr-x 3 ubuntu ubuntu 4096 7月 17 08:53 lib
-rw-rw-r-- 1 ubuntu ubuntu 4000287 7月 17 08:53 rootfs.cpio.gz
-rw-r--r-- 1 ubuntu ubuntu 186701904 7月 17 08:54 rootfs.ext4
-rw-r--r-- 1 ubuntu ubuntu 58269696 7月 17 08:54 rootfs.squashfs
-rw-rw-r-- 1 ubuntu ubuntu 86446080 7月 17 08:54 rootfs.ubifs
-rw-rw-r-- 1 ubuntu ubuntu 86016 7月 16 16:31 sboot_sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 57824 7月 17 08:53 sunxi.dtb
-rw-rw-r-- 1 ubuntu ubuntu 67864 7月 16 20:29 .sunxi.dts
-rw-rw-r-- 1 ubuntu ubuntu 2354346 7月 17 08:53 System.map
-rwxrwxr-x 2 ubuntu ubuntu 276659200 7月 16 20:29 t113_i_linux_evb1_auto_uart0.img
-rw-rw-r-- 1 ubuntu ubuntu 981756 7月 16 16:31 u-boot-sun8iw20p1.bin
-rw-rw-r-- 1 ubuntu ubuntu 5169888 7月 17 08:53 uImage
-rwxrwxr-x 1 ubuntu ubuntu 136330284 7月 17 08:53 vmlinux
-rw-rw-r-- 1 ubuntu ubuntu 62050327 7月 17 08:53 vmlinux.tar.bz2
-rwxrwxr-x 1 ubuntu ubuntu 5169824 7月 17 08:53 zImage
根据之前的烧录方式进行烧录。