• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之PWM

02/06 09:40
1112
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

PWM是Pulse Width Modulation 的缩写,是指脉冲宽度调制,通过调节脉冲的宽度输出想要的波形。ELF 1开发板上使用到PWM功能的设备有两个,一个是LCD屏的背光控制,一个是蜂鸣器。接下来实现使用PWM驱动蜂鸣器的配置操作。

硬件原理

板子上控制蜂鸣器的引脚网络名为PWM2,通过引脚网络名可确定到其球号为M15,再通过球号确定到引脚名称PAD NAME为GPIO1_IO09。

IOMUX配置

从上图可以看出PWM2连接到了连接器的65脚。接下来我们需要找到这个引脚在软件上的信号名称。我们需要打开硬件资料中的 ELF 1开发板资料包5-硬件资料5-4 管脚分配表找到65引脚的信号名称。

可以看到连接器的65引脚信号名称为GPIO1_IO09。

因为需要使用PWM控制蜂鸣器,所以我们需要把它复用成PWM功能,在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它们的宏定义,如下:

然后打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,在&iomux节点下添加子节点pinctrl_pwm2:

pinctrl_pwm2: pwm2grp {

                        fsl,pins = <

                             MX6UL_PAD_GPIO1_IO09__PWM2_OUT   0x110b0

                        >;

                };

添加后效果如下:

配置完PWM2之后,一定要检查一下在设备树的其他地方是否把GPIO1_IO09复用为其他功能了。我们先在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中搜索引脚PAD NAME“GPIO1_IO09”,在&iomux的子节点pinctrl_hog_1节点下搜索到了GPIO1_IO09的另一个功能复用配置,将该引脚复用成了GPIO功能,用于TF卡的复位,ELF 1开发板没有使用此功能,所以将这一句注释掉:

此外,还需要注释掉节点下的如下内容:

添加设备节点

在设备树文件arch/arm/boot/dts/imx6ull.dtsi文件中已经定义好此8路PWM信号的相关节点,在此文件中只需要将我们使用的PWM2的时钟配置上即可,将clock属性的IMX6UL_CLK_DUMMY更改为IMX6UL_CLK_PWM2:

然后打开arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,其中可以看到已经存在了PWM1相关节点,PWM1就是输出给LCD的背光使用的。在&pwm1节点下添加节点&pwm2:

&pwm2 {

        pinctrl-names = "default";

        pinctrl-0 = <&pinctrl_pwm2>;

        status = "okay";

};

添加后效果如下:

编译测试

由于pwm只涉及到设备树修改,我们不再使用脚本编译,单独编译设备树即可:

. /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

使用scp将设备树拷贝到开发板:

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操作后重启开发板:

重启开发板,将PWM2设置为输出:

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/export

使能PWM2功能:

root@ELF1:~#:~# echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable

设置PWM周期,单位为ns:

root@ELF1:~#:~# echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period

设置PWM占空比为50%:

root@ELF1:~#:~# echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

此时可以听到蜂鸣器响起。关闭蜂鸣器,失能PWM2功能:

root@ELF1:~#:~# echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable

注意:当执行到如下内容卡住时,请重启板子,并根据前文检查设备树修改。

相关推荐