博主使用的是天嵌的板子imx6ul_corb。
内核版本为4.1.15。
这里会谈到如何修改相关设备树使其pwm可用。
现在以PWM4为例。
增加GPIO1_IO05复用为PWM4。 天嵌的PWM 驱动默认已经加载,驱动路径为drivers/pwm/pwm-imx.c。
一,内核层修改
1.修改arch/arm/boot/dts/imx6ul.dtsi,在其中搜索pwm4并修改
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.修改arch/arm/boot/dts/tq-imx6ul.dts
在&pwm1{
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
};
后添加:
&pwm4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm4>;
status = "okay";
};
在pinctrl_pwm1: pwm1grp
后面添加:
pinctrl_pwm4: pwm4grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO05__PWM4_OUT 0x110b0
>;
};
3.GPIO1_IO05其他复用的地方取消或者注释掉:
在tq-imx6ul.dts搜索GPIO1_IO05,注释掉相关定义部分:
//MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */
二,用户层使用:
1.echo 0 > /sys/class/pwm/pwmchip3/export/*设置PWM4输出,调出pwm0目录下设备节点,用于以下配置 */
2.echo 1 >/sys/class/pwm/pwmchip3/pwm0/enable/*设置PWM4使能 */
3.echo 1000000 >/sys/class/pwm/pwmchip3/pwm0/period/*设置PWM4一个周期的持续时间,单位为ns,即1K Hz */
4.echo 500000 >/sys/class/pwm/pwmchip3/pwm0/duty_cycle/*设置一个周期中的”ON”时间,单位为ns,即占空比=duty_cycle/period=50% */
查看现象:
1.示波器查看
2.LED亮度现象查看