From 17753b514ddde3e5abfa729188ae6aa59b2f2a32 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 7 Jun 2021 12:32:46 +0200 Subject: [PATCH] Restore original pull after attachInterrupt Fixes https://github.com/arduino/ArduinoCore-mbed/issues/253 --- cores/arduino/Interrupts.cpp | 7 +++++++ cores/arduino/wiring_digital.cpp | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/cores/arduino/Interrupts.cpp b/cores/arduino/Interrupts.cpp index a3b6e1e11..601d11454 100644 --- a/cores/arduino/Interrupts.cpp +++ b/cores/arduino/Interrupts.cpp @@ -53,6 +53,8 @@ void attachInterrupt(PinName interruptNum, voidFuncPtr func, PinStatus mode) { attachInterruptParam(interruptNum, (voidFuncPtrParam)func, mode, NULL); } +uint8_t _pinMode[NUM_DIGITAL_PINS]; + void attachInterruptParam(pin_size_t interruptNum, voidFuncPtrParam func, PinStatus mode, void* param) { if (interruptNum >= PINS_COUNT) { return; @@ -77,6 +79,11 @@ void attachInterruptParam(pin_size_t interruptNum, voidFuncPtrParam func, PinSta } else { pinMode(interruptNum, INPUT); } + } else { + // Restore the original pull + if (_pinMode[interruptNum] != OUTPUT) { + pinMode(interruptNum, _pinMode[interruptNum]); + } } } diff --git a/cores/arduino/wiring_digital.cpp b/cores/arduino/wiring_digital.cpp index e62480d42..22850fce2 100644 --- a/cores/arduino/wiring_digital.cpp +++ b/cores/arduino/wiring_digital.cpp @@ -49,6 +49,8 @@ void pinMode(PinName pin, PinMode mode) } } +extern uint8_t _pinMode[]; + void pinMode(pin_size_t pin, PinMode mode) { mbed::DigitalInOut* gpio = digitalPinToGpio(pin); @@ -57,6 +59,8 @@ void pinMode(pin_size_t pin, PinMode mode) digitalPinToGpio(pin) = gpio; } + _pinMode[pin] = mode; + switch (mode) { case INPUT: gpio->input();