加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

如何在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的PWM功能

09/09 16:56
994
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

本次源碼適配項(xiàng)目是在NXP i.MX6ULL EVK評(píng)估板所搭載的Linux內(nèi)核源碼(版本為L(zhǎng)inux-imx_4.1.15)基礎(chǔ)上進(jìn)行的,主要目標(biāo)是通過調(diào)整功能接口引腳配置,使其適應(yīng)ELF 1開發(fā)板。為了深入闡述這一適配過程,我們將以PWM功能的適配作為具體示例,深入解析整個(gè)流程。

1、準(zhǔn)備工作
NXP源碼路徑:ELF1開發(fā)板資料包7-NXP 原廠資料7-1 NXP官方源碼linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
(1)將NXP源碼拷貝到開發(fā)環(huán)境home/root/work目錄下解壓
elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2
elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls
(2)添加默認(rèn)配置文件

將arch/arm/configs路徑下的imx_v7_mfg_defconfig復(fù)制一份,命名為imx6ull_elf1_defconfig

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig
(3)添加ELF 1設(shè)備樹

將arch/arm/boot/dts路徑下的imx6ull-14x14-evk.dts復(fù)制一份,命名為imx6ull-elf1-emmc.dts

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts
打開arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,將imx6ull-elf1-emmc.dts添加到Makefile中。
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

(4)建立交叉編譯腳本

建立一個(gè)編譯腳本build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh
添加以下內(nèi)容,保存退出
#!/bin/bash
export CPUS=`grep -c processor /proc/cpuinfo` 
source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make distclean
make imx6ull_elf1_defconfig
make -j${CPUS}
rm -rf ./.tmp
make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/
cd .tmp/rootfs/
tar -jcvf modules.tar.bz2 *
給予腳本權(quán)限
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh
2、適配PWM
(1)硬件原理
開發(fā)板上控制蜂鳴器的引腳網(wǎng)絡(luò)名為PWM2,通過引腳網(wǎng)絡(luò)名可確定到其球號(hào)為M15,再通過球號(hào)確定到引腳名稱PAD NAME為GPIO1_IO09。
(2)IOMUX配置

從上圖可以看出PWM2連接到了連接器的65腳。接下來我們需要找到這個(gè)引腳在軟件上的信號(hào)名稱。

打開ELF 1開發(fā)板資料包5-硬件資料5-4 管腳分配表ELF 1引腳復(fù)用對(duì)照表找到65引腳的信號(hào)名稱。

可以看到連接器的65引腳信號(hào)名稱為GPIO1_IO09。
因?yàn)樾枰褂肞WM控制蜂鳴器,所以需要把它復(fù)用成PWM功能,在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它們的宏定義,如下:
打開設(shè)備樹文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux節(jié)點(diǎn)下添加子節(jié)點(diǎn)pinctrl_pwm2:
pinctrl_pwm2: pwm2grp {
                        fsl,pins = <
                             MX6UL_PAD_GPIO1_IO09__PWM2_OUT   0x110b0
                        >;
                };
效果如下:
配置完P(guān)WM2之后,檢查設(shè)備樹中是否把GPIO1_IO09復(fù)用成其它功能了。在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中搜索引腳PAD NAME“GPIO1_IO09”,在&iomux的子節(jié)點(diǎn)pinctrl_hog_1節(jié)點(diǎn)下搜索到了GPIO1_IO09的另一個(gè)功能復(fù)用配置,將該引腳復(fù)用成了GPIO功能,用于TF卡的復(fù)位,ELF 1開發(fā)板沒有使用此功能,可以將其注釋掉。
此外,還需要注釋掉節(jié)點(diǎn)下的如下內(nèi)容

(3)設(shè)備節(jié)點(diǎn)配置

在設(shè)備樹文件arch/arm/boot/dts/imx6ull.dtsi中已經(jīng)定義好了8路PWM信號(hào)的相關(guān)節(jié)點(diǎn),只需要將PWM2的時(shí)鐘配置上即可,將clocks屬性的IMX6UL_CLK_DUMMY更改為IMX6UL_CLK_PWM2。

打開arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,已經(jīng)存在PWM1相關(guān)節(jié)點(diǎn),PWM1是輸出給LCD的背光使用的。在&pwm1節(jié)點(diǎn)下添加節(jié)點(diǎn)&pwm2。
&pwm2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
};
效果如下:
(4)編譯

由于pwm只涉及到設(shè)備樹修改,不再使用腳本編譯,單獨(dú)編譯設(shè)備樹即可。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make dtbs
將編譯生成的imx6ull-elf-emmc.dtb拷貝到ELF 1開發(fā)板的/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/
保存并重啟開發(fā)板

root@ELF1~# sync
root@ELF1~# reboot
3、PWM測(cè)試

待開發(fā)板啟動(dòng)完成,將PWM2設(shè)置為輸出

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/export
使能PWM2功能

root@ELF1:~#:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
設(shè)置PWM周期,單位為ns

root@ELF1:~#:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
設(shè)置PWM占空比為50%

root@ELF1:~#:~# echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
此時(shí)可以聽到蜂鳴器響起。關(guān)閉蜂鳴器,失能PWM2功能

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
至此,就完成了在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的PWM功能,期望這份詳實(shí)的指南能為正在閱讀的小伙伴帶來實(shí)質(zhì)性的助益與啟發(fā),在嵌入式開發(fā)之旅上,愿我們攜手共進(jìn),探索無限可能。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AD73311ARSZ 1 Analog Devices Inc Single-Channel, 3 V and 5 V Front-End Processor for General Purpose Applications Including Speech and Telephony

ECAD模型

下載ECAD模型
$10.72 查看
AT27C256R-70JU-306 1 Microchip Technology Inc IC OTP 256KBIT 70NS 32PLCC
暫無數(shù)據(jù) 查看
511FBA125M000BAG 1 Silicon Laboratories Inc LVDS Output Clock Oscillator,

ECAD模型

下載ECAD模型
$3.39 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