File tree Expand file tree Collapse file tree 4 files changed +14
-31
lines changed Expand file tree Collapse file tree 4 files changed +14
-31
lines changed Original file line number Diff line number Diff line change @@ -300,24 +300,11 @@ void SERCOM::setClockModeSPI(SercomSpiClockMode clockMode)
300
300
enableSPI ();
301
301
}
302
302
303
- void SERCOM::writeDataSPI (uint8_t data)
303
+ uint8_t SERCOM::transferDataSPI (uint8_t data)
304
304
{
305
- while ( sercom->SPI .INTFLAG .bit .DRE == 0 )
306
- {
307
- // Waiting Data Registry Empty
308
- }
309
-
310
305
sercom->SPI .DATA .bit .DATA = data; // Writing data into Data register
311
306
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 )
307
+ while ( sercom->SPI .INTFLAG .bit .RXC == 0 )
321
308
{
322
309
// Waiting Complete Reception
323
310
}
Original file line number Diff line number Diff line change @@ -175,8 +175,7 @@ class SERCOM
175
175
SercomDataOrder getDataOrderSPI ( void ) ;
176
176
void setBaudrateSPI (uint8_t divider) ;
177
177
void setClockModeSPI (SercomSpiClockMode clockMode) ;
178
- void writeDataSPI (uint8_t data) ;
179
- uint16_t readDataSPI ( void ) ;
178
+ uint8_t transferDataSPI (uint8_t data) ;
180
179
bool isBufferOverflowErrorSPI ( void ) ;
181
180
bool isDataRegisterEmptySPI ( void ) ;
182
181
bool isTransmitCompleteSPI ( void ) ;
Original file line number Diff line number Diff line change @@ -187,11 +187,7 @@ void SPIClass::setClockDivider(uint8_t div)
187
187
188
188
byte SPIClass::transfer (uint8_t data)
189
189
{
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);
195
191
}
196
192
197
193
uint16_t SPIClass::transfer16 (uint16_t data) {
@@ -210,6 +206,15 @@ uint16_t SPIClass::transfer16(uint16_t data) {
210
206
return t.val ;
211
207
}
212
208
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
+ buffer++;
215
+ }
216
+ }
217
+
213
218
void SPIClass::attachInterrupt () {
214
219
// Should be enableInterrupt()
215
220
}
Original file line number Diff line number Diff line change @@ -96,7 +96,7 @@ class SPIClass {
96
96
97
97
byte transfer (uint8_t data);
98
98
uint16_t transfer16 (uint16_t data);
99
- inline void transfer (void *buf, size_t count);
99
+ void transfer (void *buf, size_t count);
100
100
101
101
// Transaction Functions
102
102
void usingInterrupt (int interruptNumber);
@@ -132,14 +132,6 @@ class SPIClass {
132
132
uint32_t interruptMask;
133
133
};
134
134
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
-
143
135
#if SPI_INTERFACES_COUNT > 0
144
136
extern SPIClass SPI;
145
137
#endif
You can’t perform that action at this time.
0 commit comments