PWM 驱动调试指南
X5有两类控制器:一类是标准PWM,有4组,每组2路输出,共8个PWM输出,另一类是LPWM,共两组,每组4路PWM输出,主要用于支持Sensor的同步曝光。
- PWM 默认支持频率范围为 0.05Hz - 1MHz,占空比寄存器 RATIO 精度为 16bit,周期有效时间为 1us 到 20s,占空比有效时间为 10ns 到 20s;
- LPWM 默认支持频率范围是1Hz到1MHz,输出脉冲宽度范围为 1us~ 4ms;
- LPWM是为了Sensor 同步设计的,不是一个通用的PWM,单纯PWM功能建议使用PWM。
驱动代码
代码路径
PWM代码路径
drivers/pwm/pwm-hobot.c
LPWM代码路径
kernel/drivers/media/platform/horizon/camsys/lpwm/
内核配置
/* arch/arm64/configs/hobot_x5_rdk_ubuntu_defconfig */
...
CONFIG_HOBOT_LPWM=m
...
CONFIG_PWM_DROBOT=y
...
DTS节点配置
X5 PWM及LPWM控制器设备树定义位于SDK包的kernel文件夹下的arch/arm64/boot/dts/hobot/x5.dtsi文件内。
备注
x5.dtsi中的节点主要声明SoC共有特性,和具体电路板无关,一般情况下不用修改。
当需要使能特定PWM端口输出的时候,可以到对应的板级文件修改,这里以x5-rdk-v1p0.dts为例,使能lpwm1_0, lpwm1_1, pwm0_0, pwm0_1, pwm1_0, pwm1_1, pwm2_0, pwm2_1, pwm3_0, pwm3_1。
&lpwm1 {
status = "okay";
pinctrl-names = "default";
/** for display backlight **/
pinctrl-0 = <&pinctrl_lpwm1_0 &pinctrl_lpwm1_1>;
};
&pwm0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm0_0 &pinctrl_pwm0_1>;
};
&pwm1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1_0 &pinctrl_pwm1_1>;
};
&pwm2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2_0 &pinctrl_pwm2_1>;
};
&pwm3 {
/* LSIO_PWM_OUT6 and LSIO_PWM_OUT7 */
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm3_0 &pinctrl_pwm3_1>;
};