基于iMX6UL的PWM使用方法,这里将以PWM4作为示例,以下为PWM部分设置示例及解析:
- 修改内核源码imx6ul.dtsi:
找到下面代码
pwm3: pwm@02088000 {
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
reg = <0x02088000 0x4000>;
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_DUMMY>,
<&clks IMX6UL_CLK_DUMMY>;
clock-names = "ipg", "per";
#pwm-cells = <2>;
};
在其下面添加:
pwm4: pwm@0208c000 {
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
reg = <0x0208c000 0x4000>;
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_PWM4>,
<&clks IMX6UL_CLK_PWM4>;
clock-names = "ipg", "per";
#pwm-cells = <2>;
};
2.在imx6ul.dts搜索pinctrl_pwm1
pinctrl_pwm1: pwm4grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO08__PWM4_OUT 0x110b0
>;
};
在其下面添加:
pinctrl_pwm4: pwm4grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO05__PWM4_OUT 0x110b0
>;
};
3.因为添加PWM4使用的是GPIO1_IO5 所以搜索注释用到gpio1_io5的地方
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
//MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */
MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x03029 /* SD1 RESET */
>;
};
4.测试
# echo 0 > /sys/class/pwm/pwmchip3/export //设置PWM输出,调出pwm0目录下设备节点
# echo 1 > /sys/class/pwm/pwmchip3/pwm0/enable //设置使能
# echo 1000000 > /sys/class/pwm/pwmchip3/pwm0/period //设置周期
# echo 500000 > /sys/class/pwm/pwmchip3/pwm0/duty_cycle //设置占空比
可用示波器或者led灯亮度来查看现象。