CCSTUDIO: 280049c ecap phase and ecap interrupt

Part Number: CCSTUDIO

I'm now trying to use eCAP1 to capture the period of ePWM1 and trigger an interrupt to read the captured value. Meanwhile, I want to use eCAP4 to capture the value of ePWM2, so as to calculate the phase difference between ePWM1 and ePWM2. However, the value captured by eCAP4 is always zero – when I debug online after entering the interrupt, both freq2 and duty2 are 0. Why is this happening?

main 

#include "board.h"
#include "driverlib.h"

#include "device.h"




volatile uint16_t myADC0Result0;
volatile uint16_t myADC0Result1;

volatile float32_t ADC_ac;
volatile float32_t ADC_bus;
volatile float32_t ADC_ac_real;
volatile float32_t ADC_bus_real;
volatile float32_t ADC_ac_real_Abs;


volatile uint32_t cap1Count_pwm1 = 0;
volatile uint32_t cap2Count_pwm1 = 0;
volatile uint32_t cap3Count_pwm1= 0;
volatile uint32_t cap4Count_pwm1  = 0;

volatile uint32_t cap1Count_pwm2 = 0;
volatile uint32_t cap2Count_pwm2 = 0;
volatile uint32_t cap3Count_pwm2= 0;
volatile uint32_t cap4Count_pwm2= 0;


volatile uint32_t T1_pwm1;
volatile uint32_t T2_pwm1;

volatile uint32_t T1_pwm2;
volatile uint32_t T2_pwm2;






volatile uint32_t freq1=0;
volatile uint32_t duty1=0;

volatile uint32_t freq2=0;
volatile uint32_t duty2=0;

volatile uint32_t  ECap1IntCount;

volatile uint32_t ECap1IntCount;
volatile uint32_t phase = 0;




/**
 * main.c
 */
void main(void)
{


    //
    // 1. 设备基础初始化(时钟、看门狗、Flash)
    //

    Device_init();

    //
    // 2. 中断模块初始化 & 关闭全局中断
    //
    Interrupt_initModule();
    Interrupt_initVectorTable();

    //
    // 3. SysConfig 自动生成的外设初始化
    //    (GPIO / EPWM / ADC / CPUTIMER / INTERRUPT 映射)
    //
    Board_init();

    //
    // 4. 初始化你自己的软件变量 / 状态机
    //



    //
    // 5. 使能 CPU 中断
    //
   EINT;   // Enable Global Interrupts
    ERTM;   // Enable Realtime Interrupts

 //   DINT;

    //
    // 6. 主循环(轻量逻辑 or 空转)
    //



    while(1)
    {

    }

}

