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.

TMS320F280049: SDFM Acknowledge interrupt

Part Number: TMS320F280049
Other Parts Discussed in Thread: AMC1336

Hello. I use AMC1336 together with TMS320F280049PM. Here is the module configuration function

void SDFM_init()
{

Interrupt_register(INT_SDFM1DR1, &SDFM_DATA_READY); 
Interrupt_register(INT_SDFM1DR3, &SDFM_DATA_READY); 

Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);

SDFM_enableInterrupt(SDFM1_BASE, SDFM_FILTER_1, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);
SDFM_enableInterrupt(SDFM1_BASE, SDFM_FILTER_1, SDFM_MODULATOR_FAILURE_INTERRUPT);
SDFM_enableInterrupt(SDFM1_BASE, SDFM_FILTER_3, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);
SDFM_enableInterrupt(SDFM1_BASE, SDFM_FILTER_3, SDFM_MODULATOR_FAILURE_INTERRUPT);

GPIO_setDirectionMode (17, GPIO_DIR_MODE_IN);

GPIO_setMasterCore (17, GPIO_CORE_CPU1);
GPIO_setPadConfig (17, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(17, GPIO_QUAL_ASYNC);

GPIO_setDirectionMode (24, GPIO_DIR_MODE_IN);
GPIO_setMasterCore (24, GPIO_CORE_CPU1);
GPIO_setPadConfig (24, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(24, GPIO_QUAL_ASYNC);

GPIO_setDirectionMode (29, GPIO_DIR_MODE_IN);
GPIO_setMasterCore (29, GPIO_CORE_CPU1);
GPIO_setPadConfig (29, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(29, GPIO_QUAL_ASYNC);

GPIO_setDirectionMode (28, GPIO_DIR_MODE_IN);
GPIO_setMasterCore (28, GPIO_CORE_CPU1);
GPIO_setPadConfig (28, GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode(28, GPIO_QUAL_ASYNC);

GPIO_setPinConfig (GPIO_17_SD1_C1);
GPIO_setPinConfig (GPIO_24_SD1_D1);
GPIO_setPinConfig (GPIO_28_SD1_D3);
GPIO_setPinConfig (GPIO_29_SD1_C3);

SDFM_setupModulatorClock(SDFM1_BASE, SDFM_FILTER_1, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);
SDFM_setupModulatorClock(SDFM1_BASE, SDFM_FILTER_3, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);

// компаратор делает 312500 изм/сек; на входе компаратора sinc3 фильтр с 10мкс задержкой;
SDFM_configComparator(SDFM1_BASE,(SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(32)),
(SDFM_GET_LOW_THRESHOLD(0x0000) | SDFM_GET_HIGH_THRESHOLD(0x7FFF)), 0);
SDFM_configComparator(SDFM1_BASE,(SDFM_FILTER_3 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(32)),
(SDFM_GET_LOW_THRESHOLD(0x0000) | SDFM_GET_HIGH_THRESHOLD(0x7FFF)), 0);

// сигма-дельта АЦП делает 78125 изм/сек; на выходе АЦП стоит sinc3 фильтр с задержкой 38.4мкс
/*
SDFM_configDataFilter(SDFM1_BASE, (SDFM_FILTER_3 | SDFM_FILTER_SINC_3 |
SDFM_SET_OSR(128)), (SDFM_DATA_FORMAT_32_BIT | SDFM_FILTER_ENABLE));
SDFM_configDataFilter(SDFM1_BASE, (SDFM_FILTER_4 | SDFM_FILTER_SINC_3 |
SDFM_SET_OSR(128)), (SDFM_DATA_FORMAT_32_BIT | SDFM_FILTER_ENABLE));
*/

SDFM_enableFilter(SDFM1_BASE, SDFM_FILTER_1);
SDFM_setFilterType(SDFM1_BASE, SDFM_FILTER_1, SDFM_FILTER_SINC_3);
SDFM_setOutputDataFormat(SDFM1_BASE, SDFM_FILTER_1, SDFM_DATA_FORMAT_32_BIT);
SDFM_setFilterOverSamplingRatio(SDFM1_BASE, SDFM_FILTER_1, OSR - 1);

SDFM_enableFilter(SDFM1_BASE, SDFM_FILTER_3);
SDFM_setFilterType(SDFM1_BASE, SDFM_FILTER_3, SDFM_FILTER_SINC_3);
SDFM_setOutputDataFormat(SDFM1_BASE, SDFM_FILTER_3, SDFM_DATA_FORMAT_32_BIT);
SDFM_setFilterOverSamplingRatio(SDFM1_BASE, SDFM_FILTER_3, OSR - 1);

SDFM_enableMasterFilter(SDFM1_BASE);

SDFM_enableMasterInterrupt(SDFM1_BASE);

}

This is interrupt

_interrupt void SDFM_DATA_READY(void)
{
second_time=CPUTimer_getTimerCount(CPUTIMER1_BASE);
CPUTimer_stopTimer(CPUTIMER1_BASE);
configCPUTimer(CPUTIMER1_BASE,DEVICE_SYSCLK_FREQ,3000000); //every 30000000 usec
CPUTimer_startTimer(CPUTIMER1_BASE);
first_time=CPUTimer_getTimerCount(CPUTIMER1_BASE);


//ESTOP0;
if (measure_counter<4)
{
sum_Udc +=(float)(((int32_t)SDFM_getFilterData(SDFM1_BASE,SDFM_FILTER_3)))*SCALE_FACTOR_U-offset_Udc;
sum_Ia +=(float)(((int32_t)SDFM_getFilterData(SDFM1_BASE,SDFM_FILTER_1)))*SCALE_FACTOR_I-offset_Ia;
}
else
{
Udc = sum_Udc / (measure_counter - 1);
Ia = sum_Ia / (measure_counter - 1);
}

SDFM_clearInterruptFlag(SDFM1_BASE, SDFM_MASTER_INTERRUPT_FLAG | SDFM_FILTER_1_NEW_DATA_FLAG | SDFM_FILTER_3_NEW_DATA_FLAG);
// Acknowledge this interrupt to receive more interrupts from group 5
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);
}

As far as I understand, an interrupt should occur every ~70 us (OCR=256). In debug mode-every 6 us. Function  (SDFM_clear Interrupt Flag) does not set the desired bits to 1. What might be the problem?