I cross checked my code. It doesn't work Volker. And I am still unable to get what wrong is happening. Here below is my code. Made a small change to get the interrupt generated at port 0 pin 17 (SW1). Still it doesn't work. Any help ?
#include <cr_section_macros.h>
#include "chip.h"
extern void delay(int count);
extern void WriteIntWithInterrupt(const int inInt);
extern void WriteCharWithInterrupt(char inChar);
extern void WriteStringWithInterrupt(const char *pStr);
/* GPIO pin for PININT interrupt. This is SW1-WAKE button switch input. */
#define TEST_INPUT_PIN 17 /* GPIO pin number mapped to PININT */
#define TEST_INPUT_PORT 0 /* GPIO port number mapped to PININT */
#define TEST_INPUT_PIN_PORT 0
#define TEST_INPUT_PIN_BIT 17
#define PININT_INDEX 0 /* PININT index used for GPIO mapping */
#define PININT_IRQ_HANDLER PIN_INT0_IRQHandler /* GPIO interrupt IRQ function name */
#define PININT_NVIC_NAME PIN_INT0_IRQn /* GPIO interrupt NVIC interrupt name */
/**
* @brief Handle interrupt from GPIO pin or GPIO pin mapped to PININT
* @return Nothing
*/
void PININT_IRQ_HANDLER(void)
{
//Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, PININTCH(PININT_INDEX));
Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, 0);
WriteStringWithInterrupt("Inside SW1 GPIO Interrupt Handler\n");
}
int main(void)
{
SystemCoreClockUpdate();
/* Initialize GPIO */
Chip_GPIO_Init(LPC_GPIO);
/* Initialize PININT driver */
Chip_PININT_Init(LPC_GPIO_PIN_INT);
/* Set pin back to GPIO (on some boards may have been changed to something
else by Board_Init()) */
Chip_IOCON_PinMuxSet(LPC_IOCON, TEST_INPUT_PIN_PORT, TEST_INPUT_PIN_BIT,
(IOCON_DIGMODE_EN | IOCON_MODE_INACT) );
/* Configure GPIO pin as input */
Chip_GPIO_SetPinDIRInput(LPC_GPIO, TEST_INPUT_PORT, TEST_INPUT_PIN);
/* Configure interrupt channel for the GPIO pin in INMUX block */
Chip_INMUX_PinIntSel(PININT_INDEX, TEST_INPUT_PORT, TEST_INPUT_PIN);
/* Configure channel interrupt as edge sensitive and falling edge interrupt */
Chip_PININT_ClearIntStatus(LPC_GPIO_PIN_INT, /*PININTCH(PININT_INDEX)*/0);
Chip_PININT_SetPinModeEdge(LPC_GPIO_PIN_INT, /*PININTCH(PININT_INDEX)*/0);
Chip_PININT_EnableIntLow(LPC_GPIO_PIN_INT, /*PININTCH(PININT_INDEX)*/0);
/* Enable interrupt in the NVIC */
NVIC_ClearPendingIRQ(PININT_NVIC_NAME);
NVIC_EnableIRQ(PININT_NVIC_NAME);
/* Spin in a loop here. All the work is done in ISR. */
while (1) {}
return 0;
}
Even if I set the interrupt priority NVIC_SetPriority(PIN_INT0_IRQn, int_prio); it don't get an interrupt on press-releasing SW1 button.