• 正文
    • 硬件原理
    • IOMUX配置
    • 添加設(shè)備節(jié)點
    • 添加驅(qū)動
    • 編譯測試
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之ADC

02/25 17:30
813
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

ADC(Analog-to-Digital Converter),顧名思義就是模數(shù)轉(zhuǎn)換器。i.MX6ULL有兩組12位ADC,ADC1和ADC2,每一組ADC有10路輸入引腳(ADC1和ADC2共同復(fù)用這10路,所以實際一共10路ADC)。ELF?1只用了一個ADC1引腳連接到可變電阻上,用來演示ADC功能。

硬件原理

使用的是ADC1_IN5,對應(yīng)的PAD NAME是GPIO1_IO05。

IOMUX配置

在iomuxc節(jié)點下添加子節(jié)點:

pinctrl_adc1: adc1grp {

????????????????????????fsl,pins = <

????????????????????????????????MX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x00b0

????????????????????????>;

????????????????};

添加設(shè)備節(jié)點

在arch/arm/boot/dts/imx6ull.dtsi文件中已經(jīng)存在adc1節(jié)點:

在compatible屬性中有兩個驅(qū)動匹配項,"fsl,imx6ul-adc","fsl,vf610-adc",實際上在我們的內(nèi)核源碼中沒有"fsl,imx6ul-adc"對應(yīng)驅(qū)動,所以我們使用的是"fsl,vf610-adc"驅(qū)動。

reg是ADC1對應(yīng)的一些寄存器的起始地址和這些寄存器所占用的長度;

interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;

clocks = <&clks IMX6UL_CLK_ADC1>:開啟時鐘

num-channels = <2>:開啟ADC的通道,這里默認設(shè)置的是開啟ADC1_IN0和ADC1_IN1。

clock-names = "adc":時鐘名稱。

status = disable:默認是關(guān)閉狀態(tài)。

我們需要在arch/arm/boot/dts/imx6ull-elf1-emmc.dts中,增加和修改adc1節(jié)點配置:

&adc1 {

????????pinctrl-names = "default";

????????pinctrl-0 = <&pinctrl_adc1>;

????????num-channels = <6>;

????????vref-supply = <&reg_adc1_vref>;

????????status = "okay";

};

num-channels = <6>:因為我們使用的是ADC1_IN5,所以,需要開啟6路ADC通道。

vref-supply = <&reg_adc1_vref>;adc的參考電壓,引用了reg_adc1_vref節(jié)點,我們還需要在regulators節(jié)點下添加reg_adc1_vref子節(jié)點:

?reg_adc1_vref: regulator@2 {

????????????????compatible = "regulator-fixed";

????????????????regulator-name = "vref-3v3";

????????????????regulator-min-microvolt = <3300000>;

????????????????regulator-max-microvolt = <3300000>;

????????????????};

添加驅(qū)動

使用make menuconfig打開圖形化配置界面:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?make menuconfig

在Device Drivers菜單下添加:

Device Drivers

-> Industrial I/O support

-> Analog to digital converters

路徑下添加vf610驅(qū)動:

替換配置文件

通過make menuconfig修改的內(nèi)容寫入到了.config文件,當(dāng)使用make imx6ull_elf1_defconfig配置內(nèi)核源碼時,.config文件會被覆蓋,因此,需要替換原有的imx6ull_elf1_defconfig。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?cp .config arch/arm/configs/imx6ull_elf1_defconfig

編譯測試

編譯內(nèi)核和設(shè)備樹并拷貝到開發(fā)板

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?./build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?scp arch/arm/boot/zImage ?root@172.16.0.175:/run/media/mmcblk1p1/

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$?scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

進行sync操作后重啟開發(fā)板:

在/sys/bus/iio/devices/iio:device0下發(fā)現(xiàn)in_voltage5_raw:

root@ELF1:~#?ls /sys/bus/iio/devices/iio:device0

使用cat in_voltage5_raw查看ADC1_IN5的值:

root@ELF1:~#?cat?/sys/bus/iio/devices/iio:device0/in_voltage5_raw

950

調(diào)節(jié)可變電阻,可觀察該值的變化,因為ADC為12位精度,所以該值的范圍為0~4095。

相關(guān)推薦