__interrupt void INT_myECAP0_period_ISR(void)
{
    uint32_t c1_1, c2_1, c3_1, c4_1;
    uint32_t c1_2, c2_2, c3_2, c4_2;
    uint32_t t1_1, t2_1, t1_2, t2_2;
    uint32_t f1, d1, f2, d2;
    int32_t  ph;

    ECap1IntCount++;

    c1_1 = ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_1);
    c2_1 = ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_2);
    c3_1 = ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_3);
    c4_1 = ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_4);

    c1_2 = ECAP_getEventTimeStamp(ECAP4_BASE, ECAP_EVENT_1);
    c2_2 = ECAP_getEventTimeStamp(ECAP4_BASE, ECAP_EVENT_2);
    c3_2 = ECAP_getEventTimeStamp(ECAP4_BASE, ECAP_EVENT_3);
    c4_2 = ECAP_getEventTimeStamp(ECAP4_BASE, ECAP_EVENT_4);

    t1_1 = c3_1 - c1_1;
    t2_1 = c2_1 - c1_1;

    t1_2 = c3_2 - c1_2;
    t2_2 = c2_2 - c1_2;

    if(t1_1 != 0U)
    {
        f1 = 50000000UL / t1_1;
        d1 = (t2_1 * 100UL) / t1_1;
    }
    else
    {
        f1 = 0U;
        d1 = 0U;
    }

    if(t1_2 != 0U)
    {
        f2 = 50000000UL / t1_2;
        d2 = (t2_2 * 100UL) / t1_2;
    }
    else
    {
        f2 = 0U;
        d2 = 0U;
    }

    ph = (int32_t)c1_2 - (int32_t)c1_1;

    // 最后一次性写回全局变量
    cap1Count_pwm1 = c1_1;
    cap2Count_pwm1 = c2_1;
    cap3Count_pwm1 = c3_1;
    cap4Count_pwm1 = c4_1;

    cap1Count_pwm2 = c1_2;
    cap2Count_pwm2 = c2_2;
    cap3Count_pwm2 = c3_2;
    cap4Count_pwm2 = c4_2;

    T1_pwm1 = t1_1;
    T2_pwm1 = t2_1;
    T1_pwm2 = t1_2;
    T2_pwm2 = t2_2;

    freq1 = f1;
    duty1 = d1;
    freq2 = f2;
    duty2 = d2;

    phase = ph;

    
    //EPWM_setPhaseShift(myEPWM1_BASE, 0);
    //EPWM_setPhaseShift(myEPWM1_BASE, 833);1667/2
    
    ECAP_clearInterrupt(ECAP1_BASE, ECAP_ISR_SOURCE_CAPTURE_EVENT_4);
    ECAP_clearGlobalInterrupt(ECAP1_BASE);
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP4);
}
board.c
/*
 * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#include "board.h"

//*****************************************************************************
//
// Board Configurations
// Initializes the rest of the modules.
// Call this function in your application if you wish to do all module
// initialization.
// If you wish to not use some of the initializations, instead of the
// Board_init use the individual Module_inits
//
//*****************************************************************************
void Board_init()
{
    EALLOW;

    PinMux_init();
    INPUTXBAR_init();
    SYNC_init();
    ASYSCTL_init();
    ECAP_init();
    EPWM_init();
    INTERRUPT_init();

    EDIS;
}

//*****************************************************************************
//
// PINMUX Configurations
//
//*****************************************************************************
void PinMux_init()
{
    //
    // PinMux for modules assigned to CPU1
    //

    //
    // EPWM1 -> myEPWM0 Pinmux
    //
    GPIO_setPinConfig(myEPWM0_EPWMA_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM0_EPWMA_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM0_EPWMA_GPIO, GPIO_QUAL_SYNC);

    GPIO_setPinConfig(myEPWM0_EPWMB_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM0_EPWMB_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM0_EPWMB_GPIO, GPIO_QUAL_SYNC);

    //
    // EPWM2 -> myEPWM1 Pinmux
    //
    GPIO_setPinConfig(myEPWM1_EPWMA_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM1_EPWMA_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM1_EPWMA_GPIO, GPIO_QUAL_SYNC);

    GPIO_setPinConfig(myEPWM1_EPWMB_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM1_EPWMB_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM1_EPWMB_GPIO, GPIO_QUAL_SYNC);


}

//*****************************************************************************
//
// ASYSCTL Configurations
//
//*****************************************************************************
void ASYSCTL_init(){
    //
    // asysctl initialization
    //
    // Disables the temperature sensor output to the ADC.
    //
    ASysCtl_disableTemperatureSensor();
    //
    // Set the analog voltage reference selection to external.
    //
    ASysCtl_setAnalogReferenceExternal( ASYSCTL_VREFHIA | ASYSCTL_VREFHIB | ASYSCTL_VREFHIC );
}

//*****************************************************************************
//
// ECAP Configurations
//
//*****************************************************************************
void ECAP_init(){
    myECAP0_period_init();
    myECAP1_phase_init();
}

void myECAP0_period_init(){
    //
    // Disable ,clear all capture flags and interrupts
    //
    ECAP_disableInterrupt(myECAP0_period_BASE,
        (ECAP_ISR_SOURCE_CAPTURE_EVENT_1  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_2  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_3  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_4  |
        ECAP_ISR_SOURCE_COUNTER_OVERFLOW |
        ECAP_ISR_SOURCE_COUNTER_PERIOD   |
        ECAP_ISR_SOURCE_COUNTER_COMPARE));
    ECAP_clearInterrupt(myECAP0_period_BASE,
        (ECAP_ISR_SOURCE_CAPTURE_EVENT_1  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_2  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_3  |
        ECAP_ISR_SOURCE_CAPTURE_EVENT_4  |
        ECAP_ISR_SOURCE_COUNTER_OVERFLOW |
        ECAP_ISR_SOURCE_COUNTER_PERIOD   |
        ECAP_ISR_SOURCE_COUNTER_COMPARE));
    //
    // Disables time stamp capture.
    //
    ECAP_disableTimeStampCapture(myECAP0_period_BASE);
    //
    // Stops Time stamp counter.
    //
    ECAP_stopCounter(myECAP0_period_BASE);
    //
    // Sets eCAP in Capture mode.
    //
    ECAP_enableCaptureMode(myECAP0_period_BASE);
    //
    // Sets the capture mode.
    //
    ECAP_setCaptureMode(myECAP0_period_BASE,ECAP_CONTINUOUS_CAPTURE_MODE,ECAP_EVENT_4);
    //
    // Sets the Capture event prescaler.
    //
    ECAP_setEventPrescaler(myECAP0_period_BASE, 0U);
    //
    // Sets the Capture event polarity.
    //
    ECAP_setEventPolarity(myECAP0_period_BASE,ECAP_EVENT_1,ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity(myECAP0_period_BASE,ECAP_EVENT_2,ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity(myECAP0_period_BASE,ECAP_EVENT_3,ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity(myECAP0_period_BASE,ECAP_EVENT_4,ECAP_EVNT_FALLING_EDGE);
    //
    // Configure counter reset on events
    //
    ECAP_disableCounterResetOnEvent(myECAP0_period_BASE,ECAP_EVENT_1);
    ECAP_disableCounterResetOnEvent(myECAP0_period_BASE,ECAP_EVENT_2);
    ECAP_disableCounterResetOnEvent(myECAP0_period_BASE,ECAP_EVENT_3);
    ECAP_disableCounterResetOnEvent(myECAP0_period_BASE,ECAP_EVENT_4);
    //
    // Select eCAP input.
    //
    ECAP_selectECAPInput(myECAP0_period_BASE,ECAP_INPUT_INPUTXBAR1);
    //
    // Sets a phase shift value count.
    //
    ECAP_setPhaseShiftCount(myECAP0_period_BASE,0U);
    //
    // Disable counter loading with phase shift value.
    //
    ECAP_disableLoadCounter(myECAP0_period_BASE);
    //
    // Configures Sync out signal mode.
    //
    ECAP_setSyncOutMode(myECAP0_period_BASE,ECAP_SYNC_OUT_DISABLED);
    //
    // Configures emulation mode.
    //
    ECAP_setEmulationMode(myECAP0_period_BASE,ECAP_EMULATION_STOP);
    //
    // Starts Time stamp counter for myECAP0_period.
    //
    ECAP_startCounter(myECAP0_period_BASE);
    //
    // Enables time stamp capture for myECAP0_period.
    //
    ECAP_enableTimeStampCapture(myECAP0_period_BASE);
    //
    // Re-arms the eCAP module for myECAP0_period.
    //
    ECAP_reArm(myECAP0_period_BASE);
    //
    // Enables interrupt source for myECAP0_period.
    //
    ECAP_enableInterrupt(myECAP0_period_BASE,(ECAP_ISR_SOURCE_CAPTURE_EVENT_4));

}
void myECAP1_phase_init(){
    //
    // Disables time stamp capture.
    //
    ECAP_disableTimeStampCapture(myECAP1_phase_BASE);
    //
    // Stops Time stamp counter.
    //
    ECAP_stopCounter(myECAP1_phase_BASE);
    //
    // Sets eCAP in Capture mode.
    //
    ECAP_enableCaptureMode(myECAP1_phase_BASE);
    //
    // Sets the capture mode.
    //
    ECAP_setCaptureMode(myECAP1_phase_BASE,ECAP_CONTINUOUS_CAPTURE_MODE,ECAP_EVENT_4);
    //
    // Sets the Capture event prescaler.
    //
    ECAP_setEventPrescaler(myECAP1_phase_BASE, 0U);
    //
    // Sets the Capture event polarity.
    //
    ECAP_setEventPolarity(myECAP1_phase_BASE,ECAP_EVENT_1,ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity(myECAP1_phase_BASE,ECAP_EVENT_2,ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity(myECAP1_phase_BASE,ECAP_EVENT_3,ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity(myECAP1_phase_BASE,ECAP_EVENT_4,ECAP_EVNT_FALLING_EDGE);
    //
    // Configure counter reset on events
    //
    ECAP_disableCounterResetOnEvent(myECAP1_phase_BASE,ECAP_EVENT_1);
    ECAP_disableCounterResetOnEvent(myECAP1_phase_BASE,ECAP_EVENT_2);
    ECAP_disableCounterResetOnEvent(myECAP1_phase_BASE,ECAP_EVENT_3);
    ECAP_disableCounterResetOnEvent(myECAP1_phase_BASE,ECAP_EVENT_4);
    //
    // Select eCAP input.
    //
    ECAP_selectECAPInput(myECAP1_phase_BASE,ECAP_INPUT_INPUTXBAR2);
    //
    // Sets a phase shift value count.
    //
    ECAP_setPhaseShiftCount(myECAP1_phase_BASE,0U);
    //
    // Disable counter loading with phase shift value.
    //
    ECAP_disableLoadCounter(myECAP1_phase_BASE);
    //
    // Configures Sync out signal mode.
    //
    ECAP_setSyncOutMode(myECAP1_phase_BASE,ECAP_SYNC_OUT_DISABLED);
    //
    // Configures emulation mode.
    //
    ECAP_setEmulationMode(myECAP1_phase_BASE,ECAP_EMULATION_STOP);
    //
    // Starts Time stamp counter for myECAP1_phase.
    //
    ECAP_startCounter(myECAP1_phase_BASE);
    //
    // Enables time stamp capture for myECAP1_phase.
    //
    ECAP_enableTimeStampCapture(myECAP1_phase_BASE);
    //
    // Re-arms the eCAP module for myECAP1_phase.
    //
    ECAP_reArm(myECAP1_phase_BASE);

}

//*****************************************************************************
//
// EPWM Configurations
//
//*****************************************************************************
void EPWM_init(){
    EPWM_setClockPrescaler(myEPWM0_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_2);
    EPWM_setTimeBasePeriod(myEPWM0_BASE, 1667);
    EPWM_setTimeBaseCounter(myEPWM0_BASE, 0);
    EPWM_setTimeBaseCounterMode(myEPWM0_BASE, EPWM_COUNTER_MODE_UP);
    EPWM_disablePhaseShiftLoad(myEPWM0_BASE);
    EPWM_setPhaseShift(myEPWM0_BASE, 0);
    EPWM_setSyncOutPulseMode(myEPWM0_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
    EPWM_setCounterCompareValue(myEPWM0_BASE, EPWM_COUNTER_COMPARE_A, 833);
    EPWM_setCounterCompareShadowLoadMode(myEPWM0_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setCounterCompareValue(myEPWM0_BASE, EPWM_COUNTER_COMPARE_B, 0);
    EPWM_setCounterCompareShadowLoadMode(myEPWM0_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_disableActionQualifierShadowLoadMode(myEPWM0_BASE, EPWM_ACTION_QUALIFIER_A);
    EPWM_setActionQualifierShadowLoadMode(myEPWM0_BASE, EPWM_ACTION_QUALIFIER_A, EPWM_AQ_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_disableActionQualifierShadowLoadMode(myEPWM0_BASE, EPWM_ACTION_QUALIFIER_B);
    EPWM_setActionQualifierShadowLoadMode(myEPWM0_BASE, EPWM_ACTION_QUALIFIER_B, EPWM_AQ_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(myEPWM0_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM0_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);
    EPWM_disableRisingEdgeDelayCountShadowLoadMode(myEPWM0_BASE);
    EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM0_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);
    EPWM_disableFallingEdgeDelayCountShadowLoadMode(myEPWM0_BASE);
    EPWM_setClockPrescaler(myEPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_2);
    EPWM_setTimeBasePeriod(myEPWM1_BASE, 1667);
    EPWM_setTimeBaseCounter(myEPWM1_BASE, 0);
    EPWM_setTimeBaseCounterMode(myEPWM1_BASE, EPWM_COUNTER_MODE_UP);
    EPWM_enablePhaseShiftLoad(myEPWM1_BASE);
    EPWM_setPhaseShift(myEPWM1_BASE, 0);
    EPWM_setSyncOutPulseMode(myEPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, 833);
    EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, 0);
    EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_disableActionQualifierShadowLoadMode(myEPWM1_BASE, EPWM_ACTION_QUALIFIER_A);
    EPWM_setActionQualifierShadowLoadMode(myEPWM1_BASE, EPWM_ACTION_QUALIFIER_A, EPWM_AQ_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_disableActionQualifierShadowLoadMode(myEPWM1_BASE, EPWM_ACTION_QUALIFIER_B);
    EPWM_setActionQualifierShadowLoadMode(myEPWM1_BASE, EPWM_ACTION_QUALIFIER_B, EPWM_AQ_LOAD_ON_CNTR_ZERO);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
    EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
    EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);
    EPWM_disableRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);
    EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);
    EPWM_disableFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);
}

//*****************************************************************************
//
// INPUTXBAR Configurations
//
//*****************************************************************************
void INPUTXBAR_init(){
    epwm1a_init();
    epwm2a_init();
}

void epwm1a_init(){
    XBAR_setInputPin(epwm1a_INPUT, epwm1a_SOURCE);
}
void epwm2a_init(){
    XBAR_setInputPin(epwm2a_INPUT, epwm2a_SOURCE);
}

//*****************************************************************************
//
// INTERRUPT Configurations
//
//*****************************************************************************
void INTERRUPT_init(){

    // Interrupt Settings for INT_myECAP0_period
    // ISR need to be defined for the registered interrupts
    Interrupt_register(INT_myECAP0_period, &INT_myECAP0_period_ISR);
    Interrupt_enable(INT_myECAP0_period);
}
//*****************************************************************************
//
// SYNC Scheme Configurations
//
//*****************************************************************************
void SYNC_init(){
    SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
    //
    // For EPWM1, the sync input is: SYSCTL_SYNC_IN_SRC_EXTSYNCIN1
    //
    SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM4, SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
    SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM7, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP1, SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
    SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP4, SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
    SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP6, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    //
    // SOCA
    //
    SysCtl_enableExtADCSOCSource(0);
    //
    // SOCB
    //
    SysCtl_enableExtADCSOCSource(0);
}
board.h
/*
 * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#ifndef BOARD_H
#define BOARD_H

//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif

//
// Included Files
//

#include "driverlib.h"
#include "device.h"

//*****************************************************************************
//
// PinMux Configurations
//
//*****************************************************************************

//
// EPWM1 -> myEPWM0 Pinmux
//
//
// EPWM1_A - GPIO Settings
//
#define GPIO_PIN_EPWM1_A 0
#define myEPWM0_EPWMA_GPIO 0
#define myEPWM0_EPWMA_PIN_CONFIG GPIO_0_EPWM1_A
//
// EPWM1_B - GPIO Settings
//
#define GPIO_PIN_EPWM1_B 1
#define myEPWM0_EPWMB_GPIO 1
#define myEPWM0_EPWMB_PIN_CONFIG GPIO_1_EPWM1_B

//
// EPWM2 -> myEPWM1 Pinmux
//
//
// EPWM2_A - GPIO Settings
//
#define GPIO_PIN_EPWM2_A 2
#define myEPWM1_EPWMA_GPIO 2
#define myEPWM1_EPWMA_PIN_CONFIG GPIO_2_EPWM2_A
//
// EPWM2_B - GPIO Settings
//
#define GPIO_PIN_EPWM2_B 3
#define myEPWM1_EPWMB_GPIO 3
#define myEPWM1_EPWMB_PIN_CONFIG GPIO_3_EPWM2_B

//*****************************************************************************
//
// ASYSCTL Configurations
//
//*****************************************************************************

//*****************************************************************************
//
// ECAP Configurations
//
//*****************************************************************************
#define myECAP0_period_BASE ECAP1_BASE
#define myECAP0_period_SIGNAL_MUNIT_BASE ECAP1SIGNALMONITORING_BASE
void myECAP0_period_init();
#define myECAP1_phase_BASE ECAP4_BASE
#define myECAP1_phase_SIGNAL_MUNIT_BASE ECAP4SIGNALMONITORING_BASE
void myECAP1_phase_init();

//*****************************************************************************
//
// EPWM Configurations
//
//*****************************************************************************
#define myEPWM0_BASE EPWM1_BASE
#define myEPWM0_TBPRD 1667
#define myEPWM0_COUNTER_MODE EPWM_COUNTER_MODE_UP
#define myEPWM0_TBPHS 0
#define myEPWM0_CMPA 833
#define myEPWM0_CMPB 0
#define myEPWM0_CMPC 0
#define myEPWM0_CMPD 0
#define myEPWM0_DBRED 0
#define myEPWM0_DBFED 0
#define myEPWM0_TZA_ACTION EPWM_TZ_ACTION_HIGH_Z
#define myEPWM0_TZB_ACTION EPWM_TZ_ACTION_HIGH_Z
#define myEPWM0_INTERRUPT_SOURCE EPWM_INT_TBCTR_DISABLED
#define myEPWM1_BASE EPWM2_BASE
#define myEPWM1_TBPRD 1667
#define myEPWM1_COUNTER_MODE EPWM_COUNTER_MODE_UP
#define myEPWM1_TBPHS 0
#define myEPWM1_CMPA 833
#define myEPWM1_CMPB 0
#define myEPWM1_CMPC 0
#define myEPWM1_CMPD 0
#define myEPWM1_DBRED 0
#define myEPWM1_DBFED 0
#define myEPWM1_TZA_ACTION EPWM_TZ_ACTION_HIGH_Z
#define myEPWM1_TZB_ACTION EPWM_TZ_ACTION_HIGH_Z
#define myEPWM1_INTERRUPT_SOURCE EPWM_INT_TBCTR_DISABLED

//*****************************************************************************
//
// INPUTXBAR Configurations
//
//*****************************************************************************
#define epwm1a_SOURCE 0
#define epwm1a_INPUT XBAR_INPUT1
void epwm1a_init();
#define epwm2a_SOURCE 2
#define epwm2a_INPUT XBAR_INPUT2
void epwm2a_init();

//*****************************************************************************
//
// INTERRUPT Configurations
//
//*****************************************************************************

// Interrupt Settings for INT_myECAP0_period
// ISR need to be defined for the registered interrupts
#define INT_myECAP0_period INT_ECAP1
#define INT_myECAP0_period_INTERRUPT_ACK_GROUP INTERRUPT_ACK_GROUP4
extern __interrupt void INT_myECAP0_period_ISR(void);

//*****************************************************************************
//
// SYNC Scheme Configurations
//
//*****************************************************************************

//*****************************************************************************
//
// Board Configurations
//
//*****************************************************************************
void    Board_init();
void    ASYSCTL_init();
void    ECAP_init();
void    EPWM_init();
void    INPUTXBAR_init();
void    INTERRUPT_init();
void    SYNC_init();
void    PinMux_init();

//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif

#endif  // end of BOARD_H definition