Good afternoon.
I work with TMS320F28388D.
I'm interested in PWM
The documentation for the processor has a diagram.
It shows that the DCS can generate an interrupt.
I have a signal coming from an external circuit to the PWM. Goes to DCS.
Is it possible to get an interrupt from this signal? As shown in the diagram.
Here is the initialization code.
void PinMux_init()
{
//
// EPWM2 -> SYSTEM_PWM Pinmux
//
GPIO_setPinConfig(GPIO_2_EPWM2A);
GPIO_setPinConfig(GPIO_148_EPWM2B);
// GPIO0 -> myGPIOInputInterrupt0 Pinmux
GPIO_setPinConfig(GPIO_0_GPIO0);
// GPIO1 -> myGPIOOutput0 Pinmux
GPIO_setPinConfig(GPIO_1_GPIO1);
// GPIO40 -> KEY_A Pinmux
GPIO_setPinConfig(GPIO_40_GPIO40);
// GPIO44 -> KEY_B Pinmux
GPIO_setPinConfig(GPIO_44_GPIO44);
// GPIO45 -> KEY_C Pinmux
GPIO_setPinConfig(GPIO_45_GPIO45);
// GPIO151 -> GPIO_SYNC_INTERRUPT Pinmux
GPIO_setPinConfig(GPIO_151_GPIO151);
// GPIO149 -> TZ_RISEN_IN Pinmux
GPIO_setPinConfig(GPIO_149_GPIO149);
//
// OUTPUTXBAR3 -> OUTPUTXBAR Pinmux
//
GPIO_setPinConfig(GPIO_5_OUTPUTXBAR3);
//
// SCIA -> SCI_DBG Pinmux
//
GPIO_setPinConfig(GPIO_43_SCIA_RX);
GPIO_setPinConfig(GPIO_42_SCIA_TX);
}
void EPWM_init(){
EPWM_setClockPrescaler(SYSTEM_PWM_BASE, EPWM_CLOCK_DIVIDER_4, EPWM_HSCLOCK_DIVIDER_4);
EPWM_setTimeBasePeriod(SYSTEM_PWM_BASE, 15600);
EPWM_setPeriodLoadMode(SYSTEM_PWM_BASE, EPWM_PERIOD_DIRECT_LOAD);
EPWM_setTimeBaseCounter(SYSTEM_PWM_BASE, 0);
EPWM_setTimeBaseCounterMode(SYSTEM_PWM_BASE, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_setCountModeAfterSync(SYSTEM_PWM_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
EPWM_enablePhaseShiftLoad(SYSTEM_PWM_BASE);
EPWM_setPhaseShift(SYSTEM_PWM_BASE, 0);
EPWM_enableSyncOutPulseSource(SYSTEM_PWM_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
EPWM_setOneShotSyncOutTrigger(SYSTEM_PWM_BASE, EPWM_OSHT_SYNC_OUT_TRIG_RELOAD);
EPWM_setCounterCompareValue(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_A, 12600);
EPWM_setCounterCompareShadowLoadMode(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_B, 0);
EPWM_setCounterCompareShadowLoadMode(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
EPWM_enableTripZoneInterrupt(SYSTEM_PWM_BASE, EPWM_TZ_INTERRUPT_DCAEVT1);
EPWM_selectDigitalCompareTripInput(SYSTEM_PWM_BASE, EPWM_DC_TRIP_TRIPIN6, EPWM_DC_TYPE_DCAH);
EPWM_selectDigitalCompareTripInput(SYSTEM_PWM_BASE, EPWM_DC_TRIP_TRIPIN5, EPWM_DC_TYPE_DCAL);
EPWM_setTripZoneDigitalCompareEventCondition(SYSTEM_PWM_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_enableDigitalCompareSyncEvent(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A);
EPWM_setDigitalCompareEventSyncMode(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);
EPWM_selectDigitalCompareCBCLatchClearEvent(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_CBC_LATCH_CLR_ON_CNTR_ZERO_PERIOD);
EPWM_setDigitalCompareFilterInput(SYSTEM_PWM_BASE, EPWM_DC_WINDOW_SOURCE_DCBEVT2);
EPWM_enableInterrupt(SYSTEM_PWM_BASE);
EPWM_setInterruptSource(SYSTEM_PWM_BASE, EPWM_INT_TBCTR_ZERO);
EPWM_setInterruptEventCount(SYSTEM_PWM_BASE, 1);
}
What should I add to get direct from DCS and not through TZ ?
