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.

TMS320F28379D: Timer interrupt vector is initialised by the adress function in PIE, but the function is never called.

Part Number: TMS320F28379D


Hello TI,

I am working on my RTOS on the C2000 family.

The issue is I could not execute the linked function to the timer interrupt service routine.

My code is a little bit complicated in comparison to TI code.

in the Initialization phase I am initializing all the vectors to unknown functions like this:

void * VectorTableHead = (void *)0x00000D00;
...

Uint32 *Source = (void *) &tpfnDInt_iISRVectorTable[0];
Uint32 *Destination = VectorTableHead;
...

for(u16Count = 3U ; u16Count<(Uint16)UserInt_NbOfIRQSources ; u16Count++)
 {
    tpfnDInt_iISRVectorTable[u16Count] = &vDInt_iUnknownInterrupt_Isr;

 }
 
 #ifdef CORE0_DRV_ENABLE
         //Set vector table location
         Source = Source + 3;
         Destination = Destination + 3;

         EALLOW;
         for(VectoIndex = 0; VectoIndex < 221; VectoIndex++)
         {
             *Destination++ = *Source++;
         }
         EDIS;
#endif


__interrupt void vDInt_iUnknownInterrupt_Isr(void)
{
    asm("    ESTOP0");
}

In the Interrupt driver I used this code:

typedef __interrupt void (* TpfnDCore_eHandler)(void);
...


TpfnDCore_eHandler  tpfnDInt_iISRVectorTable[UserInt_NbOfIRQSources]={NULL};


....

/* Store interruption handler in vector table to be used by
 * interruption routine */
tpfnDInt_iISRVectorTable[FstIsrConfiguration->u16Identifier] = FstIsrConfiguration->FpfHandlerFunc;

temp = ((Uint32)((FstIsrConfiguration->u16Identifier)) - 1);
Destination = Destination + temp;

/* Install the vector value to the table vector */
EALLOW;
*Destination = tpfnDInt_iISRVectorTable[FstIsrConfiguration->u16Identifier];
EDIS;

....

the function adress that has to be called when the interrupt triggers is stored to a table:

TpfnDPit_eHandler CtpfDPit_iInterruptHandler[CeDPit_eNbOfInstances]

the definition of this function is like this:

__interrupt void vDPit_iPit0InterruptHandler_Isr(void)
{

    
    PieCtrlRegs.PIEACK.all = 0x0001;
}

__interrupt void vDPit_iPit0InterruptHandler_Isr(void)

the problem is, the vDPit_iPit0InterruptHandler_Isr is never called even if the PieVectTable Timer0 vector has its adress.

In the pie, I could see the interrupt triggers and the timer running.

Thank you .