1.13 ADC接口
以将电阻触摸的4路触摸用作ADC为例。
1. 查看IMX6ULLRM.pdf手册中Chapter 13.2有:
采用GPIO1_IO01、GPIO1_IO02、GPIO1_IO03、GPIO1_IO04作为四路ADC。
2. 怎么查找用哪个驱动,采用config中的哪个进行配置呢?
3. 查找ADC的驱动和配置选项。
设备树文件arch/arm/boot/dts/imx6ull-14x14-evk.dts中有
#include #include "imx6ull.dtsi"
打开imx6ul.dtsi文件,此文件为通用设备树配置文件
adc1: adc@02198000 { compatible = "fsl,imx6ul-adc", "fsl,vf610-adc"; reg = <0x02198000 0x4000>; interrupts = ; clocks = <&clks IMX6UL_CLK_ADC1>; num-channels = <9>; clock-names = "adc"; status = "disabled"; };
在drviers路径下查找相关文件,如下:
neo@ubuntu:~$ grep "fsl,vf610-adc" -nr Binary file built-in.o matches Binary file iio/built-in.o matches Binary file iio/adc/built-in.o matches Binary file iio/adc/vf610_adc.o matches iio/adc/vf610_adc.c:596: { .compatible = "fsl,vf610-adc", },
查看drives/spi/Makefile文件。此文件将adc路径下的驱动文件和配置文件中具体哪个配置联系起来。vf610_adc.c文件编译之后为vf610_adc.o文件。
obj-$(CONFIG_VF610_ADC) += vf610_adc.o
查看6ULL-S的配置文件arch/arm/config/imx6ull_defconfig中CONFIG_VF610_ADC=y。
查看drivers/iio/Makefile中,要编译ADC下的文件,需要有:
obj-y += adc/
查看`,要编译iio下的文件,需要有:
obj-$(CONFIG_IIO) += iio/
查看6ul emmc的配置文件arch/arm/config/imx6ull_defconfig中CONFIG_IIO=y。
至此驱动配置完成。
4. 修改设备树文件arch/arm/boot/dts/imx6ull-14x14-evk.dts,添加adc1.
&adc1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_adc1>; vref-supply = <®_vref_3v3>; status = "okay"; };
需要用到参考电压,添加reg_vref_3v3,如图:
reg_vref_3v3: regulator@3 { compatible = "regulator-fixed"; regulator-name = "vref-3v3"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; reg = <3>; };
在&iomuxc中添加所用到的具体引脚。此处关于上下拉电阻配置部分,参考“PINMUX说明”部分进行设置。如图:
pinctrl_adc1: adc1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0 MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0 >; };
并将其他复用GPIO1_IO01、GPIO1_IO02、GPIO1_IO03、GPIO1_IO04的地方注释掉或者disabled。
5. 编译生成dtb zImage,编译内核,查看drivers/iio/adc/是否生成vf610_adc.o,如果生成,已编译进内核。如果未生成,查看是否配置出错?
6. 替换dtb zImage,并烧写,启动。
7. 查看开发板/dev下有节点iio:device0,则驱动加载成功。
或者进入cd /sys/bus/iio/devices/iio\:device0/路径查看。
阅读(1110) | 评论(0) | 转发(0) |