diff options
author | Cristian Maglie <c.maglie@bug.st> | 2014-10-21 13:12:25 +0200 |
---|---|---|
committer | Cristian Maglie <c.maglie@bug.st> | 2014-11-25 15:56:11 +0100 |
commit | 4948bf5650ec9a5a3638c57167ba8212e8c46242 (patch) | |
tree | 84465581009cd1321aa51277f79843fc48c047a3 /libraries/SPI/SPI.cpp | |
parent | 6cfc5c23cc3c430d4f160c87418ad6906341d7b8 (diff) |
[avr] Added SPI.notUsingInterrupt() (Andrew Kroll)
Diffstat (limited to 'libraries/SPI/SPI.cpp')
-rw-r--r-- | libraries/SPI/SPI.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index 4bd72df..40d4278 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -151,3 +151,45 @@ void SPIClass::usingInterrupt(uint8_t interruptNumber) interrupts(); } +void SPIClass::notUsingInterrupt(uint8_t interruptNumber) +{ + // Once in mode 2 we can't go back to 0 without a proper reference count + if (interruptMode == 2) + return; + uint8_t mask = 0; + uint8_t sreg = SREG; + noInterrupts(); // Protect from a scheduler and prevent transactionBegin + switch (interruptNumber) { + #ifdef SPI_INT0_MASK + case 0: mask = SPI_INT0_MASK; break; + #endif + #ifdef SPI_INT1_MASK + case 1: mask = SPI_INT1_MASK; break; + #endif + #ifdef SPI_INT2_MASK + case 2: mask = SPI_INT2_MASK; break; + #endif + #ifdef SPI_INT3_MASK + case 3: mask = SPI_INT3_MASK; break; + #endif + #ifdef SPI_INT4_MASK + case 4: mask = SPI_INT4_MASK; break; + #endif + #ifdef SPI_INT5_MASK + case 5: mask = SPI_INT5_MASK; break; + #endif + #ifdef SPI_INT6_MASK + case 6: mask = SPI_INT6_MASK; break; + #endif + #ifdef SPI_INT7_MASK + case 7: mask = SPI_INT7_MASK; break; + #endif + default: + break; + // this case can't be reached + } + interruptMask &= ~mask; + if (!interruptMask) + interruptMode = 0; + SREG = sreg; +} |