#include "yc11xx_pwm.h" #include "yc11xx_gpio.h" #include "yc_drv_common.h" #define __IO volatile void PWM_ClockSwitch(PWM_ClkSwitchDef PWM_ClkSwitch) { _ASSERT(IS_PWM_ClkSwitchDef(PWM_ClkSwitch)); switch(PWM_ClkSwitch) { case PWMCLK_ENABLE: HWRITE(CORE_CLKOFF+1,HREAD(CORE_CLKOFF+1) & ~(PWMCLK_DISABLE)); break; case PWMCLK_DISABLE: HWRITE(CORE_CLKOFF+1,HREAD(CORE_CLKOFF+1) | PWMCLK_DISABLE); break; default: break; } } void PWM_setcnt(PWM_ChxTypeDef pwm_channel,uint16_t pcnt,uint16_t ncnt) { _ASSERT(IS_PWM_ChxTypeDef(pwm_channel)); _ASSERT(IS_PERIOD_VALUE(pcnt)); _ASSERT(IS_PERIOD_VALUE(ncnt)); HW_REG_16BIT(reg_map(CORE_PWM_PCNT(pwm_channel)),pcnt); HW_REG_16BIT(reg_map(CORE_PWM_NCNT(pwm_channel)),ncnt); } void PWM_SWITCH(PWM_ChxTypeDef pwm_channel,PWM_SwitchDef SWITCH) { _ASSERT(IS_PWM_ChxTypeDef(pwm_channel)); _ASSERT(IS_PWM_SWITCH(SWITCH)); switch(SWITCH) { case PWM_ENABLE: HWRITE(CORE_PWM_CTRL(pwm_channel),HREAD(CORE_PWM_CTRL(pwm_channel))|PWM_ENABLE); break; case PWM_DISENABLE: HWRITE(CORE_PWM_CTRL(pwm_channel),HREAD(CORE_PWM_CTRL(pwm_channel)) & ~(PWM_ENABLE)); break; default: break; } } void PWM_Init(PWM_InitTypeDef* PWM_InitStruct) { uint8_t CtrValue = 0; _ASSERT(IS_PWM_GPIO(PWM_InitStruct->pwm_gpio)); _ASSERT(IS_PWM_ChxTypeDef(PWM_InitStruct->PWM_Channel)); _ASSERT(IS_PERIOD_VALUE(PWM_InitStruct->HighLevelPeriod)); _ASSERT(IS_PERIOD_VALUE(PWM_InitStruct->LowLevelPeriod)); _ASSERT(IS_CLK_DIVISION(PWM_InitStruct->pwm_ctrl.clk_div)); _ASSERT(IS_PWM_START(PWM_InitStruct->pwm_ctrl.StartLevel)); _ASSERT(IS_PWM_SWITCH(PWM_InitStruct->pwm_ctrl.pwm_switch)); GPIO_SetGpioMultFunction(PWM_InitStruct->pwm_gpio,GPCFG_PWM_OUT0 |(PWM_InitStruct->PWM_Channel)); HWCOR(CORE_CLKOFF+1, 0x20); CtrValue |= PWM_InitStruct -> pwm_ctrl.clk_div; CtrValue |= PWM_InitStruct -> pwm_ctrl.StartLevel; CtrValue |= PWM_InitStruct -> pwm_ctrl.pwm_switch; HW_REG_16BIT(reg_map(CORE_PWM_PCNT(PWM_InitStruct->PWM_Channel)),PWM_InitStruct->HighLevelPeriod); HW_REG_16BIT(reg_map(CORE_PWM_NCNT(PWM_InitStruct->PWM_Channel)),PWM_InitStruct->LowLevelPeriod); HW_REG_8BIT(reg_map(CORE_PWM_CTRL(PWM_InitStruct->PWM_Channel)),CtrValue); }