GPIO_Interrupts

Source code can be downloaded from source:/Examples/IPC_Blinking

Description
Demo example for testing GPIO interrupts.

Initialization
1     SystemInit();
2     CGU_Init();
Configure LEDs
 1     scu_pinmux(D3_SCU_PORT, D3_SCU_PIN, MD_PLN, FUNC4);
 2     scu_pinmux(D4_SCU_PORT, D4_SCU_PIN, MD_PLN, FUNC4);
 3     scu_pinmux(D5_SCU_PORT, D5_SCU_PIN, MD_PLN, FUNC4);
 4     scu_pinmux(D6_SCU_PORT, D6_SCU_PIN, MD_PLN, FUNC4);
 5     GPIO_SetDir(D3_GPIO_PORT, D3_GPIO_MASK, 1);
 6     GPIO_SetDir(D4_GPIO_PORT, D4_GPIO_MASK, 1);
 7     GPIO_SetDir(D5_GPIO_PORT, D5_GPIO_MASK, 1);
 8     GPIO_SetDir(D6_GPIO_PORT, D6_GPIO_MASK, 1);
 9     GPIO_ClearValue(D3_GPIO_PORT, D3_GPIO_MASK);
10     GPIO_ClearValue(D4_GPIO_PORT, D4_GPIO_MASK);
11     GPIO_ClearValue(D5_GPIO_PORT, D5_GPIO_MASK);
12     GPIO_ClearValue(D6_GPIO_PORT, D6_GPIO_MASK);
Configure buttons
1     scu_pinmux(S1_SCU_PORT, S1_SCU_PIN, MD_PUP | MD_EZI, FUNC4);
2     scu_pinmux(S2_SCU_PORT, S2_SCU_PIN, MD_PUP | MD_EZI, FUNC4);
3     scu_pinmux(S3_SCU_PORT, S3_SCU_PIN, MD_PUP | MD_EZI, FUNC4);
4     scu_pinmux(S4_SCU_PORT, S4_SCU_PIN, MD_PUP | MD_EZI, FUNC4);
5     GPIO_SetDir(S1_GPIO_PORT, S1_GPIO_MASK, 0);
6     GPIO_SetDir(S2_GPIO_PORT, S2_GPIO_MASK, 0);
7     GPIO_SetDir(S3_GPIO_PORT, S3_GPIO_MASK, 0);
8     GPIO_SetDir(S4_GPIO_PORT, S4_GPIO_MASK, 0);
Configure button S1 to generate GPIO0 interrupt on both edges
1     LPC_SCU->PINTSEL0 &= ~(0xFF << 0);
2     LPC_SCU->PINTSEL0 |= (S1_GPIO_PORT << 5) | (S1_GPIO_PIN << 0);
3     LPC_GPIO_PIN_INT->ISEL &= ~(1 << 0);    // edge sensitive
4     LPC_GPIO_PIN_INT->SIENR = (1 << 0);     // rising edge enable
5     LPC_GPIO_PIN_INT->SIENF = (1 << 0);     // falling edge enable
6     NVIC_EnableIRQ(PIN_INT0_IRQn);
Configure button S2 to generate GPIO group interrupt 0
1     LPC_GPIO_GROUP_INT0->CTRL = 0x01;   // clear interrupt, OR, edge
2     ((uint32_t *)&(LPC_GPIO_GROUP_INT0->PORT_POL0))[S2_GPIO_PORT] &= ~S2_GPIO_MASK; // falling edge
3     ((uint32_t *)&(LPC_GPIO_GROUP_INT0->PORT_ENA0))[S2_GPIO_PORT] |= S2_GPIO_MASK;  // enable interrupt
4     NVIC_EnableIRQ(GINT0_IRQn);
Configure buttons S3 and S4 to renerate interrupt when BOTH are pressed
1     LPC_GPIO_GROUP_INT1->CTRL = 0x07;   // clear interrupt, AND, level
2     ((uint32_t *)&(LPC_GPIO_GROUP_INT1->PORT_POL0))[S3_GPIO_PORT] &= ~S3_GPIO_MASK; // low level
3     ((uint32_t *)&(LPC_GPIO_GROUP_INT1->PORT_ENA0))[S3_GPIO_PORT] |= S3_GPIO_MASK;  // enable interrupt
4     ((uint32_t *)&(LPC_GPIO_GROUP_INT1->PORT_POL0))[S4_GPIO_PORT] &= ~S4_GPIO_MASK; // low level
5     ((uint32_t *)&(LPC_GPIO_GROUP_INT1->PORT_ENA0))[S4_GPIO_PORT] |= S4_GPIO_MASK;  // enable interrupt
6     NVIC_EnableIRQ(GINT1_IRQn);

Неопределенный