#include "sys_ctrl.h" #include "api.h" #include "CodePara.h" SysCtrl_PwmHandle sysctrl_stPwmState; void sysctrl_voPwmInit(void) { /* Set 50% duty */ UWORD prd = iPwm_GetCountMax(0); iPwm_SetCompareValue(0, 0, prd >> 1); iPwm_SetCompareValue(0, 1, prd >> 1); iPwm_SetCompareValue(0, 2, prd >> 1); iPwm_SetCompareValueDelay(0, 0, prd >> 1); iPwm_SetCompareValueDelay(0, 1, prd >> 1); iPwm_SetCompareValueDelay(0, 2, prd >> 1); /* PWM off */ sysctrl_voPwmOff(); /* Charge init */ sysctrl_stPwmState.uwChargeCnt = 0; sysctrl_stPwmState.blChargeOvrFlg = FALSE; } void sysctrl_voPwmOn(void) { if (sysctrl_stPwmState.blPwmOnflg == FALSE) { iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_HigherSet); iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_HigherSet); iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_HigherSet); iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_HigherSet); iPwm_EnableChannelOutput(0, API_PWM_CH(0)); iPwm_EnableChannelOutput(0, API_PWM_CH(1)); iPwm_EnableChannelOutput(0, API_PWM_CH(2)); iPwm_EnableChannelOutput(0, API_PWM_CH(3)); iPwm_EnableChannelOutput(0, API_PWM_CHN(0)); iPwm_EnableChannelOutput(0, API_PWM_CHN(1)); iPwm_EnableChannelOutput(0, API_PWM_CHN(2)); iPwm_EnableChannelOutput(0, API_PWM_CHN(3)); sysctrl_stPwmState.blPwmOnflg = TRUE; } } void sysctrl_voPwmOff(void) { if (sysctrl_stPwmState.blPwmOnflg == TRUE) { iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_ForceClear); iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_ForceClear); iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_ForceClear); iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_ForceClear); iPwm_DisableChannelOutput(0, API_PWM_CHN(0)); iPwm_DisableChannelOutput(0, API_PWM_CHN(1)); iPwm_DisableChannelOutput(0, API_PWM_CHN(2)); iPwm_DisableChannelOutput(0, API_PWM_CHN(3)); sysctrl_stPwmState.blPwmOnflg = FALSE; } } void sysctrl_voCharge(void) { /* Set 50% duty */ UWORD prd = iPwm_GetCountMax(0); iPwm_SetCompareValue(0, 0, prd >> 1); iPwm_SetCompareValue(0, 1, prd >> 1); iPwm_SetCompareValue(0, 2, prd >> 1); iPwm_SetCompareValueDelay(0, 0, prd >> 1); iPwm_SetCompareValueDelay(0, 1, prd >> 1); iPwm_SetCompareValueDelay(0, 2, prd >> 1); sysctrl_voPwmOn(); sysctrl_stPwmState.uwChargeCnt ++; if (sysctrl_stPwmState.uwChargeCnt > cp_stControlPara.swIPMHvicChrgMs) { sysctrl_stPwmState.uwChargeCnt = 0; sysctrl_stPwmState.blChargeOvrFlg = TRUE; } } void sysctrl_voThrPhsShrt(void) { /* Set 0% duty */ iPwm_SetCompareValue(0, 0, 0); iPwm_SetCompareValue(0, 1, 0); iPwm_SetCompareValue(0, 2, 0); iPwm_SetCompareValueDelay(0, 2, 0); iPwm_SetCompareValueDelay(0, 2, 0); iPwm_SetCompareValueDelay(0, 2, 0); iPwm_SetCompareValueImmediate(0, 2, 0); iPwm_SetCompareValueImmediate(0, 2, 0); iPwm_SetCompareValueImmediate(0, 2, 0); sysctrl_voPwmOn(); }