Other Parts Discussed in Thread: C2000WARE
项目中通过GPIO连接xbar至DCAH,期望GPIO为高电平时触发TZ中断,但每次都是低电平触发,且只能触发一次,以下为配置TZ配置代码:
EPWM_selectDigitalCompareTripInput(pwmHandle[base],
EPWM_DC_TRIP_TRIPIN4,
EPWM_DC_TYPE_DCAH);
EPWM_setTripZoneDigitalCompareEventCondition(pwmHandle[base],
EPWM_TZ_DC_OUTPUT_A1,
EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_setDigitalCompareEventSource(pwmHandle[base], EPWM_DC_MODULE_A,
EPWM_DC_EVENT_1,
EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL);
EPWM_setDigitalCompareEventSyncMode(pwmHandle[base], EPWM_DC_MODULE_A,
EPWM_DC_EVENT_1,
EPWM_DC_EVENT_INPUT_NOT_SYNCED);
EPWM_enableTripZoneSignals(pwmHandle[base], EPWM_TZ_SIGNAL_DCAEVT1);
// Emulator Stop
EPWM_enableTripZoneSignals(pwmHandle[base], EPWM_TZ_SIGNAL_CBC6);
// What do we want the OST/CBC events to do?
// TZA events can force EPWMxA
// TZB events can force EPWMxB
// EPWMxA will go low
// EPWMxB will go low
EPWM_setTripZoneAction(pwmHandle[base], EPWM_TZ_ACTION_EVENT_TZA,
EPWM_TZ_ACTION_LOW);
EPWM_setTripZoneAction(pwmHandle[base], EPWM_TZ_ACTION_EVENT_TZB,
EPWM_TZ_ACTION_LOW);
// Clear any spurious OV trip
EPWM_clearTripZoneFlag(pwmHandle[base], EPWM_TZ_FLAG_DCAEVT1);
EPWM_clearTripZoneFlag(pwmHandle[base], EPWM_TZ_FLAG_OST);
EPWM_clearTripZoneFlag(pwmHandle[base], EPWM_TZ_FLAG_CBC);
fParaAll.para.DrvOcFirTime = 10;
// Set GPIO 4 as as Asynchronous input with pull up enabled
GPIO_setQualificationMode(DEVICE_GPIO_PIN_TZ_CUROVER, GPIO_QUAL_6SAMPLE);
GPIO_setQualificationPeriod(DEVICE_GPIO_PIN_TZ_CUROVER, (Uint32)fParaAll.para.DrvOcFirTime);
GPIO_setPadConfig(DEVICE_GPIO_PIN_TZ_CUROVER, GPIO_PIN_TYPE_INVERT);
GPIO_setPinConfig(DEVICE_GPIO_CFG_TZ_CUROVER);
GPIO_setDirectionMode(DEVICE_GPIO_PIN_TZ_CUROVER, GPIO_DIR_MODE_IN);
//
// Set GPIO 4 as TZ1 input
//
XBAR_setInputPin(INPUTXBAR_BASE, XBAR_INPUT2, DEVICE_GPIO_PIN_TZ_CUROVER);
EALLOW;
HWREG(XBARA_EPWM_CFG_REG_BASE + XBAR_O_OUTPUT4MUX0TO15CFG) = 0;
HWREG(XBARA_EPWM_CFG_REG_BASE + XBAR_O_OUTPUT4MUX16TO31CFG) = 0;
EDIS;
XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX03_INPUTXBAR1_INPUT2);