sys_ctrl.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "sys_ctrl.h"
  2. #include "api.h"
  3. #include "CodePara.h"
  4. SysCtrl_PwmHandle sysctrl_stPwmState;
  5. void sysctrl_voPwmInit(void)
  6. {
  7. /* Set 50% duty */
  8. UWORD prd = iPwm_GetCountMax(0);
  9. iPwm_SetCompareValue(0, 0, prd >> 1);
  10. iPwm_SetCompareValue(0, 1, prd >> 1);
  11. iPwm_SetCompareValue(0, 2, prd >> 1);
  12. iPwm_SetCompareValueDelay(0, 0, prd >> 1);
  13. iPwm_SetCompareValueDelay(0, 1, prd >> 1);
  14. iPwm_SetCompareValueDelay(0, 2, prd >> 1);
  15. /* PWM off */
  16. sysctrl_voPwmOff();
  17. /* Charge init */
  18. sysctrl_stPwmState.uwChargeCnt = 0;
  19. sysctrl_stPwmState.blChargeOvrFlg = FALSE;
  20. }
  21. void sysctrl_voPwmOn(void)
  22. {
  23. if (sysctrl_stPwmState.blPwmOnflg == FALSE)
  24. {
  25. iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_HigherSet);
  26. iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_HigherSet);
  27. iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_HigherSet);
  28. iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_HigherSet);
  29. iPwm_EnableChannelOutput(0, API_PWM_CH(0));
  30. iPwm_EnableChannelOutput(0, API_PWM_CH(1));
  31. iPwm_EnableChannelOutput(0, API_PWM_CH(2));
  32. iPwm_EnableChannelOutput(0, API_PWM_CH(3));
  33. iPwm_EnableChannelOutput(0, API_PWM_CHN(0));
  34. iPwm_EnableChannelOutput(0, API_PWM_CHN(1));
  35. iPwm_EnableChannelOutput(0, API_PWM_CHN(2));
  36. iPwm_EnableChannelOutput(0, API_PWM_CHN(3));
  37. sysctrl_stPwmState.blPwmOnflg = TRUE;
  38. }
  39. }
  40. void sysctrl_voPwmOff(void)
  41. {
  42. if (sysctrl_stPwmState.blPwmOnflg == TRUE)
  43. {
  44. iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_ForceClear);
  45. iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_ForceClear);
  46. iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_ForceClear);
  47. iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_ForceClear);
  48. iPwm_DisableChannelOutput(0, API_PWM_CHN(0));
  49. iPwm_DisableChannelOutput(0, API_PWM_CHN(1));
  50. iPwm_DisableChannelOutput(0, API_PWM_CHN(2));
  51. iPwm_DisableChannelOutput(0, API_PWM_CHN(3));
  52. sysctrl_stPwmState.blPwmOnflg = FALSE;
  53. }
  54. }
  55. void sysctrl_voCharge(void)
  56. {
  57. /* Set 50% duty */
  58. UWORD prd = iPwm_GetCountMax(0);
  59. iPwm_SetCompareValue(0, 0, prd >> 1);
  60. iPwm_SetCompareValue(0, 1, prd >> 1);
  61. iPwm_SetCompareValue(0, 2, prd >> 1);
  62. iPwm_SetCompareValueDelay(0, 0, prd >> 1);
  63. iPwm_SetCompareValueDelay(0, 1, prd >> 1);
  64. iPwm_SetCompareValueDelay(0, 2, prd >> 1);
  65. sysctrl_voPwmOn();
  66. sysctrl_stPwmState.uwChargeCnt ++;
  67. if (sysctrl_stPwmState.uwChargeCnt > cp_stControlPara.swIPMHvicChrgMs)
  68. {
  69. sysctrl_stPwmState.uwChargeCnt = 0;
  70. sysctrl_stPwmState.blChargeOvrFlg = TRUE;
  71. }
  72. }
  73. void sysctrl_voThrPhsShrt(void)
  74. {
  75. /* Set 0% duty */
  76. iPwm_SetCompareValue(0, 0, 0);
  77. iPwm_SetCompareValue(0, 1, 0);
  78. iPwm_SetCompareValue(0, 2, 0);
  79. iPwm_SetCompareValueDelay(0, 2, 0);
  80. iPwm_SetCompareValueDelay(0, 2, 0);
  81. iPwm_SetCompareValueDelay(0, 2, 0);
  82. iPwm_SetCompareValueImmediate(0, 2, 0);
  83. iPwm_SetCompareValueImmediate(0, 2, 0);
  84. iPwm_SetCompareValueImmediate(0, 2, 0);
  85. sysctrl_voPwmOn();
  86. }