From aa404fdea8325c78058273a9486297af19eeeaaf Mon Sep 17 00:00:00 2001 From: PaulStoffregen Date: Tue, 29 Jul 2014 10:12:31 -0700 Subject: [PATCH] Use SPI transaction, if supported by SPI library --- SPIFlash.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/SPIFlash.cpp b/SPIFlash.cpp index 20d1960..e1b8bc1 100644 --- a/SPIFlash.cpp +++ b/SPIFlash.cpp @@ -32,24 +32,36 @@ SPIFlash::SPIFlash(uint8_t slaveSelectPin, uint16_t jedecID) { /// Select the flash chip void SPIFlash::select() { +#ifdef SPI_HAS_TRANSACTION + SPI.beginTransaction(SPISettings(33000000, MSBFIRST, SPI_MODE0)); +#else noInterrupts(); +#endif digitalWrite(_slaveSelectPin, LOW); } /// UNselect the flash chip void SPIFlash::unselect() { digitalWrite(_slaveSelectPin, HIGH); +#ifdef SPI_HAS_TRANSACTION + SPI.endTransaction(); +#else interrupts(); +#endif } /// setup SPI, read device ID etc... boolean SPIFlash::initialize() { pinMode(_slaveSelectPin, OUTPUT); +#ifdef SPI_HAS_TRANSACTION + digitalWrite(_slaveSelectPin, HIGH); +#else unselect(); SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV2); //max speed, except on Due which can run at system clock speed +#endif SPI.begin(); if (_jedecID == 0 || readDeviceId() == _jedecID) { @@ -228,4 +240,4 @@ void SPIFlash::wakeup() { /// cleanup void SPIFlash::end() { SPI.end(); -} \ No newline at end of file +}