Failed to Add GPIO Callback on AVR32UC Microcontroller

Hi everyone, I'm working on setting up an interrupt handler on my AVR32UC microcontroller, but I'm encountering an issue where the interrupt configuration fails. my setup:
#include <zephyr.h>
#include <device.h>
#include <drivers/gpio.h>

#define GPIO_PIN 15
#define GPIO_PORT "GPIO_0"

void gpio_callback(const struct device *dev, struct gpio_callback *cb, uint32_t pins) {
printk("Interrupt triggered!\n");
}

void main(void) {
const struct device *dev = device_get_binding(GPIO_PORT);
gpio_pin_interrupt_configure(dev, GPIO_PIN, GPIO_INT_EDGE_TO_ACTIVE);
gpio_init_callback(&my_cb, gpio_callback, BIT(GPIO_PIN));
gpio_add_callback(dev, &my_cb);
}
#include <zephyr.h>
#include <device.h>
#include <drivers/gpio.h>

#define GPIO_PIN 15
#define GPIO_PORT "GPIO_0"

void gpio_callback(const struct device *dev, struct gpio_callback *cb, uint32_t pins) {
printk("Interrupt triggered!\n");
}

void main(void) {
const struct device *dev = device_get_binding(GPIO_PORT);
gpio_pin_interrupt_configure(dev, GPIO_PIN, GPIO_INT_EDGE_TO_ACTIVE);
gpio_init_callback(&my_cb, gpio_callback, BIT(GPIO_PIN));
gpio_add_callback(dev, &my_cb);
}
The error I'm encountering:
error: Failed to add GPIO callback
error: Failed to add GPIO callback
I've confirmed that interrupt support is enabled in the prj.conf file. Does anyone have suggestions on how to fix this?
Solution:
hey @Sterling I had fixed the issue, I made sure to define and initialize the struct gpio_callback my_cb before using it in gpio_init_callback. I also added some error handling for functions like device_get_binding, gpio_pin_interrupt_configure, and gpio_add_callback. These adjustments helped to correctly set up the GPIO interrupt, so now the callback function triggers as expected when the GPIO pin detects an edge. thanks buddy
Jump to solution
3 Replies
Sterling
Sterling•3mo ago
Hi @Dtynin , have u ensured sure that the struct gpio_callback my_cb; is defined and initialized before using it in gpio_init_callback ? Check it out, if not then implement it and give me a feedback 😊
Dtynin
Dtynin•3mo ago
Thanks for pointing that out @Sterling I completely missed defining and initializing struct gpio_callback my_cb. I'll go ahead and implement that now and see if it resolves the issue. I'll let you know how it goes.
Solution
Dtynin
Dtynin•3mo ago
hey @Sterling I had fixed the issue, I made sure to define and initialize the struct gpio_callback my_cb before using it in gpio_init_callback. I also added some error handling for functions like device_get_binding, gpio_pin_interrupt_configure, and gpio_add_callback. These adjustments helped to correctly set up the GPIO interrupt, so now the callback function triggers as expected when the GPIO pin detects an edge. thanks buddy
Want results from more Discord servers?
Add your server