跳转至

PWM

Note

表格 PWM X2 代表拓展引脚至多可配置 2 路 PWM。

Rockchip 平台拓展引脚 PWM 信息如下:

主板 SOC 平台 拓展引脚
K1 RK3568 Rockchip PWM X11
K1B RK3568 Rockchip PWM X1
K3 RK3562 Rockchip PWM X1
K7 RK3576 Rockchip PWM X7
K7C RK3576 Rockchip PWM X7
K8 RK3588 Rockchip PWM X7

Allwinner 平台拓展引脚 PWM 信息如下:

主板 SOC 平台 拓展引脚
K2B H618 Allwinner PWM X2
K2C H618 Allwinner PWM X2
K4B T113-S3 Allwinner PWM X4
K5C A133 Allwinner

PWM 节点信息

H618

H618 平台支持 4 路 PWM,节点信息如下:

节点 pin
pwm1: pwm1@300a011 PG19、PH3、PI11
pwm2: pwm2@300a012 PH2、PI12
pwm3: pwm3@300a013 PH0、PI13
pwm4: pwm4@300a014 PH1、PI14

T133

T133 平台支持 8 路 PWM,节点信息如下:

节点 pin
pwm0: pwm0@2000c10 PB5、PD16、PG12
pwm1: pwm1@2000c11 PB6、VPD17、PG6
pwm2: pwm2@2000c12 PD18、PE8、PG13
pwm3: pwm3@2000c13 PD19、PE9、PG10
pwm4: pwm4@2000c14 PD20、PE10、PG5
pwm5: pwm5@2000c15 PD21、PF6、PE13、PG4
pwm6: pwm6@2000c16 PD9、PF4、PG1
pwm7: pwm7@2000c17 PD22、PG0

A133

T133 平台支持 5 路 PWM,节点信息如下:

节点 pin
pwm0: pwm0@0300a000 PD23
pwm1: pwm1@0300a000 PB10、PD22
pwm2: pwm2@0300a000 PD20
pwm3: pwm3@0300a000 PD21
pwm4: pwm4@0300a000 PL10

RK3562

Note

pwm0m0_pins 代表 PWM0 控制器第 0 组引脚,pwm0m1_pins 代表 PWM0 控制器第 1 组引脚。
PWM 控制器若有多组引脚,同一时间仅可配置一组引脚使用。

RK3562 平台支持 16 路 PWM,节点信息如下:

节点 pinctrl
pwm0: pwm@ff230000 pwm0m0_pins
pwm0m1_pins
pwm1: pwm@ff230010 pwm1m0_pins
pwm1m1_pins
pwm2: pwm@ff230020 pwm2m0_pins
pwm2m1_pins
pwm3: pwm@ff230030 pwm3m0_pins
pwm3m1_pins
pwm4: pwm@ff700000 pwm4m0_pins
pwm4m1_pins
pwm5: pwm@ff700010 pwm5m0_pins
pwm5m1_pins
pwm6: pwm@ff700020 pwm6m0_pins
pwm6m1_pins
pwm7: pwm@ff700030 pwm7m0_pins
pwm7m1_pins
pwm8: pwm@ff710000 pwm8m0_pins
pwm8m1_pins
pwm9: pwm@ff710010 pwm9m0_pins
pwm9m1_pins
pwm10: pwm@ff710020 pwm10m0_pins
pwm10m1_pins
pwm11: pwm@ff710030 pwm11m0_pins
pwm11m1_pins
pwm12: pwm@ff720000 pwm12m0_pins
pwm12m1_pins
pwm13: pwm@ff720010 pwm13m0_pins
pwm13m1_pins
pwm14: pwm@ff720020 pwm14m0_pins
pwm14m1_pins
pwm15: pwm@ff720030 pwm15m0_pins
pwm15m1_pins

RK3568

Note

pwm0m0_pins 代表 PWM0 控制器第 0 组引脚,pwm0m1_pins 代表 PWM0 控制器第 1 组引脚。
PWM 控制器若有多组引脚,同一时间仅可配置一组引脚使用。

RK3568 平台支持 16 路 PWM,节点信息如下:

节点 pinctrl
pwm0: pwm@fdd70000 pwm0m0_pins
pwm0m1_pins
pwm1: pwm@fdd70010 pwm1m0_pins
pwm1m1_pins
pwm2: pwm@fdd70020 pwm2m0_pins
pwm2m1_pins
pwm3: pwm@fdd70030 pwm3_pins
pwm4: pwm@fe6e0000 pwm4_pins
pwm5: pwm@fe6e0010 pwm5_pins
pwm6: pwm@fe6e0020 pwm6_pins
pwm7: pwm@fe6e0030 pwm7_pins
pwm8: pwm@fe6f0000 pwm8m0_pins
pwm8m1_pins
pwm9: pwm@fe6f0010 pwm9m0_pins
pwm9m1_pins
pwm10: pwm@fe6f0020 pwm10m0_pins
pwm10m1_pins
pwm11: pwm@fe6f0030 pwm11m0_pins
pwm11m1_pins
pwm12: pwm@fe700000 pwm12m0_pins
pwm12m1_pins
pwm13: pwm@fe700010 pwm13m0_pins
pwm13m1_pins
pwm14: pwm@fe700020 pwm14m0_pins
pwm14m1_pins
pwm15: pwm@fe700030 pwm15m0_pins
pwm15m1_pins

