Problem with interrupts in MPC5643L (Leopard)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Problem with interrupts in MPC5643L (Leopard)

Jump to solution
1,561 Views
fraqui
Contributor I

Hi everyone:

 

I'm a newbie with Leopard and I'm trying to generate an interrupt with a falling edge of an external signal. This is the code I have:

 

void initINTC(void){ INTC.BCR.B.HVEN_PRC0=0; //0:SW vector mode, 1: HW vector mode (processor 0) INTC.CPR.B.PRI=0;// Lower INTC's current priority}void initPin(void){ SIU.PCR[0].R=0x0100; //configured as input SIU.IFEER.B.IFEE0=1; //Interrupt Falling-Edge Enable for this pin SIU.IRER.B.EIRE0=1; //Interrupt Request Enable }void INTERRUPT_FALLING_EDGE_0(void){ sendRS232Data(0xFF00FF00); SIU.ISR.B.EIF0=1;}int main(void) {  volatile int i = 0;    initModesAndClks();      /* Initialize mode entries */  initPeriClkGen();        /* Initialize peripheral clock generation for LINFlex */  disableWatchdog();       /* Disable watchdog */  initLINFlex_0();         /* Initialize serial port */  initINTC();              /* Initialize Interrupt Controller */  initPin();               /* Initialize interrupt pin */  INTC_InstallINTCInterruptHandler(INTERRUPT_FALLING_EDGE_0,0,1);  /* Loop forever */  for (;;) {    i++;     }}

 

The interrupt is correctly generated because the interrupt flag in the ISR register is set when the falling edge occurs, but the problem is that the interrupt service routine is never executed.

I've used the  INTC_InstallINTCInterruptHandler instruction to activate the routine, but I don't know what else I need to do.

Somebody could help me?

Thanks and regards.

  

0 Kudos
1 Solution
648 Views
Tatay
Contributor II

Hi!

 

my problem is solved! i use CW 2.7, the problem went from a wrong initialization of IVOR table. it is a bug in CW 2.7 for MPC5643L.

View solution in original post

0 Kudos
4 Replies
648 Views
almarto
Contributor IV

Hi fraqui and Tatay,

If you could post or send me the complete project I would try to debug it and see what happens. Which CW version and which HW board are you using?

Best regards!

0 Kudos
649 Views
Tatay
Contributor II

Hi!

 

my problem is solved! i use CW 2.7, the problem went from a wrong initialization of IVOR table. it is a bug in CW 2.7 for MPC5643L.

0 Kudos
648 Views
Tatay
Contributor II

Hi everybody,

 

I have the same problem like fraqui!

I try to generate interrupt from the PIT, channel 0. I use INTC_InstallINTCInterruptHandler(compteurISR,59,1); where compteurISR is my subroutine. The subroutine is never executed but why? I set the bit that enables interrupts from PIT, and when the counter has finished, the bit PIT.CH[0].TFLG.B.TIF is correctly set.

I also add the function enableIrq that sometimes causes a reset.

 

void enableIrq(void) {
 INTC.CPR_PRC0.B.PRI = 0;/* Lower INTC PRC0's current priority */
  asm(" wrteei 1");       /* and make sure external interrupts are enabled */  
}

 

void Setup_Timer()
{  
 PIT.PITMCR.R &=0xFFFFFFFC; //periph actif
    PIT.CH[0].LDVAL.B.TSV=0x005AF07F;//load value
    PIT.TCTRL0.B.TIE=1;//enable interrupt
}

 

int main(void) {
  volatile int i = 0;
  int debut=1;
   
  InitHW();

  Setup_Timer();
  INTC_InstallINTCInterruptHandler(compteurISR,59,1);
  enableIrq();
  PIT.TCTRL0.B.TEN=1;

  for (;:smileywink: {
    i++;

  }

}

 

void compteurISR(void)
{
      //INTC.SSCIR[4].R = 2;
     SIU.GPDO52.B.PDO=~SIU.GPDO52.B.PDO;
     PIT.CH[0].TFLG.B.TIF=1;

}

0 Kudos
648 Views
gernot
Contributor I

can you tell us which version of CW are you using?

 

 

0 Kudos