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:
Solved! Go to Solution.
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 );
}
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 );
}