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

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

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

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

硬件原理

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

IOMUX配置

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

pinctrl_adc1: adc1grp {

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

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

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

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

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

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

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

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

interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;

clocks = <&clks IMX6UL_CLK_ADC1>:開啟時(shí)鐘

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

clock-names = "adc":時(shí)鐘名稱。

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

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

&adc1 {

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

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

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

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

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

};

num-channels = <6>:因?yàn)槲覀兪褂玫氖茿DC1_IN5,所以,需要開啟6路ADC通道。

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

?reg_adc1_vref: regulator@2 {

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

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

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

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

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

添加驅(qū)動(dòng)

使用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ū)動(dòng):

替換配置文件

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

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

編譯測(cè)試

編譯內(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/

進(jìn)行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é)可變電阻,可觀察該值的變化,因?yàn)锳DC為12位精度,所以該值的范圍為0~4095。

相關(guān)推薦