I am trying to configure interrupts for two push button (namely upbutton and dnbutton) on a custom board. In the main it is just looping and the module I have is as follows
/* Includes ------------------------------------------------------------------*/ #include <errno.h> #include <zephyr/kernel.h> #include <zephyr/logging/log.h> #include <zephyr/device.h> #include <zephyr/drivers/gpio.h> #include <zephyr/drivers/pinctrl.h> #include <hal/nrf_gpio.h> #include <zephyr/pm/pm.h> #include <zephyr/pm/policy.h> #include <nrfx.h> #include <hal/nrf_power.h> #include <zephyr/drivers/spi.h> /* Private includes ----------------------------------------------------------*/ #include "Push_Buttons.h" #include "IO_Toggle.h" /* Private macros ------------------------------------------------------------*/ LOG_MODULE_REGISTER(Push_Buttons,LOG_LEVEL_DBG); /* Private defines -----------------------------------------------------------*/ /* // trigger button #define TRIGBTN_NODE DT_PATH(io_controls, trigbtn) #define TRIGBTN DT_GPIO_CTLR(TRIGBTN_NODE, gpios) #define TRIGBTN_PIN DT_GPIO_PIN(TRIGBTN_NODE, gpios) #define TRIGBTN_FLAGS DT_GPIO_FLAGS(TRIGBTN_NODE, gpios)*/ // up button #define UPBTN_NODE DT_PATH(io_controls, upbtn) #define UPBTN DT_GPIO_CTLR(UPBTN_NODE, gpios) #define UPBTN_PIN DT_GPIO_PIN(UPBTN_NODE, gpios) #define UPBTN_FLAGS DT_GPIO_FLAGS(UPBTN_NODE, gpios) // down button #define DNBTN_NODE DT_PATH(io_controls, dnbtn) #define DNBTN DT_GPIO_CTLR(DNBTN_NODE, gpios) #define DNBTN_PIN DT_GPIO_PIN(DNBTN_NODE, gpios) #define DNBTN_FLAGS DT_GPIO_FLAGS(DNBTN_NODE, gpios) /* Private variables ---------------------------------------------------------*/ //const struct device *trig_btn; const struct device *up_btn; const struct device *dn_btn; /* Call back functions */ /* void triggerbutton_press(const struct device *dev, struct gpio_callback *cb, uint32_t pins) { IO_TOGGLE_init(); };*/ void upbutton_press(const struct device *dev, struct gpio_callback *cb, uint32_t pins) { IO_TOGGLE_init(); }; void dnbutton_press(const struct device *dev, struct gpio_callback *cb, uint32_t pins) { IO_TOGGLE_init(); }; /* Define a variable of type static struct gpio_callback */ //static struct gpio_callback triggerbutton_cb_data; static struct gpio_callback upbutton_cb_data; static struct gpio_callback dnbutton_cb_data; /* Functions Definition ------------------------------------------------------*/ int push_buttons_monitor(void){ LOG_DBG("push_buttons_monitor \r"); int ret = 0; /* ///////////// trigger trig_btn = DEVICE_DT_GET(TRIGBTN); if (!device_is_ready(trig_btn)) { return -ENODEV; } ret = gpio_pin_configure(trig_btn, TRIGBTN_PIN, GPIO_INPUT | GPIO_PULL_UP); if (ret < 0) { return ret; } // Configure the interrupt on the button to level high ret = gpio_pin_interrupt_configure(trig_btn,TRIGBTN_PIN, GPIO_INT_LEVEL_ACTIVE); // this triggers the interrupt when the push butto is actually pushed. if (ret<0){ // this flag on the other hand, GPIO_INT_LEVEL_HIGH will trigger the interrupt return -5; // when the state of the push button is HIGH. } // Initialize the gpio callback variable pin_cb_data using gpio_init_callback(). gpio_init_callback(&triggerbutton_cb_data, triggerbutton_press, BIT(TRIGBTN_PIN)); // The final step is to add the callback function through the function gpio_add_callback(trig_btn, &triggerbutton_cb_data);*/ /////////// UP up_btn = DEVICE_DT_GET(UPBTN); if (!device_is_ready(up_btn)) { return -ENODEV; } ret = gpio_pin_configure(up_btn, UPBTN_PIN, GPIO_INPUT | GPIO_PULL_UP); if (ret < 0) { return ret; } /////////// DOWN dn_btn = DEVICE_DT_GET(DNBTN); if (!device_is_ready(dn_btn)) { return -ENODEV; } ret = gpio_pin_configure(dn_btn, DNBTN_PIN, GPIO_INPUT | GPIO_PULL_UP); if (ret < 0) { return ret; } // Configure the interrupt on the button to level high ret = gpio_pin_interrupt_configure(up_btn,UPBTN_PIN, GPIO_INT_LEVEL_ACTIVE); // this triggers the interrupt when the push butto is actually pushed. if (ret<0){ // this flag on the other hand, GPIO_INT_LEVEL_HIGH will trigger the interrupt return -5; // when the state of the push button is HIGH. } // Configure the interrupt on the button to level high ret = gpio_pin_interrupt_configure(dn_btn,DNBTN_PIN, GPIO_INT_LEVEL_ACTIVE); // this triggers the interrupt when the push butto is actually pushed. if (ret<0){ // this flag on the other hand, GPIO_INT_LEVEL_HIGH will trigger the interrupt return -5; // when the state of the push button is HIGH. } // Initialize the gpio callback variable pin_cb_data using gpio_init_callback(). gpio_init_callback(&upbutton_cb_data, upbutton_press, BIT(UPBTN_PIN)); // Initialize the gpio callback variable pin_cb_data using gpio_init_callback(). gpio_init_callback(&dnbutton_cb_data, dnbutton_press, BIT(DNBTN_PIN)); // The final step is to add the callback function through the function gpio_add_callback(up_btn, &upbutton_cb_data); // The final step is to add the callback function through the function gpio_add_callback(dn_btn, &dnbutton_cb_data); return 1; }
As soon as I add the second push button interrupt non of them work. What could be the probelm?