From bc5780463a8b1d41f59c1c6bb5403c27e091fdf5 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Fri, 22 Dec 2017 11:58:22 -0500 Subject: [PATCH] Add SPI.notUsingInterrupt(...) --- libraries/SPI/SPI.cpp | 20 ++++++++++++++++++++ libraries/SPI/SPI.h | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index 8afb8146c..8ce3873b2 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -112,6 +112,26 @@ void SPIClass::usingInterrupt(int interruptNumber) interrupts(); } +void SPIClass::notUsingInterrupt(int interruptNumber) +{ + if ((interruptNumber == NOT_AN_INTERRUPT) || (interruptNumber == EXTERNAL_INT_NMI)) + return; + + if (interruptMode & SPI_IMODE_GLOBAL) + return; // can't go back, as there is no reference count + + uint8_t irestore = interruptsStatus(); + noInterrupts(); + + interruptMask &= ~(1 << interruptNumber); + + if (interruptMask == 0) + interruptMode = SPI_IMODE_NONE; + + if (irestore) + interrupts(); +} + void SPIClass::beginTransaction(SPISettings settings) { if (interruptMode != SPI_IMODE_NONE) diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h index d119bf4ac..ff741bf5c 100644 --- a/libraries/SPI/SPI.h +++ b/libraries/SPI/SPI.h @@ -29,6 +29,9 @@ // - SPISetting(clock, bitOrder, dataMode) #define SPI_HAS_TRANSACTION 1 +// SPI_HAS_NOTUSINGINTERRUPT means that SPI has notUsingInterrupt() method +#define SPI_HAS_NOTUSINGINTERRUPT 1 + #define SPI_MODE0 0x02 #define SPI_MODE1 0x00 #define SPI_MODE2 0x03 @@ -100,6 +103,7 @@ class SPIClass { // Transaction Functions void usingInterrupt(int interruptNumber); + void notUsingInterrupt(int interruptNumber); void beginTransaction(SPISettings settings); void endTransaction(void);