Skip to content

Commit be47523

Browse files
committed
SPI: add transfer16
1 parent 506d8f7 commit be47523

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

libraries/SPI/src/SPI.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,32 @@ uint8_t SPIClass::transfer(uint8_t data)
211211
return ret;
212212
}
213213

214+
uint16_t SPIClass::transfer16(uint16_t data)
215+
{
216+
uint16_t ret;
217+
uint8_t *txdata = (uint8_t *)&data;
218+
uint8_t *rxdata = (uint8_t *)&ret;
219+
220+
if (_ssel_hard == 0 && _ssel_bank != 0) {
221+
gpio_bit_reset(_ssel_bank, _ssel_bit);
222+
}
223+
224+
for (size_t i = 0; i < 2; i++) {
225+
while (!spi_i2s_flag_get(_dev, SPI_FLAG_TBE));
226+
spi_i2s_data_transmit(_dev, *txdata);
227+
txdata++;
228+
while (!spi_i2s_flag_get(_dev, SPI_FLAG_RBNE));
229+
*rxdata = spi_i2s_data_receive(_dev);
230+
rxdata++;
231+
}
232+
233+
if (_ssel_hard == 0 && _ssel_bank != 0) {
234+
gpio_bit_set(_ssel_bank, _ssel_bit);
235+
}
236+
237+
return ret;
238+
}
239+
214240
void SPIClass::setBitOrder(uint8_t bitOrder) {
215241
_bitOrder = bitOrder;
216242
beginTransaction();

libraries/SPI/src/SPI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class SPIClass {
6565
void transfer(
6666
uint8_t* txdata, uint8_t* rxdata, uint32_t size, uint32_t timeout = 1);
6767
uint8_t transfer(uint8_t data);
68+
uint16_t transfer16(uint16_t data);
6869

6970
void setBitOrder(uint8_t bitOrder);
7071
void setDataMode(uint8_t dataMode);

0 commit comments

Comments
 (0)