跳转至

PWM

概述

PWM 模块用于生成 PWM 信号。

功能描述

PWM 模式具有以下功能特点:

  • 支持8路PWM。

  • 支持将 PWM 分组绑定,实现互补输出,最多支持 4 组分组。

  • 支持 PWM 输出恒为 0、1 或高阻。

  • PWM 占空比支持 0~100% (256 档)。

  • 支持 PWM 不同配置间的平滑切换。

工作方式

PWM0~7 模块支持 2 个时钟源:晶振时钟;PLL 时钟。

以配置 PWM0 信号对 80M 时钟分频、分频倍数为 25 倍、占空比为 1/5 为例,配置步骤如下:

步骤 1 写 CLDO_CRG_CLK_SEL[pwm_cksel]为 0x1,将 PWM 时钟置为 80M。

步骤 2 写 PWM_ABNOR_STATE_CLR0[pwm_abnor_state_clr0]为 0xFFFF,写 PWM_ABNOR_STATE_CLR1[pwm_abnor_state_clr1]为 0xFFFF,清除异常状态。

步骤 3 写 PWM_EN[pwm_en_0]为 1,使能 PWM0。

步骤 4 写 PWM_FREQ_L[pwm_freq_I_0]为 0x19,配置分频倍数为 25。

步骤 5 写 PWM_DUTY_L[pwm_duty_l_0]为 0x5,配出占空比 1/5。

步骤 6 写 PWM_PORTITY[pwm_poarity_0]为 0,PWM 输出极性为正向极性。

步骤 7 写 PWM_SEL[pwm_sel_0]为 0x1,配置第一组使用的 PWM0。

步骤 8 写 PWM_STARTCLRCNT_EN[pwm_startclrcnt_en_0]为 1,在 start 时刻对 PWM 内部寄存器载入配置并清零计数器。

步骤 9 写 PWM_START[pwm_start_0]为 1,配置 PWM0 新配置生效。

----结束

寄存器概览

PWM 寄存器概览如表 6-12 所示。

表6-10 PWM 寄存器概览(基址是 0x4402_4000)

偏移地址名称描述
0x000 + 0x10×iPWM_SELpwm 分组选择控制寄存器。
0x004 +PWM_STARTCLRCN T_ENpwm 配置生效计数清零使能寄存器。
0x10×i
0x008 + 0x10×iPWM_STARTPWM 配置生效寄存器。
0x0100 + 0x40×jPWM_ENPWM 使能寄存器。
0x0104 + 0x40×jPWM_PORTITYPWM 的输出极性配置寄存器。
0x0108 + 0x40×jPWM_OEN_CFGPwm 无效电平高阻使能配置寄存器。
0x010C + 0x40×jPWM_OFFSET_LPWM_START 为 PWM 相位控制计数值低 16bit 寄存器。
0x0110 + 0x40×jPWM_OFFSET_HPWM_START 为 PWM 相位控制计数值高 16bit 寄存器。
0x0114 + 0x40×jPWM_FREQ_LPWM_FREQ 为 PWM 频率控制计数值低 16bit 寄存器。
0x0118 + 0x40×jPWM_FREQ_HPWM_FREQ 为 PWM 频率控制计数值高 16bit 寄存器。
0x011C + 0x40×jPWM_DUTY_LPWM_DUTY 为 PWM 占空比计数值寄存器。
0x0120 + 0x40×jPWM_DUTY_HPWM_DUTY 为 PWM 占空比计数值寄存器。
0x0124 + 0x40×jPWM_PERIODLOAD_FLAGPWM 周期配置允许标志寄存器。
0x0128 + 0x40×jPWM_PERIOD_VALPWM 周期脉冲周期值寄存器。
0x012C + 0x40×jPWM_PERIODCNTPWM 周期脉冲周期值寄存器。
0x500PWM_ABNOR_STATE0pwm 异常状态寄存器 0。
0x504PWM_ABNOR_STATE1pwm 异常状态寄存器 1。
0x508PWM_ABNOR_STATE_CLR0pwm 异常状态清除寄存器 0。
0x50CPWM_ABNOR_STATE_CLR1pwm 异常状态清除寄存器 1。
0x510PWM_INT_MASKpwm 中断屏蔽寄存器。
0x0514PWM_DMA_ENpwm dma 使能寄存器。
0x0518PWM_CFG_INT_CLR0pwm 步进模式循环结束中断清除。

