rt-thread-official/bsp/swm341/libraries/SWM341_StdPeriph_Driver/SWM341_pwm.h

126 lines
6.0 KiB
C
Raw Normal View History

#ifndef __SWM341_PWM_H__
#define __SWM341_PWM_H__
typedef struct {
uint8_t Mode; //PWM_EDGE_ALIGNED、PWM_CENTER_ALIGNED、PWM_ASYM_CENTER_ALIGNED
uint16_t Clkdiv; //1--1024
uint16_t Period; //周期
uint16_t HdutyA; //占空比高电平时长PWM_ASYM_CENTER_ALIGNED 模式下设定前半周期的高电平时长
uint16_t HdutyA2; //只在 PWM_ASYM_CENTER_ALIGNED 模式下使用,用于设定后半周期的高电平时长
uint16_t DeadzoneA; //死区时长取值0--1023
uint8_t IdleLevelA; //停止状态下PWMxA输出电平
uint8_t IdleLevelAN; //停止状态下PWMxAN输出电平
uint8_t OutputInvA; //PWMxA输出取反
uint8_t OutputInvAN; //PWMxAN输出取反
uint16_t HdutyB;
uint16_t HdutyB2;
uint16_t DeadzoneB;
uint8_t IdleLevelB;
uint8_t IdleLevelBN;
uint8_t OutputInvB;
uint8_t OutputInvBN;
uint8_t UpOvfIE; //上升沿计数器溢出中断使能PWM_EDGE_ALIGNED 模式下向上计数,因此只有上升沿
uint8_t DownOvfIE; //下降沿计数器溢出中断使能,另外两种模式下先向上计数、后向下计数,上升沿是前半周期、下降沿是后半周期
uint8_t UpCmpAIE; //上升沿比较器A匹配中断使能
uint8_t DownCmpAIE; //下降沿比较器A匹配中断使能
uint8_t UpCmpBIE; //上升沿比较器B匹配中断使能
uint8_t DownCmpBIE; //下降沿比较器B匹配中断使能
} PWM_InitStructure;
#define PWM_EDGE_ALIGNED 0
#define PWM_CENTER_ALIGNED 1
#define PWM_ASYM_CENTER_ALIGNED 2 // 非对称中心对齐模式,上升沿和下降沿具有不同的翻转点比较值
#define PWM_CH_A 0
#define PWM_CH_B 1
#define PWM0_MSK (1 << 0)
#define PWM1_MSK (1 << 1)
#define PWM2_MSK (1 << 2)
#define PWM3_MSK (1 << 3)
#define PWM4_MSK (1 << 4)
#define PWM_BRK0 (1 << 0)
#define PWM_BRK1 (1 << 1)
#define PWM_BRK2 (1 << 2)
#define PWM_DIR_UP 0
#define PWM_DIR_DOWN 1
#define PWM_TRG_0 0 //计数器溢出或与指定值相等时 PWM 输出触发信号
#define PWM_TRG_1 1
#define PWM_TRG_2 2
#define PWM_TRG_3 3
#define PWM_TRG_4 4
#define PWM_TRG_5 5
#define PWM_TRG_6 6
#define PWM_TRG_7 7
#define PWM_EVT_DIS 0 //外部事件信号为高时 PWM 启动计数、停止计数、暂停计数、屏蔽输出
#define PWM_EVT_0 1
#define PWM_EVT_1 2
#define PWM_EVT_2 3
#define PWM_EVT_3 4
#define PWM_EVT_4 5
#define PWM_EVT_TIMR0 6
#define PWM_EVT_TIMR1 7
/* Interrupt Type */
#define PWM_IT_OVF_UP (1 << 0) //向上计数时计数器溢出PWM_EDGE_ALIGNED 模式下向上计数,因此只有上升沿
#define PWM_IT_OVF_DOWN (1 << 1) //向下计数时计数器溢出,另外两种模式下先向上计数、后向下计数,上升沿是前半周期、下降沿是后半周期
#define PWM_IT_CMPA_UP (1 << 2) //向上计数时计数器值与CMPA相等
#define PWM_IT_CMPB_UP (1 << 3) //向上计数时计数器值与CMPB相等
#define PWM_IT_CMPA_DOWN (1 << 4) //向下计数时计数器值与CMPA相等
#define PWM_IT_CMPB_DOWN (1 << 5) //向下计数时计数器值与CMPB相等
#define PWM_BRKIT_BRK0 (1 << 0) //PWM_BRK0引脚上出现刹车信号
#define PWM_BRKIT_BRK1 (1 << 1)
#define PWM_BRKIT_BRK2 (1 << 2)
void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct); //PWM初始化
void PWM_Start(uint32_t pwm); //启动PWM开始PWM输出
void PWM_Stop(uint32_t pwm); //关闭PWM停止PWM输出
void PWM_Restart(uint32_t pwm);
void PWM_ReloadEn(uint32_t pwm);
void PWM_ReloadDis(uint32_t pwm);
void PWM_BrkInPolarity(uint32_t brk, uint32_t level);
void PWM_BrkConfig(PWM_TypeDef * PWMx, uint32_t chn, uint32_t brk, uint32_t out, uint32_t outN, uint32_t outHold, uint32_t stpCount);
void PWM_OvfTrigger(PWM_TypeDef * PWMx, uint32_t en_up, uint32_t en_down, uint32_t trig_chn);
void PWM_CmpTrigger(PWM_TypeDef * PWMx, uint16_t match, uint32_t dir, uint32_t width, uint32_t trig_chn, uint32_t adc_trig_pos);
void PWM_OutMask(PWM_TypeDef * PWMx, uint32_t chn, uint32_t evt, uint32_t out, uint32_t evt_n, uint32_t out_n);
void PWM_SetPeriod(PWM_TypeDef * PWMx, uint16_t period); //设置周期
uint16_t PWM_GetPeriod(PWM_TypeDef * PWMx); //获取周期
void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty); //设置高电平时长
uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn); //获取高电平时长
void PWM_SetHDuty2(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty, uint16_t hduty2); //设置高电平时长,用于非对称中心对齐模式
void PWM_GetHDuty2(PWM_TypeDef * PWMx, uint32_t chn, uint16_t *hduty, uint16_t *hduty2); //获取高电平时长,用于非对称中心对齐模式
void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint16_t deadzone); //设置死区时长
uint16_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn); //获取死区时长
void PWM_IntEn(PWM_TypeDef * PWMx, uint32_t it); //中断使能
void PWM_IntDis(PWM_TypeDef * PWMx, uint32_t it); //中断禁能
void PWM_IntClr(PWM_TypeDef * PWMx, uint32_t it); //中断标志清除
uint32_t PWM_IntStat(PWM_TypeDef * PWMx, uint32_t it); //中断标志查询
void PWM_BrkIntEn(uint32_t brkit); //刹车中断使能
void PWM_BrkIntDis(uint32_t brkit); //刹车中断禁能
void PWM_BrkIntClr(uint32_t brkit); //刹车中断标志清除
uint32_t PWM_BrkIntStat(uint32_t brkit); //刹车中断标志查询
#endif //__SWM341_PWM_H__