I have some code that works well when running from RAM, but not when I try building from Flash. I use the CLA. The linker command files look to be correct, according to what I have read online. The two CLA tasks trigger once, and then never again.
The code startup, roughly:
EALLOW
Device_init();
Interrupt_initModule();
Interrupt_initVectorTable();
setupADCs();
setupGPIO();
setupPWM();
setupCLA();
Interrupt_register(INT_CLA1_1, &ISR_cla1_task1);
Interrupt_register(INT_CLA1_2, &ISR_cla1_task2);
ADC_setInterruptSource(ADCC_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER1);
ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1);
ADC_enableInterrupt(ADCC_BASE, ADC_INT_NUMBER1);
calcOffsetsADC();
EDIS;
ADC_enableInterrupt(ADCC_BASE, ADC_INT_NUMBER1)
Interrupt_enable(INT_CLA1_1);
EPWM_clearEventTriggerInterruptFlag(EPWM2_BASE);
Interrupt_enable(INT_CLA1_2);
EINT;
while(1);
CLA Task 1 is triggered by ADCC Interrupt 1
CLA Task 2 is triggered by EPWM2
The CLA interrupt ISRs are
__interrupt void ISR_cla1_task1(void)
{
ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);
//
// Check if overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADCC_BASE, ADC_INT_NUMBER1))
{
ADC_clearInterruptOverflowStatus(ADCC_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCC_BASE, ADC_INT_NUMBER1);
}
return;
}
__interrupt void ISR_cla1_task2(void)
{
EPWM_clearEventTriggerInterruptFlag(EPWM2_BASE);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP11);
return;
}
I see that both CLA tasks run one time. I'm kind of at a loss as to what to look at next for this. Any suggestions?