修改文件
以开启PWM14_M1为例进行说明。
在rk3568.dtsi文件中配置时钟及管脚:
pwm14: pwm@fe700020 {
compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";
reg = <0x0 0xfe700020 0x0 0x10>;
#pwm-cells = <3>;
pinctrl-names = "active";
pinctrl-0 = <&pwm14m1_pins>;
clocks = <&cru CLK_PWM3>, <&cru PCLK_PWM3>;
clock-names = "pwm", "pclk";
status = "disabled";
};
在rk3566-rk817-tablet.dts文件中使能pwm14:
&pwm14 {
status = "okay";
};
有尝试在&pwm14下重新配置pinctrl-0,但是不能成功。
编译固件并烧写
重新编译内核生成boot.img,将boot.img烧写到设备,设备启动后通过shell指令查询pwm相关信息。
查看pwm debug:
[root@RK356X:/]# cat /sys/kernel/debug/pwm
platform/fe700020.pwm, 1 PWM device
pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: inverse
platform/fe6f0010.pwm, 1 PWM device
pwm-0 (backlight ): requested enabled period: 25000 ns duty: 20125 ns polarity: inverse
platform/fe6e0000.pwm, 1 PWM device
pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: inverse
可以看出总共有三个pwm,第二个作为backlight,并且配置了周期和占空比;
查看pwm节点:
[root@RK356X:/]# cd /sys/class/pwm/
[root@RK356X:/sys/class/pwm]# ls
pwmchip0 pwmchip1 pwmchip2
[root@RK356X:/sys/class/pwm]# cd pwmchip2
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2]#
可以看到有三个pwm,编号从0开始,pwm0对应所有使能的pwm通道中编号最小的一个,也可以通过外设地址来确认,如pwm14的外设地址为fe700020 ;
设置 pwm0 输出频率 100K,占空比 50%, 极性为正极性:
enable:写入 1 使能 pwm,写入 0 关闭 pwm;
polarity:有 normal 或 inversed 两个参数选择,表示输出引脚电平翻转;
duty_cycle:在 normal 模式下,表示一个周期内高电平持续的时间(单位:纳秒),在 reversed 模
式下,表示一个周期中低电平持续的时间(单位:纳秒);
period:表示 pwm 波的周期(单位:纳秒);
[root@RK356X:/]# cd /sys/class/pwm/
[root@RK356X:/sys/class/pwm]# ls
pwmchip0 pwmchip1 pwmchip2
[root@RK356X:/sys/class/pwm]# cd pwmchip2
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2]# echo 0 > export
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2]# cd pwm0/
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2/pwm0]# echo 10000 >
period
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2/pwm0]# echo 5000 >
duty_cycle
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2/pwm0]# echo normal
> polarity
[root@RK356X:/sys/devices/platform/fe700020.pwm/pwm/pwmchip2/pwm0]# echo 1 > ena
ble
如硬件上没有产生PWM波,则需要查看下DTS文件中此管脚是否配置了其它功能。