This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TMS320F280033中配置CMPSS触发EPWM的TZ模块进行封锁EPWM输出,配置了链路通道,分别位CMPSS1和CMPSS2,CMPSS1可以正常触发TZ模块,但是CMPSS触发条件时会使芯片复位,看门狗没有使能。芯片供电也正常,没有断电。把CMPSS2的模拟量信号给到CMPSS1,也会导致同样的现象。这个是配置有问题吗,但是为什么会使芯片复位。
void dev_cmpss_init(void) { // // Disable all the muxes first // XBAR_enableEPWMMux(XBAR_TRIP4, 0x00); // // Analog Routing // Set CMPSS1 to compare VBUS voltage signal, A6 // Set CMPSS2 to compare V12V voltage signal, A5 // Set CMPSS3 to compare I_DCDC_P current signal, A3 // Set CMPSS4 to compare I_12V current signal, A8 // ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_1, 0x2); //A6 // ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_2, 0x5); //A5 // ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_3, 0x5); //A3 ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_2, 0x4); //A8 ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_1, 0x2); // ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_2, 0x5); // ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_3, 0x5); ASysCtl_selectCMPLPMux(ASYSCTL_CMPLPMUX_SELECT_2, 0x4); // // Set trip limits in CMPSS // Link CMPSS events to EPWM modules // Link CMPSS1 to EPWM TZ event // Link CMPSS2 to EPWM TZ event // Link CMPSS3 to EPWM TZ event // Link CMPSS4 to EPWM TZ event // dev_cmpss_set_trip_limit(VBUS_CMPSS_BASE, VBUS_TRIP_DACVAL); XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX00_CMPSS1_CTRIPH); XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX00); // // dev_cmpss_set_trip_limit(V12V_CMPSS_BASE, V12V_TRIP_DACVAL); // XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX02_CMPSS2_CTRIPH); // XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX02); // // dev_cmpss_set_trip_limit(IDCDCP_CMPSS_BASE, IDCDCP_TRIP_DACVAL); // XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX04_CMPSS3_CTRIPH); // XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX04); // // dev_cmpss_set_trip_limit(I12V_CMPSS_BASE, I12V_TRIP_DACVAL); // XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX06_CMPSS4_CTRIPH); // XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX06); dev_cmpss_set_trip_limit(CMPSS2_BASE, I12V_TRIP_DACVAL); XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX02_CMPSS2_CTRIPH); XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX02); } static void dev_cmpss_set_trip_limit(uint32_t cmpss_base, int16_t DACval) { // //Enable CMPSS1 // CMPSS_enableModule(cmpss_base); // //Use VDDA as the reference for comparator DACs // CMPSS_configDAC(cmpss_base, CMPSS_DACVAL_SYSCLK | CMPSS_DACREF_VDDA | CMPSS_DACSRC_SHDW); // //Set DAC to H~90% and L ~10% valuess // // CMPSS_setDACValueHigh(cmpss_base, 2048+DACval); // CMPSS_setDACValueLow(cmpss_base, 2048-DACval); CMPSS_setDACValueHigh(cmpss_base, DACval); CMPSS_setDACValueLow(cmpss_base, 0); // //High Comparator output is "not" inverted for high compare event //Low Comparator output is inverted for for low compare event // CMPSS_configHighComparator(cmpss_base, CMPSS_INSRC_DAC ); CMPSS_configLowComparator(cmpss_base, CMPSS_INSRC_DAC | CMPSS_INV_INVERTED); // //CMPSS_configFilterHigh(base, samplePrescale,sampleWindow,threshold); //Every 10 sysclk sample once, input 33 samples, //when >= 23 samples are same, output this value // CMPSS_configFilterHigh(cmpss_base, 9, 32, 22); //2.75us sysclk = 120MHz; T = 1/sysclk = 8.3ns, T_all = 8.3*(9+1)*(32+1) = 2.75us CMPSS_configFilterLow(cmpss_base, 9, 32, 22); // //Reset filter logic & start filtering // CMPSS_initFilterHigh(cmpss_base); CMPSS_initFilterLow(cmpss_base); // //Configure CTRIPOUT path: Digital filter connect CTRIPOUT3 // CMPSS_configOutputsHigh(cmpss_base, CMPSS_TRIP_FILTER | CMPSS_TRIP_FILTER); CMPSS_configOutputsLow(cmpss_base, CMPSS_TRIP_FILTER | CMPSS_TRIP_FILTER); // //Comparator hysteresis control , set to 2x typical value // CMPSS_setHysteresis(cmpss_base, 2); // //Clear the latched comparator events // CMPSS_clearFilterLatchHigh(cmpss_base); CMPSS_clearFilterLatchLow(cmpss_base); } dev_epwm_setup_tz_ost(EPWM1_BASE); static void dev_epwm_setup_tz_ost(uint32_t epwm_base) { // //Trip 4 is the input to the DCAHCOMPSEL. Output eventA1 when DCAH is set. //Set DC event source // // EPWM_selectDigitalCompareTripInput(epwm_base, EPWM_DC_TRIP_TRIPIN4, EPWM_selectDigitalCompareTripInput(epwm_base, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAH); EPWM_setTripZoneDigitalCompareEventCondition(epwm_base, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH); EPWM_setDigitalCompareEventSource(epwm_base, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); EPWM_setDigitalCompareEventSyncMode(epwm_base, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED); // // Enable the following trips Emulator Stop,TZ1-3 and DCAEVT1 // EPWM_enableTripZoneSignals(epwm_base, EPWM_TZ_SIGNAL_DCAEVT1); // // What do we want the OST/CBC events to do? // TZA events can force EPWMxA // TZB events can force EPWMxB // EPWM_setTripZoneAction(epwm_base, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW); EPWM_setTripZoneAction(epwm_base, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW); // //Clear any spurious trip and trip flag // EPWM_clearTripZoneFlag(epwm_base, (EPWM_TZ_INTERRUPT_OST | EPWM_TZ_INTERRUPT_DCAEVT1)); }