From 70068985a7dc8f9beb0091f2a53b2fbdf359523c Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Tue, 15 May 2018 17:04:30 -0400 Subject: stepper: Introduce and use gpio_out_toggle_noirq() The gpio_out_toggle() function in the sam3x8e and stm32f1 code was only valid if it was called with irqs disabled. Commits 018c5daa and 9c52ad43 enabled the lcd code which called gpio_out_toggle() with irqs enabled. This could cause corruption of the gpio state. Introduce a gpio_out_toggle_noirq() function that will only be invoked with irqs disabled, and fix gpio_out_toggle() on sam3x8e and stm32f1 so that it safe to call even if irqs are enabled. Signed-off-by: Kevin O'Connor --- src/stm32f1/gpio.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/stm32f1/gpio.c') diff --git a/src/stm32f1/gpio.c b/src/stm32f1/gpio.c index 74bb72af..f988700a 100644 --- a/src/stm32f1/gpio.c +++ b/src/stm32f1/gpio.c @@ -72,11 +72,19 @@ fail: } void -gpio_out_toggle(struct gpio_out g) +gpio_out_toggle_noirq(struct gpio_out g) { LL_GPIO_TogglePin(g.regs, g.bit); } +void +gpio_out_toggle(struct gpio_out g) +{ + irqstatus_t flag = irq_save(); + gpio_out_toggle_noirq(g); + irq_restore(flag); +} + void gpio_out_write(struct gpio_out g, uint8_t val) { -- cgit v1.2.3-70-g09d2