yc11xx_pwm.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "yc11xx_pwm.h"
  2. #include "yc11xx_gpio.h"
  3. #include "yc_drv_common.h"
  4. #define __IO volatile
  5. void PWM_ClockSwitch(PWM_ClkSwitchDef PWM_ClkSwitch)
  6. {
  7. _ASSERT(IS_PWM_ClkSwitchDef(PWM_ClkSwitch));
  8. switch(PWM_ClkSwitch)
  9. {
  10. case PWMCLK_ENABLE:
  11. HWRITE(CORE_CLKOFF+1,HREAD(CORE_CLKOFF+1) & ~(PWMCLK_DISABLE));
  12. break;
  13. case PWMCLK_DISABLE:
  14. HWRITE(CORE_CLKOFF+1,HREAD(CORE_CLKOFF+1) | PWMCLK_DISABLE);
  15. break;
  16. default:
  17. break;
  18. }
  19. }
  20. void PWM_setcnt(PWM_ChxTypeDef pwm_channel,uint16_t pcnt,uint16_t ncnt)
  21. {
  22. _ASSERT(IS_PWM_ChxTypeDef(pwm_channel));
  23. _ASSERT(IS_PERIOD_VALUE(pcnt));
  24. _ASSERT(IS_PERIOD_VALUE(ncnt));
  25. HW_REG_16BIT(reg_map(CORE_PWM_PCNT(pwm_channel)),pcnt);
  26. HW_REG_16BIT(reg_map(CORE_PWM_NCNT(pwm_channel)),ncnt);
  27. }
  28. void PWM_SWITCH(PWM_ChxTypeDef pwm_channel,PWM_SwitchDef SWITCH)
  29. {
  30. _ASSERT(IS_PWM_ChxTypeDef(pwm_channel));
  31. _ASSERT(IS_PWM_SWITCH(SWITCH));
  32. switch(SWITCH)
  33. {
  34. case PWM_ENABLE:
  35. HWRITE(CORE_PWM_CTRL(pwm_channel),HREAD(CORE_PWM_CTRL(pwm_channel))|PWM_ENABLE);
  36. break;
  37. case PWM_DISENABLE:
  38. HWRITE(CORE_PWM_CTRL(pwm_channel),HREAD(CORE_PWM_CTRL(pwm_channel)) & ~(PWM_ENABLE));
  39. break;
  40. default:
  41. break;
  42. }
  43. }
  44. void PWM_Init(PWM_InitTypeDef* PWM_InitStruct)
  45. {
  46. uint8_t CtrValue = 0;
  47. _ASSERT(IS_PWM_GPIO(PWM_InitStruct->pwm_gpio));
  48. _ASSERT(IS_PWM_ChxTypeDef(PWM_InitStruct->PWM_Channel));
  49. _ASSERT(IS_PERIOD_VALUE(PWM_InitStruct->HighLevelPeriod));
  50. _ASSERT(IS_PERIOD_VALUE(PWM_InitStruct->LowLevelPeriod));
  51. _ASSERT(IS_CLK_DIVISION(PWM_InitStruct->pwm_ctrl.clk_div));
  52. _ASSERT(IS_PWM_START(PWM_InitStruct->pwm_ctrl.StartLevel));
  53. _ASSERT(IS_PWM_SWITCH(PWM_InitStruct->pwm_ctrl.pwm_switch));
  54. GPIO_SetGpioMultFunction(PWM_InitStruct->pwm_gpio,GPCFG_PWM_OUT0 |(PWM_InitStruct->PWM_Channel));
  55. HWCOR(CORE_CLKOFF+1, 0x20);
  56. CtrValue |= PWM_InitStruct -> pwm_ctrl.clk_div;
  57. CtrValue |= PWM_InitStruct -> pwm_ctrl.StartLevel;
  58. CtrValue |= PWM_InitStruct -> pwm_ctrl.pwm_switch;
  59. HW_REG_16BIT(reg_map(CORE_PWM_PCNT(PWM_InitStruct->PWM_Channel)),PWM_InitStruct->HighLevelPeriod);
  60. HW_REG_16BIT(reg_map(CORE_PWM_NCNT(PWM_InitStruct->PWM_Channel)),PWM_InitStruct->LowLevelPeriod);
  61. HW_REG_8BIT(reg_map(CORE_PWM_CTRL(PWM_InitStruct->PWM_Channel)),CtrValue);
  62. }