diff --git a/cores/arduino/SERCOM.cpp b/cores/arduino/SERCOM.cpp index 3447d9dd5..bfcf813a2 100644 --- a/cores/arduino/SERCOM.cpp +++ b/cores/arduino/SERCOM.cpp @@ -300,24 +300,11 @@ void SERCOM::setClockModeSPI(SercomSpiClockMode clockMode) enableSPI(); } -void SERCOM::writeDataSPI(uint8_t data) +uint8_t SERCOM::transferDataSPI(uint8_t data) { - while( sercom->SPI.INTFLAG.bit.DRE == 0 ) - { - // Waiting Data Registry Empty - } - sercom->SPI.DATA.bit.DATA = data; // Writing data into Data register - while( sercom->SPI.INTFLAG.bit.TXC == 0 || sercom->SPI.INTFLAG.bit.DRE == 0 ) - { - // Waiting Complete Transmission - } -} - -uint16_t SERCOM::readDataSPI() -{ - while( sercom->SPI.INTFLAG.bit.DRE == 0 || sercom->SPI.INTFLAG.bit.RXC == 0 ) + while( sercom->SPI.INTFLAG.bit.RXC == 0 ) { // Waiting Complete Reception } diff --git a/cores/arduino/SERCOM.h b/cores/arduino/SERCOM.h index 67527f96f..79249011d 100644 --- a/cores/arduino/SERCOM.h +++ b/cores/arduino/SERCOM.h @@ -175,8 +175,7 @@ class SERCOM SercomDataOrder getDataOrderSPI( void ) ; void setBaudrateSPI(uint8_t divider) ; void setClockModeSPI(SercomSpiClockMode clockMode) ; - void writeDataSPI(uint8_t data) ; - uint16_t readDataSPI( void ) ; + uint8_t transferDataSPI(uint8_t data) ; bool isBufferOverflowErrorSPI( void ) ; bool isDataRegisterEmptySPI( void ) ; bool isTransmitCompleteSPI( void ) ; diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index 39d5a28d1..8afb8146c 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -187,11 +187,7 @@ void SPIClass::setClockDivider(uint8_t div) byte SPIClass::transfer(uint8_t data) { - // Writing the data - _p_sercom->writeDataSPI(data); - - // Read data - return _p_sercom->readDataSPI() & 0xFF; + return _p_sercom->transferDataSPI(data); } uint16_t SPIClass::transfer16(uint16_t data) { @@ -210,6 +206,15 @@ uint16_t SPIClass::transfer16(uint16_t data) { return t.val; } +void SPIClass::transfer(void *buf, size_t count) +{ + uint8_t *buffer = reinterpret_cast(buf); + for (size_t i=0; i(buf); - for (size_t i=0; i 0 extern SPIClass SPI; #endif