diff --git a/src/host/hardware_gpio/gpio.c b/src/host/hardware_gpio/gpio.c index b0daa1c..1cbcbed 100644 --- a/src/host/hardware_gpio/gpio.c +++ b/src/host/hardware_gpio/gpio.c @@ -27,6 +27,10 @@ void gpio_set_pulls(uint gpio, bool up, bool down) { } +void gpio_set_irqover(uint gpio, uint value) { + +} + void gpio_set_outover(uint gpio, uint value) { } diff --git a/src/host/hardware_gpio/include/hardware/gpio.h b/src/host/hardware_gpio/include/hardware/gpio.h index a39c97a..223c472 100644 --- a/src/host/hardware_gpio/include/hardware/gpio.h +++ b/src/host/hardware_gpio/include/hardware/gpio.h @@ -61,6 +61,8 @@ void gpio_disable_pulls(uint gpio); void gpio_set_pulls(uint gpio, bool up, bool down); +void gpio_set_irqover(uint gpio, uint value); + void gpio_set_outover(uint gpio, uint value); void gpio_set_inover(uint gpio, uint value); diff --git a/src/rp2_common/hardware_gpio/gpio.c b/src/rp2_common/hardware_gpio/gpio.c index d660915..10b1502 100644 --- a/src/rp2_common/hardware_gpio/gpio.c +++ b/src/rp2_common/hardware_gpio/gpio.c @@ -57,6 +57,15 @@ void gpio_set_pulls(uint gpio, bool up, bool down) { ); } +// Direct override for per-GPIO IRQ signal +void gpio_set_irqover(uint gpio, uint value) { + invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS); + hw_write_masked(&iobank0_hw->io[gpio].ctrl, + value << IO_BANK0_GPIO0_CTRL_IRQOVER_LSB, + IO_BANK0_GPIO0_CTRL_IRQOVER_BITS + ); +} + // Direct overrides for pad controls void gpio_set_inover(uint gpio, uint value) { invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS); diff --git a/src/rp2_common/hardware_gpio/include/hardware/gpio.h b/src/rp2_common/hardware_gpio/include/hardware/gpio.h index 74a00a2..e90be27 100644 --- a/src/rp2_common/hardware_gpio/include/hardware/gpio.h +++ b/src/rp2_common/hardware_gpio/include/hardware/gpio.h @@ -239,6 +239,16 @@ static inline void gpio_disable_pulls(uint gpio) { gpio_set_pulls(gpio, false, false); } +/*! \brief Set GPIO IRQ override + * \ingroup hardware_gpio + * + * Optionally invert a GPIO IRQ signal, or drive it high or low + * + * \param gpio GPIO number + * \param value See \ref gpio_override + */ +void gpio_set_irqover(uint gpio, uint value); + /*! \brief Set GPIO output override * \ingroup hardware_gpio *