Datasheet

Table Of Contents
119 _gpio_set_irq_enabled(gpio, events, enable, irq_ctrl_base);
120 }
gpio_set_irq_enabled uses a lower level function _gpio_set_irq_enabled:
Pico SDK: https://github.com/raspberrypi/pico-sdk/tree/pre_release/src/rp2_common/hardware_gpio/gpio.c Lines 101 - 112
101 void _gpio_set_irq_enabled(uint gpio, uint32_t events, bool enable, io_irq_ctrl_hw_t
Ê *irq_ctrl_base) {
102 // Clear stale events which might cause immediate spurious handler entry
103 gpio_acknowledge_irq(gpio, events);
104
105 io_rw_32 *en_reg = &irq_ctrl_base->inte[gpio / 8];
106 events <<= 4 * (gpio % 8);
107
108 if (enable)
109 hw_set_bits(en_reg, events);
110 else
111 hw_clear_bits(en_reg, events);
112 }
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/pre_release/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
18 gpio_event_string(event_str, events);
19 printf("GPIO %d %s\n", gpio, event_str);
20 }
21
22 int main() {
23 setup_default_uart();
24
25 printf("Hello GPIO IRQ\n");
26 gpio_set_irq_enabled_with_callback(2, GPIO_IRQ_EDGE_RISE | GPIO_IRQ_EDGE_FALL, true,
Ê &gpio_callback);
27
28 // Wait forever
29 while (1);
30
31 return 0;
32 }
33
RP2040 Datasheet
2.18. GPIO 214