Part Number: LAUNCHXL-F28379D
Other Parts Discussed in Thread: TMS320F28379D, C2000WARE
Hello Experts,
I am facing an issue in syncing pwm channels to the SDFM module,
Reading the technical reference manual of TMS320F28379D , it does not give much information. It just says that when SDSYNCEN is enabled, PWM11 will reset SDFM1 data filter and PWM12 will reset SDFM2

First off, what is "PWM11" and "PWM12"? Does PWM11 mean EPWM1 Module Channel A, and PWM12 mean EPWM1 Module Channel B?
How do I change it so that it can sync to another EPWM module, example EPWM1.CMPA should reset SDFM1 and EPWM4.CMPB should reset SDFM2?
I see in the sdfm.h file of C2000WARE (ti\c2000\C2000Ware_4_01_00_00\driverlib\f28004x\driverlib) there is a function which does this:
//*****************************************************************************
//
//! Values that can be passed to SDFM_setPWMSyncSource(),as the
//! \e syncSource parameter.
//
//*****************************************************************************
typedef enum
{
SDFM_SYNC_PWM1_SOCA = 0, //!< SDFM sync source is PWM1 SOCA
SDFM_SYNC_PWM1_SOCB = 1, //!< SDFM sync source is PWM1 SOCB
SDFM_SYNC_PWM2_SOCA = 4, //!< SDFM sync source is PWM2 SOCA
SDFM_SYNC_PWM2_SOCB = 5, //!< SDFM sync source is PWM2 SOCB
SDFM_SYNC_PWM3_SOCA = 8, //!< SDFM sync source is PWM3 SOCA
SDFM_SYNC_PWM3_SOCB = 9, //!< SDFM sync source is PWM3 SOCB
SDFM_SYNC_PWM4_SOCA = 12, //!< SDFM sync source is PWM4 SOCA
SDFM_SYNC_PWM4_SOCB = 13, //!< SDFM sync source is PWM4 SOCB
SDFM_SYNC_PWM5_SOCA = 16, //!< SDFM sync source is PWM5 SOCA
SDFM_SYNC_PWM5_SOCB = 17, //!< SDFM sync source is PWM5 SOCB
SDFM_SYNC_PWM6_SOCA = 20, //!< SDFM sync source is PWM6 SOCA
SDFM_SYNC_PWM6_SOCB = 21, //!< SDFM sync source is PWM6 SOCB
SDFM_SYNC_PWM7_SOCA = 24, //!< SDFM sync source is PWM7 SOCA
SDFM_SYNC_PWM7_SOCB = 25, //!< SDFM sync source is PWM7 SOCB
SDFM_SYNC_PWM8_SOCA = 28, //!< SDFM sync source is PWM8 SOCA
SDFM_SYNC_PWM8_SOCB = 29 //!< SDFM sync source is PWM8 SOCB
} SDFM_PWMSyncSource;
static inline void
SDFM_setPWMSyncSource(uint32_t base, SDFM_FilterNumber filterNumber,
SDFM_PWMSyncSource syncSource)
But in the f2837xd folder (ti\c2000\C2000Ware_4_01_00_00\driverlib\f2837xd\driverlib) , the above function seems to be missing.
This are my SDFM settings:
void init_sdfm(uint32_t base) //SDFM1_BASE
{
//
// SD1 -> mySDFM0 Pinmux
//
GPIO_setPinConfig(GPIO_123_SD1_C1);
GPIO_setQualificationMode(123, GPIO_QUAL_3SAMPLE);
GPIO_setPinConfig(GPIO_122_SD1_D1);
GPIO_setQualificationMode(122, GPIO_QUAL_3SAMPLE);
Interrupt_register(INT_SD1, INT_mySDFM0_ISR);
Interrupt_enable(INT_SD1);
//
// Input Control Unit
//
// Configure Input Control Unit: Modulator Clock rate = Modulator data rate
//
SDFM_setupModulatorClock(base, SDFM_FILTER_1, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);
//
// Configure comparator filter settings
//
SDFM_configComparator(base, (SDFM_FILTER_1 | SDFM_FILTER_SINC_1 | SDFM_SET_OSR(0)), SDFM_THRESHOLD(0,0));
//
// Configure data filter settings
//
SDFM_configDataFilter(base, (SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(128)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(7)));
// Master Filter Enable
SDFM_enableMasterFilter(base);
//
// Configure SDSYNC (Filter reset from PWM)
//
SDFM_enableExternalReset(base, SDFM_FILTER_1);
//SDFM_disableExternalReset(base, SDFM_FILTER_1);
SDFM_enableInterrupt(base, SDFM_FILTER_1,
(SDFM_MODULATOR_FAILURE_INTERRUPT |
SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT));
SDFM_disableInterrupt(base, SDFM_FILTER_1,
(SDFM_HIGH_LEVEL_THRESHOLD_INTERRUPT |
SDFM_LOW_LEVEL_THRESHOLD_INTERRUPT));
//
// Enable master interrupt so that any of the filter interrupts can trigger
// by SDFM interrupt to CPU
//
SDFM_enableMasterInterrupt(SDFM1_BASE);
}
EPWM_SignalParams pwmSignal = {
10000, //!< Desired Signal Frequency(in Hz)
0.5f, //!< Desired ePWMxA Signal Duty
0.5f, //!< Desired ePWMxB Signal Duty
true, //!< Invert ePWMxB Signal if true
DEVICE_SYSCLK_FREQ, //!< SYSCLK Frequency(in Hz)
SYSCTL_EPWMCLK_DIV_2, //!< EPWM Clock Divider
EPWM_COUNTER_MODE_UP_DOWN, //!< Time Base Counter Mode
EPWM_CLOCK_DIVIDER_1, //!< Time Base Counter Clock Divider
EPWM_HSCLOCK_DIVIDER_1 //!< Time Base Counter HS Clock Divider
};
void pwm_init(uint32_t base)
{
EPWM_configureSignal(base, &pwmSignal);
EPWM_setSyncOutPulseMode(base, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
Interrupt_enable(INT_EPWM4);
}
Kindly Help.



