From 8fcf5c94067a052c2c7ead3c2ebcd1381ed37888 Mon Sep 17 00:00:00 2001 From: Victor Aprea Date: Sun, 15 Feb 2015 17:56:48 -0500 Subject: Do not influence state of SS if it's already been set to an output previously, e.g. by user sketch squashes and closes PR #2659 --- libraries/SPI/SPI.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index 9e7a116..af14e07 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -29,7 +29,15 @@ void SPIClass::begin() noInterrupts(); // Protect from a scheduler and prevent transactionBegin if (!initialized) { // Set SS to high so a connected chip will be "deselected" by default - digitalWrite(SS, HIGH); + uint8_t port = digitalPinToPort(SS); + uint8_t bit = digitalPinToBitMask(SS); + volatile uint8_t *reg = portModeRegister(port); + + // if the SS pin is not already configured as an output + // then set it high (to enable the internal pull-up resistor) + if(!(*reg & bit)){ + digitalWrite(SS, HIGH); + } // When the SS pin is set as OUTPUT, it can be used as // a general purpose output port (it doesn't influence -- cgit v1.2.3-18-g5258