TMS320F2800157: PWM的TBPRD和CMPA如何同时生效?

Part Number: TMS320F2800157

在软件中设置PWM的TBPRD和CMPA时,可能有时不会同步生效,导致占空比和预期的不一样

请问有什么模式可以让TBPRD和CMPA同时生效吗?

如下代码:

base1 = EPWM5_BASE;

EPWM_setPeriodLoadMode(base1,EPWM_PERIOD_SHADOW_LOAD);
EPWM_setCounterCompareShadowLoadMode(base1,EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);

// 假设原来的TBPRD=4000,CMPA=1000,那么原来的占空比就是25%
EPWM_setTimeBasePeriod(base1, 2000);  // 这里把TBPRD修改为2000,而且shadow模式刚好生效了,即TBPRD马上变为2000
EPWM_setCounterCompareValue(base1, EPWM_COUNTER_COMPARE_A, 800);  // 这里要把CMPA修改为800,同时希望TBPRD是2000,那么期望的占空比就是40%

                                                                                                                                       // 但是由于CMPA要等到TBPRD计数到0时才生效,可能此时TBPRD的值是5,所以CMPA不会马上变为800,

                                                                                                                                       // 而TBPRD已经生效为2000了,那么这个周期里,TBPRD=2000,CMPA还是原来的1000,所以这个周期里占空比会变成50%,和预期的不一样