Sdk版本 1.10
/** pwm work mode for signal generate */
enum tls_pwm_out_mode
{
WM_PWM_OUT_MODE_BRAKE = 0, /**< brake mode 制动模式*/
WM_PWM_OUT_MODE_ALLSYC, /**< all synchronous mode [6]全通道同步模式使能信号*/
WM_PWM_OUT_MODE_2SYC, /**< two channel synchronous mode [15:14]2 通道同步模式使能信号PWM_CH0 和PWM_CH1具有相同的相位,且相位由PWM_CH0决定;PWM_CH2和PWM_CH3具有相同的相位,且相位由 PWM_CH2 决定15bit控制CH3和CH2 14bit控制CH1和CH0*/
WM_PWM_OUT_MODE_MC, /**< complementary互补 mode 输出模式0:每两个通道非互补模式1:每两个通道组成互补模式[1:0][1]控制CH2和CH3[0]控制CH0和CH1*/
WM_PWM_OUT_MODE_INDPT /**< independent mode 独立模式 */
};
/** interrupt type for capture mode */
enum tls_pwm_cap_int_type{
WM_PWM_CAP_RISING_EDGE_INT, /**< rising edge arises the interrupt 上升边产生中断*/
WM_PWM_CAP_FALLING_EDGE_INT, /**< falling edge arises the interrupt 下降边引起中断 */
WM_PWM_CAP_RISING_FALLING_EDGE_INT, /**< both rising edge and falling edge arise the interrupt 上升沿和下降沿都产生中断 */
WM_PWM_CAP_DMA_INT /**< dma request */
};
/** pwm output status */
enum tls_pwm_out_en_state{
WM_PWM_OUT_EN_STATE_TRI, /**< set tristate status PWM 管脚置为三态状态*/
WM_PWM_OUT_EN_STATE_OUT /**< set output status PWM 管脚置为输出状态 shayk 手册标注out为0,三态为1*/
};
/** pwm count mode */
enum tls_pwm_cnt_type{
WM_PWM_CNT_TYPE_EDGE_ALLGN_CAP, /**< edge alignment(only capture mode) 边缘对齐模式(计数器计数方式为递增,仅针对捕获模式)*/
WM_PWM_CNT_TYPE_EDGE_ALIGN_OUT, /**< edge alignment(only output mode) 边缘对齐模式(计数器计数方式为递减,仅针对 PWM 模式)*/
WM_PWM_CNT_TYPE_CENTER_ALIGN /**< central alignment 中央对齐模式(仅针对 PWM 模式)*/
};
/** pwm cycle type */
enum tls_pwm_loop_type{
WM_PWM_LOOP_TYPE_SINGLE, /**< single mode PWM 生成循环方式 单次模式*/
WM_PWM_LOOP_TYPE_LOOP /**< auto load 自动装载模式*/
};
/** pwm waveform inversion mode */
enum tls_pwm_waveform_inversion{
WM_PWM_WAVEFORM_NOINVERSION, /**< not inverse PWM 输出信号极性使能 PWM 输出极性翻转不使能*/
WM_PWM_WAVEFORM_INVERSION /**< inversion PWM 输出极性翻转使能 注意:[5:2]每位分别控制每个通道,从高到低依次控制 PW3、PW2、PW1 和 PW0*/
};
/** pwm output level in the brake mode */
enum tls_pwm_brake_out_level{
WM_PWM_BRAKE_OUT_HIGH, /**< output high level 制动输出控制寄存器 当制动模式有效时,PWM 输出低电平 [7:3]分别对应 CH4、CH3、CH2、CH1 和 CH0*/
WM_PWM_BRAKE_OUT_LOW /**< output low level 当制动模式有效时,PWM 输出高电平 shayk 手册标注 out_low =0 out_high=1*/
};
/** pwm initial parameters */
typedef struct _pwm_init_param{
enum tls_pwm_out_mode mode; /**< work mode */
u8 channel; /**< channel id 0~4 */
u16 clkdiv; /**< clock divided value */
u8 period; /**< period value(output frequency F = CLK/CLK_DIV/PERIOD) */
u8 duty; /**< duty radio (range 0~255, high level or low level by out_inversion decided */
bool dten; /**< enable dead zone time (ENABLE or DISABLE) */
u8 dtclkdiv; /**< dead zone clock divided value (0~3) */
u8 dtcnt; /**< period number of dead zone time (0~255) */
enum tls_pwm_cnt_type cnt_type; /**< count type */
enum tls_pwm_loop_type loop_type; /**< cycle type */
bool inverse_en; /**< output is inverse */
u8 pnum; /**< generate interrupt after pnum period 在pnum周期后产生中断 */
bool pnum_int; /**< period interrupt is enable */
}pwm_init_param;
// pwm测试
wm_pwm0_config(WM_IO_PB_00);//gpio定义
tls_pwm_stop(0);
tls_pwm_init(0, 2200, 50, 0);
tls_pwm_start(0);
int tls_pwm_init(u8 channel, // pwm channel, range from 0 to 4
u32 freq, // freq range from 1 to 156250
u8 duty, // duty range from 0 to 255
u8 pnum) // period num,range from 0 to 255
int tls_pwm_duty_config(u8 channel, u8 duty); // used to set duty ratio
for(int i=0;i<255;i++){
tls_pwm_duty_config(0, i);
tls_pwm_start(0);
tls_os_time_delay(5);
}
for(int i=255;i>0;i--){
tls_pwm_duty_config(0, i);
tls_pwm_start(0);
tls_os_time_delay(5);
}