From 4a4eed295cde4412a10aae4cfc56955b86c58984 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 16 Oct 2016 16:07:24 +0200 Subject: [PATCH] Fix INPUT_PULLUP option for hwPinMode() --- drivers/AVR/DigitalWriteFast/digitalWriteFast.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/AVR/DigitalWriteFast/digitalWriteFast.h b/drivers/AVR/DigitalWriteFast/digitalWriteFast.h index a768347..555d903 100644 --- a/drivers/AVR/DigitalWriteFast/digitalWriteFast.h +++ b/drivers/AVR/DigitalWriteFast/digitalWriteFast.h @@ -81,11 +81,14 @@ #endif #if defined(ARDUINO_ARCH_AVR) + #if !defined(__atomicWrite) + #define __atomicWrite(A,P,V) do { if ((A) < 0x40) {bitWrite((A), (P), (V) );} else {uint8_t register saveSreg = SREG;cli();bitWrite((A), (P), (V));SREG = saveSreg;}} while(0) + #endif #if !defined(digitalWriteFast) #define digitalWriteFast(__pin, __value) do { if (__builtin_constant_p(__pin) && __builtin_constant_p(__value)) { bitWrite(*__digitalPinToPortReg(__pin), __digitalPinToBit(__pin), (__value)); } else { digitalWrite((__pin), (__value)); } } while (0) #endif #if !defined(pinModeFast) - #define pinModeFast(__pin, __value) do { if (__builtin_constant_p(__pin) && __builtin_constant_p(__value)) { bitWrite(*__digitalPinToDDRReg(__pin), __digitalPinToBit(__pin), (__value)); } else { pinMode((__pin), (__value)); } } while (0) + #define pinModeFast(__pin, __mode) do { if (__builtin_constant_p(__pin) && __builtin_constant_p(__mode) && (__mode!=INPUT_PULLUP)) { bitWrite(*__digitalPinToDDRReg(__pin), __digitalPinToBit(__pin), (__mode)); } else { pinMode((__pin), (__mode)); } } while (0) #endif #if !defined(digitalReadFast) #define digitalReadFast(__pin) ( (bool) (__builtin_constant_p(__pin) ) ? (( bitRead(*__digitalPinToPINReg(__pin), __digitalPinToBit(__pin))) ) : digitalRead((__pin)) )