imx6ull ADC
程序员文章站
2022-12-02 17:22:57
目录一、硬件资源二、设备树2.1 设置通道数2.2 关闭电阻触摸2.3 设置pinctrl2.4 重新编译设备树2.5 更新设备树三、ADC使用四、C语言操作一、硬件资源 imx6ull开发板默认将电阻屏幕的4个引脚没有使用,这4个引脚可以作为ADC使用,其对应关系如下:功能名GPIOADCGPIO1_00in_voltage0_rawTS_YNGPIO1_01in_voltage1_rawTS_YPGPIO1_02in_voltage2_rawT...
一、硬件资源
imx6ull开发板默认将电阻屏幕的4个引脚没有使用,这4个引脚可以作为ADC使用,其对应关系如下:
功能名 | GPIO | ADC |
---|---|---|
GPIO1_00 | in_voltage0_raw | |
TS_YN | GPIO1_01 | in_voltage1_raw |
TS_YP | GPIO1_02 | in_voltage2_raw |
TS_XN | GPIO1_03 | in_voltage3_raw |
TS_XP | GPIO1_04 | in_voltage4_raw |
二、设备树
在使用ADC前,需要在设备树中进行设置,设置如下:
2.1 设置通道数
如需要使用4个ADC引脚,则需要设置通道数为5(GPIO1_IO00占用一个)。
&adc1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_adc1>;
num-channels = <5>;
status = "okay";
};
2.2 关闭电阻触摸
因ADC和电阻触摸屏使用了同样的引脚,所以使用ADC时,需关闭电阻触摸功能。
&tsc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_tsc>;
xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
measure_delay_time = <0xffff>;
pre_charge_time = <0xfff>;
status = "disabled";
};
注,如需同时使用ADC和电阻触摸,可选择其他引脚使用。
2.3 设置pinctrl
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
>;
};
2.4 重新编译设备树
build-dtb.sh
2.5 更新设备树
笔者喜欢用tftp更新,命令如下
# 在开发板执行
cd /run/media/mmcblk1p1
rm imx6ull-xly-emmc-lcd.dtb
tftp -g -r imx6ull-xly-emmc-lcd.dtb 192.168.1.180
sync
后面IP地址为tftp服务器IP,读者需要替换为自己的IP地址。
更新完设备树后,直接重启即可。
三、ADC使用
对ADC的读取可以直接通过/sys/bus/iio/devices/iio:device0下面的文件读取得到。
cd /sys/bus/iio/devices/iio:device0
cat in_voltage1_raw
目录中,in_voltage1_raw,in_voltage2_raw2,in_voltage3_raw,in_voltage4_raw中的内容就是ADC的值。由于IMX6ULL ADC为12位,所以其最小值为0,对应0V,最大值为4095(2^12),对应3.3V。
四、C语言操作
如需使用C语言操作ADC,可直接使用C文件操作,打开/sys/bus/iio/devices/iio:device0/in_voltagex_raw,读取里面的内容即可。
本文地址:https://blog.csdn.net/xinluyao/article/details/109003441