LPC1517, Pin interrupt

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

LPC1517, Pin interrupt

Jump to solution
707 Views
martin_pelletie
Contributor II

Hi,

i want an external interrupt on PIO0_28.

Here is my configuration:

LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 11); //enable clock for MUX
LPC_INMUX->PINTSEL[3] = 0x10; //Pin interrupt select register (PI0_28)
LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 18); //enable clock for PINT
LPC_SYSCON->STARTERP0 |= (1UL << 10); //enable PINT3 (GPIO pin interrupt 3 wake-up)
LPC_PINT->ISEL = 0x08; //edge sensitive
LPC_PINT->IENR = 0x08; //enable interrupt PINTSEL3
LPC_PINT->SIENR = 0x08; //set interrupt 
 LPC_PINT->IST = 0x08; //clear flag rising or falling edge
NVIC_EnableIRQ(PIN_INT3_IRQn);

And on my interrupt file, i have

void PIN_INT3_IRQHandler()
{
LPC_PINT->IST = 0x08; //clear flag rising or falling edge
powerDown ^= 1;
GPIO_SetPin ( OUT_DIG2, powerDown ); 
}

My OUT_DIG2 output pin dont toggle!!! Mean no interrupt when i change the input level on PIO0,28

Do i miss something???

Thx for your helps :smileyhappy:

Labels (1)
1 Solution
539 Views
martin_pelletie
Contributor II

Finally i found my problem :smileyhappy: -> PDAWAKECFG register need to be well configured!!!

Here is my code if i can help some one !!!

I got an interrupt each time i make an edge on PIO0.28

And if my system is in deep sleep, it will wake up after this interrupt!!!

int main(void)

{

...

//initialisation PINT0

//clear flag 23may19
LPC_PMU->PCON |= (1UL << 8); //clear sleep flag
LPC_PMU->PCON |= (1UL << 11); //clear dpd flag

LPC_SYSCON->PDAWAKECFG &= ~(1UL << 21);     //active Sys_OSC after Deep sleep or Power down
LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 11); //enable PINT
LPC_INMUX->PINTSEL[0] = 0x1C; //Pin interrupt select register for PIO0_28
LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 18); //enable clock for PINT
LPC_SYSCON->STARTERP0 |= (1UL << 7); //enable PINT0 (GPIO pin interrupt 0 wake-up)
LPC_PINT->ISEL = 0x00; //edge sensitive or 0x01; //level sensitive
LPC_PINT->IENR = 0x01; //enable interrupt PINTSEL0 pio0_28
LPC_PINT->SIENR = 0x01; //set interrupt
LPC_PINT->IENF = 0x01;
LPC_PINT->SIENF = 0x01;

NVIC_EnableIRQ(PIN_INT0_IRQn);

...

if (delayWakeup >= 25)
{
   delayWakeup = 0;
   (*romAPI)->pPWRD->power_mode_configure(1, 0); //DEEP SLEEP mode
   __WFI();

}

}

In my interrupt.c file :

//i toggle an output each time i got an Pin interrupt on PIO0.28

void PIN_INT0_IRQHandler()
{
  LPC_PINT->IST = 0x01; //clear flag rising or falling edge
  powerDown ^= 1;
  GPIO_SetPin ( OUT_DIG2, powerDown ); 
}

View solution in original post

1 Reply
540 Views
martin_pelletie
Contributor II

Finally i found my problem :smileyhappy: -> PDAWAKECFG register need to be well configured!!!

Here is my code if i can help some one !!!

I got an interrupt each time i make an edge on PIO0.28

And if my system is in deep sleep, it will wake up after this interrupt!!!

int main(void)

{

...

//initialisation PINT0

//clear flag 23may19
LPC_PMU->PCON |= (1UL << 8); //clear sleep flag
LPC_PMU->PCON |= (1UL << 11); //clear dpd flag

LPC_SYSCON->PDAWAKECFG &= ~(1UL << 21);     //active Sys_OSC after Deep sleep or Power down
LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 11); //enable PINT
LPC_INMUX->PINTSEL[0] = 0x1C; //Pin interrupt select register for PIO0_28
LPC_SYSCON->SYSAHBCLKCTRL0 |= (1UL << 18); //enable clock for PINT
LPC_SYSCON->STARTERP0 |= (1UL << 7); //enable PINT0 (GPIO pin interrupt 0 wake-up)
LPC_PINT->ISEL = 0x00; //edge sensitive or 0x01; //level sensitive
LPC_PINT->IENR = 0x01; //enable interrupt PINTSEL0 pio0_28
LPC_PINT->SIENR = 0x01; //set interrupt
LPC_PINT->IENF = 0x01;
LPC_PINT->SIENF = 0x01;

NVIC_EnableIRQ(PIN_INT0_IRQn);

...

if (delayWakeup >= 25)
{
   delayWakeup = 0;
   (*romAPI)->pPWRD->power_mode_configure(1, 0); //DEEP SLEEP mode
   __WFI();

}

}

In my interrupt.c file :

//i toggle an output each time i got an Pin interrupt on PIO0.28

void PIN_INT0_IRQHandler()
{
  LPC_PINT->IST = 0x01; //clear flag rising or falling edge
  powerDown ^= 1;
  GPIO_SetPin ( OUT_DIG2, powerDown ); 
}