diff --git a/Examples/MAX32690/GPIO/main.c b/Examples/MAX32690/GPIO/main.c index f17a48d90ab..70683ec1a1f 100644 --- a/Examples/MAX32690/GPIO/main.c +++ b/Examples/MAX32690/GPIO/main.c @@ -66,16 +66,19 @@ /***** Globals *****/ /***** Functions *****/ -void gpio_isr(void *cbdata) -{ - MXC_Delay(MXC_DELAY_MSEC(100)); - uint32_t flags = MXC_GPIO_GetFlags(MXC_GPIO_PORT_IN); - MXC_GPIO_ClearFlags(MXC_GPIO_PORT_IN, flags); +void gpio_callback(void *cbdata) +{ mxc_gpio_cfg_t *cfg = cbdata; MXC_GPIO_OutToggle(cfg->port, cfg->mask); } +void gpio_isr(void) +{ + MXC_Delay(MXC_DELAY_MSEC(100)); // Debounce + MXC_GPIO_Handler(MXC_GPIO_GET_IDX(MXC_GPIO_PORT_IN)); +} + int main(void) { mxc_gpio_cfg_t gpio_out; @@ -111,10 +114,11 @@ int main(void) gpio_interrupt.func = MXC_GPIO_FUNC_IN; gpio_interrupt.vssel = MXC_GPIO_VSSEL_VDDIOH; MXC_GPIO_Config(&gpio_interrupt); - MXC_GPIO_RegisterCallback(&gpio_interrupt, gpio_isr, &gpio_interrupt_status); + MXC_GPIO_RegisterCallback(&gpio_interrupt, gpio_callback, &gpio_interrupt_status); MXC_GPIO_IntConfig(&gpio_interrupt, MXC_GPIO_INT_FALLING); MXC_GPIO_EnableInt(gpio_interrupt.port, gpio_interrupt.mask); NVIC_EnableIRQ(MXC_GPIO_GET_IRQ(MXC_GPIO_GET_IDX(MXC_GPIO_PORT_IN))); + MXC_NVIC_SetVector(MXC_GPIO_GET_IRQ(MXC_GPIO_GET_IDX(MXC_GPIO_PORT_IN)), gpio_isr); /* Setup output pin. */ gpio_out.port = MXC_GPIO_PORT_OUT; diff --git a/Libraries/Boards/MAX32690/EvKit_V1/Source/board.c b/Libraries/Boards/MAX32690/EvKit_V1/Source/board.c index 5579267f42d..af3f40c77a0 100644 --- a/Libraries/Boards/MAX32690/EvKit_V1/Source/board.c +++ b/Libraries/Boards/MAX32690/EvKit_V1/Source/board.c @@ -101,6 +101,12 @@ __weak void GPIOWAKE_IRQHandler(void) MXC_GPIO_Handler(MXC_GPIO_GET_IDX(MXC_GPIO4)); } +// Default handler for generic GPIO interrupts on port 2 (used by GPIO example) +__weak void GPIO2_IRQHandler(void) +{ + MXC_GPIO_Handler(MXC_GPIO_GET_IDX(MXC_GPIO2)); +} + /******************************************************************************/ int Board_Init(void) {