I am registering interrupts for many pins:
static struct gpio_callback pin_cb_data; void pin_toggled(const struct device *dev, struct gpio_callback *cb, uint32_t pins) { printk("Pin toggled"); } const struct device * gpio_dev = DEVICE_DT_GET(DT_NODELABEL(gpio0)); for (int pin = 11 ; pin <= 21 ; pin++) { printk("%u ", gpio_pin_interrupt_configure(gpio_dev, pin, GPIO_INT_EDGE_BOTH)); } gpio_init_callback(&pin_cb_data, pin_toggled, 0xFFFFFFFF); gpio_add_callback(gpio_dev, &pin_cb_data);
This only works for the first 8 pins, because from what I understand the GPIOTE peripheral is used and that has only 8 channels.
As a solution I found that I should use sense-edge-mask in my device tree:
&gpio0 { status = "okay"; sense-edge-mask = < 0xffffffff >; };
However, with this setting, the interrupts don't work at all.
Do I need to change my code as well in addition to the device tree setting?