Interrupt Zephyr

Hello,

I want to implement the interrupt functionality and based on my understanding I can implement it using GPIO or ISR function.

In case of GPIO (APIs  here):

int gpio_pin_configure(const struct device *port, gpio_pin_t pin, gpio_flags_t flags)
int gpio_pin_interrupt_configure(const struct device *port, gpio_pin_t pin, gpio_flags_t flags)
static inline void gpio_init_callback(struct gpio_callback *callback, gpio_callback_handler_t handler, gpio_port_pins_t pin_mask)¶
static inline int gpio_add_callback(const struct device *port, struct gpio_callback *callback)¶

 

For ISR function (APIs here)

#define MY_DEV_IRQ  24       /* device uses IRQ 24 */
#define MY_DEV_PRIO  2       /* device uses interrupt priority 2 */
/* argument passed to my_isr(), in this case a pointer to the device */
#define MY_ISR_ARG  DEVICE_GET(my_device)
#define MY_IRQ_FLAGS 0       /* IRQ flags */

void my_isr(void *arg)
{
   ... /* ISR code */
}

void my_isr_installer(void)
{
   ...
   IRQ_CONNECT(MY_DEV_IRQ, MY_DEV_PRIO, my_isr, MY_ISR_ARG, MY_IRQ_FLAGS);
   irq_enable(MY_DEV_IRQ);
   ...
}

Then, based which features can I use GPIO instead ISR functions?

Thank in advance.

Parents Reply Children
Related