diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index 6cc61a747..654053f28 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -81,9 +81,11 @@ void arduino::MbedSPI::beginTransaction(SPISettings settings) { dev->obj->frequency(settings.getClockFreq()); this->settings = settings; } + spiLockMutex.lock(); } void arduino::MbedSPI::endTransaction(void) { + spiLockMutex.unlock(); // spinlock until transmission is over (if using ASYNC transfer) } diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h index 3266953d4..a9cef6cc4 100644 --- a/libraries/SPI/SPI.h +++ b/libraries/SPI/SPI.h @@ -20,6 +20,7 @@ #include "Arduino.h" #include "api/HardwareSPI.h" +#include typedef struct _mbed_spi mbed_spi; @@ -50,6 +51,7 @@ class MbedSPI : public SPIClass private: SPISettings settings = SPISettings(0, MSBFIRST, SPI_MODE0); _mbed_spi* dev = NULL; + rtos::Mutex spiLockMutex; PinName _miso; PinName _mosi; PinName _sck;