static inline void HAL_setTrigger(HAL_Handle handle,const SVGENCURRENT_IgnoreShunt_e ignoreShunt,const int16_t minwidth, const int16_t cmpOffset)
{
HAL_Obj *obj = (HAL_Obj *)handle;
PWM_Obj *pwm1 = (PWM_Obj *)obj->pwmHandle[PWM_Number_1];
PWM_Obj *pwm2 = (PWM_Obj *)obj->pwmHandle[PWM_Number_2];
PWM_Obj *pwm3 = (PWM_Obj *)obj->pwmHandle[PWM_Number_3];
PWM_Obj *pwm;
uint16_t nextPulse1 = (pwm1->CMPA + pwm1->CMPAM) / 2;
uint16_t nextPulse2 = (pwm2->CMPA + pwm2->CMPAM) / 2;
uint16_t nextPulse3 = (pwm3->CMPA + pwm3->CMPAM) / 2;
uint16_t pwmCMPA1 = pwm1->CMPA;
uint16_t pwmCMPA2 = pwm2->CMPA;
uint16_t pwmCMPA3 = pwm3->CMPA;
int16_t offset;
if(ignoreShunt == use_all)
{
if((nextPulse1 <= nextPulse2) && (nextPulse1 <= nextPulse3))
{
pwm = pwm1;
}
else if((nextPulse2 <= nextPulse1) && (nextPulse2 <= nextPulse3))
{
pwm = pwm2;
}
else
{
pwm = pwm3;
}
}
else if(ignoreShunt == ignore_a)
{
offset = pwmCMPA1 + cmpOffset;
}
else if(ignoreShunt == ignore_b)
{
offset = pwmCMPA2 + cmpOffset;
}
else if(ignoreShunt == ignore_c)
{
offset = pwmCMPA3 + cmpOffset;
}
else if(ignoreShunt == ignore_ab)
{
if(pwmCMPA1 > pwmCMPA2)
{
offset = pwmCMPA1 + cmpOffset;
}
else
{
offset = pwmCMPA2 + cmpOffset;
}
}
else if(ignoreShunt == ignore_ac)
{
if(pwmCMPA1 > pwmCMPA3)
{
offset = pwmCMPA1 + cmpOffset;
}
else
{
offset = pwmCMPA3 + cmpOffset;
}
}
else // when ignoreShunt == ignore_bc
{
if(pwmCMPA2 > pwmCMPA3)
{
offset = pwmCMPA2 + cmpOffset;
}
else
{
offset = pwmCMPA3 + cmpOffset;
}
}
if(ignoreShunt == use_all)
{
if(pwm->CMPAM >= (pwm->CMPA + pwm->DBFED))
{
pwm1->CMPB = (pwm->CMPAM - (pwm->CMPA + pwm->DBFED)) / 2 + 1;
PWM_setSocAPulseSrc(obj->pwmHandle[PWM_Number_1],PWM_SocPulseSrc_CounterEqualCmpBDecr);
}
else
{
pwm1->CMPB = ((pwm->CMPA + pwm->DBFED) - pwm->CMPAM ) / 2 + 1;
PWM_setSocAPulseSrc(obj->pwmHandle[PWM_Number_1],PWM_SocPulseSrc_CounterEqualCmpBIncr);
}
}
else
{
pwm1->CMPB = offset;
PWM_setSocAPulseSrc(obj->pwmHandle[PWM_Number_1],PWM_SocPulseSrc_CounterEqualCmpBIncr);
}
return;
} // end of HAL_setTrigger() function
下一个脉冲 uint16_t nextPulse1 = (pwm1->CMPA + pwm1->CMPAM) / 2;
下一个脉冲 不就是影子寄存器 cmpam 吗? 为啥立即寄存器 和 影子寄存器 相加再除2
if(ignoreShunt == use_all) 如果使用 全部分流 触发源 PWM_setSocAPeriod(obj->pwmHandle[PWM_Number_1],PWM_SocPeriod_FirstEvent);
不就行了吗?