PWM 寄存器偏移地址中变量的取值范围和含义如表 6-13 所示。

表6-11 PWM 寄存器偏移地址变量表

变量名称取值范围描述
i0~3PWM 分组
j0~7pwm 个数

寄存器描述

PWM_SEL

PWM_SEL 为 pwm 分组选择控制寄存器。

说明

本 IP 仅支持 8 个 PWM,最大可以支持分组数为 4;

即下述寄存器 i 支持 0~3,j 支持 0~7

Offset Address: 0x000 + 0x10×i Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_sel_i分组 pwm 选择信号,最多支持4 组,每组对应 8bit pwm_sel,每 bit 对应一路 pwm。0x0000

PWM_STARTCLRCNT_EN

PWM_STARTCLRCNT_EN 为 pwm 配置生效计数清零使能寄存器。

Offset Address: 0x004 + 0x10×i Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留。0x00000000
[0]RWpwm_startclrcnt_en_istar 时刻对 pwm 内部寄存器清零使能。每组对应 1bitpwm_startclrcnt_en。0x0

PWM_START

PWM_START 为 PWM 配置生效寄存器。

Offset Address: 0x008 + 0x10×i Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留。0x00000000
[0]W1_PULSEpwm_start_ipwm
配置生效寄存器。配成 1时,此前赋值的 pwm 相关寄存器生效。每组对应 1bitpwm_start。
注意:因逻辑内部模块需要对相关寄存器配置值进行同步和处理,建议该寄存器的配置间隔时间至少 10μs 以上。
0x0

PWM_EN

PWM_EN 为 PWM 使能寄存器。

Offset Address: 0x0100 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留0x00000000
[0]RWpwm_en_jpwm 功能使能,每路 pwm 对应一个 pwm_en。0: pwm 关闭,pwm_out 输出持续为 0:
1: pwm 使能打开。
0x0

PWM_PORTITY

PWM_PORTITY 为 PWM 的输出极性配置寄存器。

Offset Address: 0x0104 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留0x00000000
[0]RWpwm_poarity_jPwm 输出极性配置:
0: 正向极性
1: 反向极性。
0x0

PWM_OEN_CFG

PWM_OEN_CFG 为 Pwm 无效电平高阻使能配置寄存器。

Offset Address: 0x0108 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留0x00000000
[0]RWpwm_oen_cfg_jPwm 无效电平高阻使能配置:
0:无效电平跟随极性等其他配置
1:无效电平时 Pwm 输出高阻。
0x0

PWM_OFFSET_L

PWM_OFFSET_L 为 PWM_START 为 PWM 相位控制计数值低 16bit 寄存器。

Offset Address: 0x010C + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_offset_l_jPwm 相位控制计数值的低 16bit,控制 pwm 在一个周期 内为 1 的位置,对 PWM,取 值范围 1~65535。每路 pwm 对应一个 offset 参数。0x0000

PWM_OFFSET_H

PWM_OFFSET_H 为 PWM_START 为 PWM 相位控制计数值高 16bit 寄存器。

Offset Address: 0x0110 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_offset_h_jPwm 相位控制计数值的高 16bit,在 pwm_offset_l 计满后+1,控制 pwm 在一个周期内为 1 的位置,对 PWM,取值范围 1~65535。
每路 pwm 对应一个 offset 参数。
0x0000

PWM_FREQ_L

PWM_FREQ_L 为 PWM_FREQ 为 PWM 频率控制计数值低 16bit 寄存器。

Offset Address: 0x0114 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_freq_l_jpwm 频率控制计数值的低 16bit,含义为对 PWM 时钟的分频倍数,取值范围 1~65535。每路 pwm 对应一个 freq 参数。0x0000

PWM_FREQ_H

PWM_FREQ_H 为 PWM_FREQ 为 PWM 频率控制计数值高 16bit 寄存器。

Offset Address: 0x0118 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_freq_h_jpwm 频率控制计数值的高 16bit,在 pwm_freq_l 计满后 +1,含义为对 PWM 时钟的分频倍数,取值范围 1~65535。每路 pwm 对应一个 freq 参数。0x0000

PWM_DUTY_L

PWM_DUTY_L 为 PWM_DUTY 为 PWM 占空比计数值寄存器。

