Part Number: TMS320F280049C
TI专家您好!
最近在学习PCMC_PSFB_F28004x项目时遇到如下问题:
1. 关于ADC过采样函数 PSFB_HAL_setupAdcOvrSamplPWM,源程序如下:
void PSFB_HAL_setupAdcOvrSamplPWM(uint32_t base1, uint16_t pwm_period_ticks)
{
EALLOW;
EPWM_setPeriodLoadMode(base1, EPWM_PERIOD_DIRECT_LOAD);
EPWM_setTimeBasePeriod(base1, pwm_period_ticks - 1);
EPWM_setTimeBaseCounter(base1, 2); EPWM_setPhaseShift(base1, 2);
EPWM_setTimeBaseCounterMode(base1, EPWM_COUNTER_MODE_UP);
EPWM_setClockPrescaler(base1, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
EPWM_enablePhaseShiftLoad(base1);
//产生同步信号
HRPWM_setSyncPulseSource(base1, HRPWM_PWMSYNC_SOURCE_COMPC_UP);
EPWM_setCounterCompareValue(base1, EPWM_COUNTER_COMPARE_C,
pwm_period_ticks - 5);
EDIS;
}
蓝色粗体字部分是产生了一个同步信号,结合整个项目,这个同步信号应该给比较器的,然后再看比较器的配置函数:
//
// initCmpssPCMC - Function to configure the high comparator of CMPSS3
//
void PSFB_HAL_initCmpssPCMC(void)
{
……
//前面的代码我省略,只是以下代码有些困惑
//
// Set PWMSYNC as coming from ADC_OVERSAMPLE_PWM_BASE
//
HWREGH(PSFB_PCMC_OCP_CMPSS_BASE + CMPSS_O_COMPDACCTL) =
(HWREGH(PSFB_PCMC_OCP_CMPSS_BASE + CMPSS_O_COMPDACCTL) &
~(CMPSS_COMPDACCTL_RAMPSOURCE_M)) | (4);
}
看上面绿色字部分和它的注释,它的主要作用来设置RAMPSOURCE这个寄存器,而且根据注释来源是ADC过采样的EPWM,可RAMPSOURCE这里设置的值为(4),按照寄存器RAMPSOURCE的设置逻辑,如下图:

那么岂不是要设置来源是EPWM5?而我仔细看了整个PCMC_PSFB_280049x源程序,程序中根本就没有用到过EPWM5,而过采样ADC用的是EPWM3(#define PSFB_ADC_OVERSAMPLE_PWM_BASE EPWM3_BASE)
所以想确认我的理解是否有误,特别是RAMPSOURCE寄存器的配置,其中的
0 EPWM1SYNCPER
1 EPWM2SYNCPER
2 EPWM3SYNCPER
是否分别对应EPWM1, EPWM2, EPWM3?