Datasheet

Table Of Contents
41 }
2.19.5.2. Enable a GPIO interrupt
The SDK provides a method of being interrupted when a GPIO pin changes state:
SDK: https://github.com/raspberrypi/pico-sdk/tree/master/src/rp2_common/hardware_gpio/gpio.c Lines 171 - 177
171 void gpio_set_irq_enabled(uint gpio, uint32_t events, bool enabled) {
172 // Separate mask/force/status per-core, so check which core called, and
173 // set the relevant IRQ controls.
174 io_irq_ctrl_hw_t *irq_ctrl_base = get_core_num() ?
175 &iobank0_hw->proc1_irq_ctrl : &iobank0_hw-
Ê >proc0_irq_ctrl;
176 _gpio_set_irq_enabled(gpio, events, enabled, irq_ctrl_base);
177 }
gpio_set_irq_enabled uses a lower level function _gpio_set_irq_enabled:
SDK: https://github.com/raspberrypi/pico-sdk/tree/master/src/rp2_common/hardware_gpio/gpio.c Lines 158 - 169
158 static void _gpio_set_irq_enabled(uint gpio, uint32_t events, bool enabled,
Ê io_irq_ctrl_hw_t *irq_ctrl_base) {
159 // Clear stale events which might cause immediate spurious handler entry
160 gpio_acknowledge_irq(gpio, events);
161
162 io_rw_32 *en_reg = &irq_ctrl_base->inte[gpio / 8];
163 events <<= 4 * (gpio % 8);
164
165 if (enabled)
166 hw_set_bits(en_reg, events);
167 else
168 hw_clear_bits(en_reg, events);
169 }
The user provides a pointer to a callback function that is called when the GPIO event happens. An example application
that uses this system is hello_gpio_irq:
Pico Examples: https://github.com/raspberrypi/pico-examples/tree/master/gpio/hello_gpio_irq/hello_gpio_irq.c Lines 1 - 61
Ê1 /**
Ê2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
Ê3 *
Ê4 * SPDX-License-Identifier: BSD-3-Clause
Ê5 */
Ê6
Ê7 #include <stdio.h>
Ê8 #include "pico/stdlib.h"
Ê9 #include "hardware/gpio.h"
10
11 static char event_str[128];
12
13 void gpio_event_string(char *buf, uint32_t events);
14
15 void gpio_callback(uint gpio, uint32_t events) {
16 // Put the GPIO event(s) that just happened into event_str
17 // so we can print it
RP2040 Datasheet
2.19. GPIO 263