Offset Address: 0x011C + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_duty_l_jpwm 占空比控制计数值的低 16bit,取值范围 1~65535。pwm_duty 与 pwm_freq 的比值为占空比。每路 pwm 对应一个 duty 参数。0x0000

PWM_DUTY_H

PWM_DUTY_H 为 PWM_DUTY 为 PWM 占空比计数值寄存器。

Offset Address: 0x0120 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_duty_h_jpwm 占空比控制计数值的高 16bit,在 pwm_duty_l 计满后 +1,取值范围 1~65535。
pwm_duty 与 pwm_freq 的比值为占空比。
每路 pwm 对应一个 duty 参数。
0x0000

PWM_PERIODLOAD_FLAG

PWM_PERIODLOAD_FLAG 为 PWM 周期配置允许标志寄存器。

Offset Address: 0x0124 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留。0x00000000
[0]ROpwm_periodload_flag_jpwm 平滑切换周期结束,可进行新参数配置标志寄存器。周期计数结束产生。配置 start 清除/或者配置 pwm_cfg_int_clr0 寄存可清除。0x0

PWM_PERIOD_VAL

PWM_PERIOD_VAL 为 PWM 周期脉冲周期值寄存器。

Offset Address: 0x0128 + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]RWpwm_period_val_jPwm 输出脉冲数值,非零时触发 pwm 输出脉冲计数功能,输出脉冲个数大于该值时会加载新参数继续计数。0x0000

PWM_PERIODCNT

PWM_PERIODCNT 为 PWM 周期脉冲周期值寄存器。

Offset Address: 0x012C + 0x40×j Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]ROpwm_periodcnt_jPwm 输出脉冲计数值。0x0000

PWM_ABNOR_STATE0

PWM_ABNOR_STATE0 为 pwm 异常状态寄存器 0。

Offset Address: 0x500 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]-reserved保留。0x0000
[15:0]ROpwm_abnor_state0bit[15:0]为 Pwm 多路使用配置异常,每路 pwm 对应1bit。0x0000

PWM_ABNOR_STATE1

PWM_ABNOR_STATE1 为 pwm 异常状态寄存器 1。

Offset Address: 0x504 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]ROreserved保留。0x0000
[15:0]ROpwm_abnor_state1bit[15:0]为 Pwm 计数值配置异常,每路 pwm 对应 1bit。0x0000

PWM_ABNOR_STATE_CLR0

PWM_ABNOR_STATE_CLR0 为 pwm 异常状态清除寄存器 0。

Offset Address: 0x508 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]ROreserved保留。0x0000
[15:0]W1_PULSEpwm_abnor_state_clr0Pwm 异常清除寄存器 0,对应寄存器pwm_abnor_state0。0x0000

PWM_ABNOR_STATE_CLR1

PWM_ABNOR_STATE_CLR1 为 pwm 异常状态清除寄存器 1。

Offset Address: 0x50C Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]ROreserved保留。0x0000
[15:0]W1_PULSEpwm_abnor_state_clr1Pwm 异常清除寄存器,对应寄存器pwm_abnor_state1。0x0000

PWM_INT_MASK

PWM_INT_MASK 为 pwm 中断屏蔽寄存器。

Offset Address: 0x510 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:2]-reserved保留。0x00000000
[1:0]RWpwm_int_maskpwm 中断屏蔽寄存器,0: 屏蔽:
1: 不屏蔽,默认屏蔽:bit[1]: 步进模式一轮周期循环结束中断屏蔽
bit[0]: 异常中断屏蔽。
0x0

PWM_DMA_EN

PWM_DMA_EN 为 pwm dma 使能寄存器。

Offset Address: 0x0514 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:1]-reserved保留。0x00000000
[0]RWpwm_dma_endma 功能使能:0:禁止。1:使能;0x0

PWM_CFG_INT_CLR0

PWM_CFG_INT_CLR0 为 pwm 步进模式循环结束中断清除。

Offset Address: 0x0518 Total Reset Value: 0x0000_0000

BitsAccessNameDescriptionReset
[31:16]ROreserved保留。0x0000
[15:0]W1_PUL SEpwm_cfg_int_clr0Pwmpwm 步进模式循环结束中断清除寄存器。对应 pwm_cfg_int 的中断和pwm_periodload_flag_j 寄存器。0x0000