下午好。
我使用 TMS320F28388D。
我对 PWM 感兴趣
处理器的文档中有一个图表。 
显示 DCS 可以生成中断。
我有一个来自外部电路的信号连接到 PWM。 转向 DCS。
有可能从这个信号获得一个中断吗? 如图所示。
这里是初始化代码。
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);
}
我应该添加什么直接从 DCS 而不是通过 TZ ?
