【飞凌iMX6ULL 开发板测评】 OKMX6ULL-C 开发板测评(四) 有朋友反馈上次那篇GPIO复用操作比较繁琐,这次调试一个功能比较简单的程序: 增加 PWM3 需要注意的是操作过程中 1、在增加IO的时候选错了IO口需要结合实物和电路图才容易选对图,很多工程师都是一拿到历程就一股脑的灌进去,很多很基础的细节都没确认,导致调试不顺利。所以细节是对于工程师来说很关键的。 2、调试过程中需要用的示波器等仪器也需要很熟悉。这样调试起来才得心应手。 如下是调试过程,请参考: CPU 默认可输出 8 路 PWM,默认背光采用的为 PWM1,增加 GPIO1_IO04 复用为 PWM3,并输 出 2.4K 的方波。 驱动默认已经加载,驱动路径为 drivers/pwm/pwm-imx.c。 修改顶层设备树文件 imx6ull.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>; }; 为 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_PWM3>, <&clks IMX6UL_CLK_PWM3>; clock-names = "ipg", "per"; #pwm-cells = <2>; }; 在设备树文件 imx6ull-14x14-evk.dts 中添加: &pwm3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm3>; status = "okay"; }; Iomux 中添加节点: pinctrl_pwm3: pwm3grp { fsl,pins = < MX6UL_PAD_GPIO1_IO04__PWM3_OUT 0x110b0 >; } 并将 GPIO1_IO04 其他复用的地方取消或者注释掉。 tsc 中 status = “disabled”; 编译设备树,替换开发板中设备树,并选择此设备树。 在开发板启动之后,命令行输入: root@fl-imx6ull:~# echo 0 > /sys/class/pwm/pwmchip2/export root@fl-imx6ull:~# echo 1 >/sys/class/pwm/pwmchip2/pwm0/enable 技术参考手册_应用笔记 OKMX6ULL-S www.forlinx.com - 5 - root@fl-imx6ull:~# echo 416667 > /sys/class/pwm/pwmchip2/pwm0/period root@fl-imx6ull:~# echo 208333 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle 此时 GPIO1_IO04 输出 2.4K 方波。 如果输出 1KHz 方波,命令如下: root@fl-imx6ull:~# echo 1000000 > /sys/class/pwm/pwmchip2/pwm0/period root@fl-imx6ull:~# echo 500000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle 测试方法: 在核心板找到 GPIO1_IO04 引脚,引脚号是 66 用示波器去量,看 PWM 波的频率 在飞凌 6ULL-S 的底板中引脚被引导 P16 上的 1 号引脚
|