RK3576

Note

pwm0m0_ch0 代表 PWM0 控制器通道 0 第 0 组引脚,pwm0m1_ch0 代表 PWM0 控制器通道 0 第 1 组引脚。
PWM 控制器若有多组引脚,同一时间仅可配置一组引脚使用。

RK3576 平台支持 16 路PWM,节点信息如下:

节点 pinctrl
pwm0_2ch_0: pwm@27330000 pwm0m0_ch0
pwm0m1_ch0
pwm0m2_ch0
pwm0m3_ch0
pwm0_2ch_1: pwm@27331000 pwm0m0_ch1
pwm0m1_ch1
pwm0m2_ch1
pwm0m3_ch1
pwm1_6ch_0: pwm@2add0000 pwm1m0_ch0
pwm1m1_ch0
pwm1m2_ch0
pwm1m3_ch0
pwm1_6ch_1: pwm@2add1000 pwm1m0_ch1
pwm1m1_ch1
pwm1m2_ch1
pwm1m3_ch1
pwm1_6ch_2: pwm@2add2000 pwm1m0_ch2
pwm1m1_ch2
pwm1m2_ch2
pwm1m3_ch2
pwm1_6ch_3: pwm@2add3000 pwm1m0_ch3
pwm1m1_ch3
pwm1m2_ch3
pwm1m3_ch3
pwm1_6ch_4: pwm@2add4000 pwm1m0_ch4
pwm1m1_ch4
pwm1m2_ch4
pwm1m3_ch4
pwm1_6ch_5: pwm@2add5000 pwm1m0_ch5
pwm1m1_ch5
pwm1m2_ch5
pwm1m3_ch5
pwm2_8ch_0: pwm@2ade0000 pwm2m0_ch0
pwm2m1_ch0
pwm2m2_ch0
pwm2m3_ch0
pwm2_8ch_1: pwm@2ade1000 pwm2m0_ch1
pwm2m1_ch1
pwm2m2_ch1
pwm2m3_ch1
pwm2_8ch_2: pwm@2ade2000 pwm2m0_ch2
pwm2m1_ch2
pwm2m2_ch2
pwm2m3_ch2
pwm2_8ch_3: pwm@2ade3000 pwm2m0_ch3
pwm2m1_ch3
pwm2m2_ch3
pwm2m3_ch3
pwm2_8ch_4: pwm@2ade4000 pwm2m0_ch4
pwm2m1_ch4
pwm2m2_ch4
pwm2m3_ch4
pwm2_8ch_5: pwm@2ade5000 pwm2m0_ch5
pwm2m1_ch5
pwm2m2_ch5
pwm2m3_ch5
pwm2_8ch_6: pwm@2ade6000 pwm2m0_ch6
pwm2m1_ch6
pwm2m2_ch6
pwm2m3_ch6
pwm2_8ch_7: pwm@2ade7000 pwm2m0_ch7
pwm2m1_ch7
pwm2m2_ch7
pwm2m3_ch7

RK3588

Note

pwm0m0_pins 代表 PWM0 控制器第 0 组引脚,pwm0m1_pins 代表 PWM0 控制器第 1 组引脚,其他同理。
PWM 控制器仅可配置 1 组引脚使用。

RK3588 平台支持 16 路 PWM,节点信息如下:

节点 pinctrl
pwm0: pwm@fd8b0000 pwm0m0_pins
pwm0m1_pins
pwm0m2_pins
pwm1: pwm@fd8b0010 pwm1m0_pins
pwm1m1_pins
pwm1m2_pins
pwm2: pwm@fd8b0020 pwm2m0_pins
pwm2m0_pins
pwm3: pwm@fd8b0030 pwm3m0_pins
pwm3m1_pins
pwm3m2_pins
pwm3m3_pins
pwm4: pwm@febd0000 pwm4m0_pins
pwm5: pwm@febd0010 pwm5m0_pins
pwm5m1_pins
pwm6: pwm@febd0020 pwm6m0_pins
pwm6m1_pins
pwm7: pwm@febd0030 pwm7m0_pins
pwm7m1_pins
pwm7m2_pins
pwm8: pwm@febe0000 pwm8m0_pins
pwm8m1_pins
pwm8m2_pins
pwm9: pwm@febe0010 pwm9m0_pins
pwm9m1_pins
pwm9m2_pins
pwm10: pwm@febe0020 pwm10m0_pins
pwm10m1_pins
pwm10m1_pins
pwm11: pwm@febe0030 pwm11m0_pins
pwm11m1_pins
pwm11m2_pins
pwm11m3_pins
pwm12: pwm@febf0000 pwm12m0_pins
pwm12m2_pins
pwm13: pwm@febf0010 pwm13m0_pins
pwm13m1_pins
pwm13m2_pins
pwm14: pwm@febf0020 pwm14m0_pins
pwm14m1_pins
pwm14m2_pins
pwm15: pwm@febf0030 pwm15m0_pins
pwm15m1_pins
pwm15m2_pins
pwm15m3_pins

