From a552fae34e7ca3e0c4e95fd53498c97b0b1c0d3b Mon Sep 17 00:00:00 2001 From: lady ada Date: Sat, 18 Jul 2020 15:57:15 -0400 Subject: [PATCH] only write MOSI if its changed --- Adafruit_SPIDevice.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Adafruit_SPIDevice.cpp b/Adafruit_SPIDevice.cpp index 7f49546..6bccd9d 100644 --- a/Adafruit_SPIDevice.cpp +++ b/Adafruit_SPIDevice.cpp @@ -123,6 +123,8 @@ void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { startbit = 0x80; } + bool towrite, lastmosi = ! (buffer[0] & startbit); + // for softSPI we'll do it by hand for (size_t i = 0; i < len; i++) { // software SPI @@ -138,15 +140,17 @@ void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { // Serial.print(send, HEX); for (uint8_t b = startbit; b != 0; b = (_dataOrder == SPI_BITORDER_LSBFIRST) ? b << 1 : b >> 1) { if (_dataMode == SPI_MODE0 || _dataMode == SPI_MODE2) { - if (_mosi != -1) { + towrite = send & b; + if ((_mosi != -1) && (lastmosi != towrite)) { #ifdef BUSIO_USE_FAST_PINIO - if (send & b) + if (towrite) *mosiPort |= mosiPinMask; else *mosiPort &= ~mosiPinMask; #else - digitalWrite(_mosi, send & b); + digitalWrite(_mosi, towrite); #endif + lastmosi = towrite; } #ifdef BUSIO_USE_FAST_PINIO