File tree Expand file tree Collapse file tree 4 files changed +12
-26
lines changed Expand file tree Collapse file tree 4 files changed +12
-26
lines changed Original file line number Diff line number Diff line change @@ -300,7 +300,7 @@ void SERCOM::setClockModeSPI(SercomSpiClockMode clockMode)
300300 enableSPI ();
301301}
302302
303- void SERCOM::writeDataSPI (uint8_t data)
303+ uint8_t SERCOM::transferDataSPI (uint8_t data)
304304{
305305 while ( sercom->SPI .INTFLAG .bit .DRE == 0 )
306306 {
@@ -309,15 +309,7 @@ void SERCOM::writeDataSPI(uint8_t data)
309309
310310 sercom->SPI .DATA .bit .DATA = data; // Writing data into Data register
311311
312- while ( sercom->SPI .INTFLAG .bit .TXC == 0 || sercom->SPI .INTFLAG .bit .DRE == 0 )
313- {
314- // Waiting Complete Transmission
315- }
316- }
317-
318- uint16_t SERCOM::readDataSPI ()
319- {
320- while ( sercom->SPI .INTFLAG .bit .DRE == 0 || sercom->SPI .INTFLAG .bit .RXC == 0 )
312+ while ( sercom->SPI .INTFLAG .bit .RXC == 0 )
321313 {
322314 // Waiting Complete Reception
323315 }
Original file line number Diff line number Diff line change @@ -175,8 +175,7 @@ class SERCOM
175175 SercomDataOrder getDataOrderSPI ( void ) ;
176176 void setBaudrateSPI (uint8_t divider) ;
177177 void setClockModeSPI (SercomSpiClockMode clockMode) ;
178- void writeDataSPI (uint8_t data) ;
179- uint16_t readDataSPI ( void ) ;
178+ uint8_t transferDataSPI (uint8_t data) ;
180179 bool isBufferOverflowErrorSPI ( void ) ;
181180 bool isDataRegisterEmptySPI ( void ) ;
182181 bool isTransmitCompleteSPI ( void ) ;
Original file line number Diff line number Diff line change @@ -187,11 +187,7 @@ void SPIClass::setClockDivider(uint8_t div)
187187
188188byte SPIClass::transfer (uint8_t data)
189189{
190- // Writing the data
191- _p_sercom->writeDataSPI (data);
192-
193- // Read data
194- return _p_sercom->readDataSPI () & 0xFF ;
190+ return _p_sercom->transferDataSPI (data);
195191}
196192
197193uint16_t SPIClass::transfer16 (uint16_t data) {
@@ -210,6 +206,13 @@ uint16_t SPIClass::transfer16(uint16_t data) {
210206 return t.val ;
211207}
212208
209+ void SPIClass::transfer (void *buf, size_t count)
210+ {
211+ uint8_t *buffer = reinterpret_cast <uint8_t *>(buf);
212+ for (size_t i=0 ; i<count; i++)
213+ *buffer++ = transfer (*buffer);
214+ }
215+
213216void SPIClass::attachInterrupt () {
214217 // Should be enableInterrupt()
215218}
Original file line number Diff line number Diff line change @@ -96,7 +96,7 @@ class SPIClass {
9696
9797 byte transfer (uint8_t data);
9898 uint16_t transfer16 (uint16_t data);
99- inline void transfer (void *buf, size_t count);
99+ void transfer (void *buf, size_t count);
100100
101101 // Transaction Functions
102102 void usingInterrupt (int interruptNumber);
@@ -132,14 +132,6 @@ class SPIClass {
132132 uint32_t interruptMask;
133133};
134134
135- void SPIClass::transfer (void *buf, size_t count)
136- {
137- // TODO: Optimize for faster block-transfer
138- uint8_t *buffer = reinterpret_cast <uint8_t *>(buf);
139- for (size_t i=0 ; i<count; i++)
140- buffer[i] = transfer (buffer[i]);
141- }
142-
143135#if SPI_INTERFACES_COUNT > 0
144136 extern SPIClass SPI;
145137#endif
You can’t perform that action at this time.
0 commit comments