| @@ -1463,9 +1463,13 @@ static void PlsrRunControlBeginSeg(uint16_t seg_idx0) | |||||
| if (s_follow_cont != 0U) | if (s_follow_cont != 0U) | ||||
| { | { | ||||
| /* 分支 A:段间无缝(FOLLOW 或 ACT handoff),PWM 已在跑 */ | |||||
| /* 分支 A:段间无缝(FOLLOW 或 ACT handoff) */ | |||||
| PlsrPulseDriverClearOnePulseStop(); | PlsrPulseDriverClearOnePulseStop(); | ||||
| PlsrRunControlRefreshProfile(0U); | |||||
| /* | |||||
| * FOLLOW 真不停表:do_start=0 只改频。 | |||||
| * ACT 经 OPM 边界停表后 s_pwm_on 已为 0:须 Start 重开,否则无脉冲卡死。 | |||||
| */ | |||||
| PlsrRunControlRefreshProfile((s_pwm_on == 0U) ? 1U : 0U); | |||||
| s_state = RC_RUN; | s_state = RC_RUN; | ||||
| s_follow_cont = 0U; | s_follow_cont = 0U; | ||||
| PlsrRunControlArmActExtOnPulseStart(); | PlsrRunControlArmActExtOnPulseStart(); | ||||
| @@ -1887,6 +1891,12 @@ void PlsrRunControlOnPulseIsr(void) | |||||
| { | { | ||||
| s_act_cut_pending = 0U; | s_act_cut_pending = 0U; | ||||
| s_act_handoff_keep = 1U; | s_act_handoff_keep = 1U; | ||||
| /* | |||||
| * TIM5 已 ArmOnePulseStop:本拍 UPDATE 后计数器会停。 | |||||
| * 必须清 s_pwm_on,否则 ActExpire 同向衔接走 RefreshProfile(0) | |||||
| * 时误判「表仍在跑」而不 Start,卡死在下一段入口。 | |||||
| */ | |||||
| s_pwm_on = 0U; | |||||
| s_state = RC_IDLE; | s_state = RC_IDLE; | ||||
| s_act_expire_req = 1U; | s_act_expire_req = 1U; | ||||
| PlsrRunControlWakePost(); | PlsrRunControlWakePost(); | ||||