Hi all,
I am trying to use an interrupt callback handler but I can't get it to work. I got the interrupt initialized but whenever the callback is triggered, the system crashes.
This is my code:
#include <zephyr.h>
#include <stdio.h>
#include <drivers/gpio.h>
int32_t counter = 0;
void gpio_callback_handler(const struct device *dev, struct gpio_callback *cb, uint32_t pins) {
counter = 0;
}
void init_gpio(const struct device *gpio_dev) {
struct gpio_callback gpio_cb;
gpio_pin_configure(gpio_dev, 21, GPIO_INPUT);
gpio_init_callback(&gpio_cb, gpio_callback_handler, BIT(21));
gpio_add_callback(gpio_dev, &gpio_cb);
gpio_pin_interrupt_configure(gpio_dev, 21, GPIO_INT_EDGE_FALLING);
}
int main(void) {
const struct device *dev;
uint32_t val;
dev = device_get_binding("GPIO_0");
init_gpio(dev);
while(true) {
val = gpio_pin_get(dev, 21);
printf("Current value: %i | %i\n", val, counter);
counter++;
k_sleep(K_SECONDS(1));
}
return 0;
}
Instead of resetting the counter, it just reboots. And I can't understand why this is happening. From my understanding, this should work..
I already tried changing "counter = 0" inside the callback handler to one printf but this also crashes.
Can anybody explain to me why this is not working?
Thanks in advance!