Skip to content

Commit 82ddeb0

Browse files
committed
Add SPI. transfer16(...) API
1 parent 2ceac44 commit 82ddeb0

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

Diff for: libraries/SPI/SPI.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,22 @@ byte SPIClass::transfer(uint8_t data)
194194
return _p_sercom->readDataSPI() & 0xFF;
195195
}
196196

197+
uint16_t SPIClass::transfer16(uint16_t data) {
198+
union { uint16_t val; struct { uint8_t lsb; uint8_t msb; }; } t;
199+
200+
t.val = data;
201+
202+
if (_p_sercom->getDataOrderSPI() == LSB_FIRST) {
203+
t.lsb = transfer(t.lsb);
204+
t.msb = transfer(t.msb);
205+
} else {
206+
t.msb = transfer(t.msb);
207+
t.lsb = transfer(t.lsb);
208+
}
209+
210+
return t.val;
211+
}
212+
197213
void SPIClass::attachInterrupt() {
198214
// Should be enableInterrupt()
199215
}

Diff for: libraries/SPI/SPI.h

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class SPIClass {
9595

9696

9797
byte transfer(uint8_t data);
98+
uint16_t transfer16(uint16_t data);
9899
inline void transfer(void *buf, size_t count);
99100

100101
// Transaction Functions

0 commit comments

Comments
 (0)