Skip to content

Commit 1b014d0

Browse files
Parameters in GPIO interrupts
1 parent ecca541 commit 1b014d0

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

hardware/include/gpio.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ uint8_t gpio_get(pin_t pin);
7979
/*
8080
Use a callback on events from a GPIO pin
8181
*/
82-
void gpio_irq_init(pin_t pin, void (*cb)(), irq_trigger_t tt);
82+
void gpio_irq_init(pin_t pin, void (*cb)(), void *parameter, irq_trigger_t tt);
8383

8484
/*
8585
Disables a callback

hardware/src/stm32f4xx/gpio.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,12 @@ uint8_t gpio_irq_channels[] = {
9494
EXTI15_10_IRQn };
9595

9696
#define IRQ_EXTI_MAX 16
97-
static void (*exti_irq_callback[IRQ_EXTI_MAX])();
97+
static void (*exti_irq_callback[IRQ_EXTI_MAX])(void *);
98+
static void *exti_irq_parameter[IRQ_EXTI_MAX];
9899

99100
static void call_exti_callback(int index) {
100101
if (exti_irq_callback[index]) {
101-
exti_irq_callback[index]();
102+
exti_irq_callback[index](exti_irq_parameter[index]);
102103
}
103104
}
104105

@@ -193,7 +194,7 @@ void EXTI15_10_IRQHandler() {
193194
}
194195
}
195196

196-
void gpio_irq_init(pin_t pin, void (*cb)(), irq_trigger_t tt)
197+
void gpio_irq_init(pin_t pin, void (*cb)(), void *parameter, irq_trigger_t tt)
197198
{
198199
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
199200

@@ -227,6 +228,7 @@ void gpio_irq_init(pin_t pin, void (*cb)(), irq_trigger_t tt)
227228
EXTI_ClearITPendingBit(1 << pin.pin);
228229

229230
exti_irq_callback[pin.pin] = cb;
231+
exti_irq_parameter[pin.pin] = parameter;
230232
}
231233

232234
void gpio_irq_deinit(pin_t pin)

0 commit comments

Comments
 (0)