C2000-GANG: F280049C SDFM EPWM同步问题

Part Number: C2000-GANG
Other Parts Discussed in Thread: AMC3306EVM

你好,我使用了贵公司的F280049C控制板,调制器用的AMC3306EVM,我想使用其中的SDFM同步功能,程序模板为sdfm_ex4_pwm_sync_cpuread.c。实际使用中,我能够采集到和输入一致的波形,并且能够在PWM1A(GPIO0)引脚上抓到PWM波形,但是我想问一下,这个同步体现在哪里?按照手册上的说明,PWM event能够复位DOSR counter。为了验证确实能够复位DOSR counter,我在sdfmDR1ISR中翻了个IO,按照我的理解,当GPIO0引脚上PWM反转时,中断中IO的反转周期或者占空比会因为DOSR counter的复位而产生变化,但是无论我怎么操作,进入中断的时间从来就没发生变化,或者说感觉DOST counter从来就没有复位过,请问是我的理解或操作有问题吗?麻烦解答,谢谢!

__interrupt void sdfmDR1ISR(void)
{
    GPIO_togglePin(12);
    static uint16_t loopCounter1 = 0,times = 0;
    SDFM_setOutputDataFormat(SDFM1_BASE, SDFM_FILTER_1,
                             SDFM_DATA_FORMAT_16_BIT);

    //
    // Read SDFM flag register (SDIFLG)
    //
    if(loopCounter1 >= MAX_SAMPLES)
    {
        loopCounter1 = 0;
        times++;
    }

    while((HWREG(SDFM1_BASE + SDFM_O_SDIFLG) & 0xF000U) != 0xF000U)
    {
    }

    filter1Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_1) >> 16U);
    filter2Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_2) >> 16U);
    filter3Result[loopCounter1] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_3) >> 16U);
    filter4Result[loopCounter1++] =
           (int16_t)(SDFM_getFilterData(SDFM1_BASE, SDFM_FILTER_4) >> 16U);


    //
    // Clear SDFM flag register (SDIFLG)
    //
    SDFM_clearInterruptFlag(SDFM1_BASE, SDFM_MASTER_INTERRUPT_FLAG |
                            SDFM_FILTER_1_NEW_DATA_FLAG            |
                            SDFM_FILTER_2_NEW_DATA_FLAG            |
                            SDFM_FILTER_3_NEW_DATA_FLAG            |
                            SDFM_FILTER_4_NEW_DATA_FLAG);

    //
    // Acknowledge this interrupt to receive more interrupts from group 5
    //
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);
}

 

image.png