DTS 节点配置

Rockchip 平台使能 PWM1 功能配置示例如下:

&pwm1 {
    status = "okay";
    pinctrl-0 = <&pwm1m0_pins>;
};

Allwinner 平台 Kernel 4.9 使能 PWM2 功能配置示例如下:

pwm: pwm@0300a000 {
    compatible = "allwinner,sunxi-pwm";
    reg = <0x0 0x0300a000 0x0 0x3c>; //寄存器地址配置
    pwm-number = <2>; //pwm的个数
    pwm-base = <0x0>; //pwm的起始序号
    pwms = <&pwm0>, <&pwm2>;
};

&pwm2 {
    pinctrl-0 = <&pwm2_pin_a>;
    pinctrl-1 = <&pwm2_pin_b>;
    status = "okay";
};

Allwinner 平台 Kernel 5.4 使能 PWM2 功能配置示例如下:

pwm2: pwm2@2000c12 {
    compatible = "allwinner,sunxi-pwm2";
    pinctrl-names = "active", "sleep";
    reg = <0x0 0x02000c12 0x0 0x4>;
    reg_base = <0x02000c00>;
};

&pwm2 {
    pinctrl-0 = <&pwm2_pin_a>;
    pinctrl-1 = <&pwm2_pin_b>;
    status = "okay";
};

使用说明

  • 列举已注册的 PWM 控制器节点:
ls /sys/class/pwm/
  • 查看 PWM0 控制器信息:
cat /sys/class/pwm/pwmchip0/device/uevent 

Note

控制器信息中的 OF_FULLNAME= 信息对应 PWM 节点信息:

  • 导出 PWM0 控制器通道 0 的节点:
echo 0 > /sys/class/pwm/pwmchip0/export
  • 配置 PWM0 控制器通道 0 的周期为 10000 ns:
echo 10000 > /sys/class/pwm/pwmchip0/pwm0/period
  • 配置 PWM0 控制器通道 0 的占空比为 5000 ns:
echo 5000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
  • 配置 PWM0 控制器通道 0 的极性为默认:
echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity
  • 反转 PWM0 控制器通道 0 的极性:
echo inversed > /sys/class/pwm/pwmchip0/pwm0/polarity
  • 打开 PWM0 控制器通道 0 功能:
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
  • 关闭 PWM0 控制器通道 0 功能:
echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

测试示例

  • 查看PWM 引脚

例如 K7 的 PWM0_CH1_M0 位于引脚 14。

image-20251110153230437

设置 PWM0_CH1_M0 通道,对应 pwmchip0,周期 10000ns,占空比 5000ns,极性为 normal,配置成功后,可用示波器测量 PWM0_CH1_M0 引脚,可查看波形。

root@kickpi-k7:/home/kickpi# su kickpi
kickpi@kickpi-k7:~$ su root
Password: 
root@kickpi-k7:/home/kickpi# ls /sys/class/pwm/pwmchip0/device
driver           modalias  power  subsystem                  uevent
driver_override  of_node   pwm    supplier:platform:pinctrl
root@kickpi-k7:/home/kickpi#
root@kickpi-k7:/home/kickpi# cat /sys/class/pwm/pwmchip0/device/uevent 
DRIVER=rockchip-pwm
OF_NAME=pwm
OF_FULLNAME=/pwm@27331000
OF_COMPATIBLE_0=rockchip,rk3576-pwm
OF_COMPATIBLE_N=1
MODALIAS=of:NpwmT(null)Crockchip,rk3576-pwm
root@kickpi-k7:/home/kickpi#
root@kickpi-k7:/home/kickpi# echo 0 > /sys/class/pwm/pwmchip0/export
root@kickpi-k7:/home/kickpi# echo 10000 > /sys/class/pwm/pwmchip0/pwm0/period
root@kickpi-k7:/home/kickpi# echo 5000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
root@kickpi-k7:/home/kickpi# echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity
root@kickpi-k7:/home/kickpi# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable