1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

add SPIClass::transfer16 (needed by some display libs)

This commit is contained in:
Markus Sattler 2015-05-04 18:11:46 +02:00
parent e6b48164c2
commit 6599a9f52a
2 changed files with 24 additions and 1 deletions

View File

@ -57,7 +57,7 @@ void SPIClass::setDataMode(uint8_t dataMode) {
}
void SPIClass::setBitOrder(uint8_t bitOrder) {
if (bitOrder == MSBFIRST){
if (bitOrder == MSBFIRST) {
SPI1C &= ~(SPICWBO | SPICRBO);
} else {
SPI1C |= (SPICWBO | SPICRBO);
@ -76,3 +76,25 @@ uint8_t SPIClass::transfer(uint8_t data) {
return (uint8_t)(SPI1W0 & 0xff);
}
uint16_t SPIClass::transfer16(uint16_t data) {
union {
uint16_t val;
struct {
uint8_t lsb;
uint8_t msb;
};
} in, out;
in.val = data;
if((SPI1C & (SPICWBO | SPICRBO))) {
//MSBFIRST
out.msb = transfer(in.msb);
out.lsb = transfer(in.lsb);
} else {
//LSBFIRST
out.lsb = transfer(in.lsb);
out.msb = transfer(in.msb);
}
return out.val;
}

View File

@ -80,6 +80,7 @@ public:
void setClockDivider(uint32_t clockDiv);
void beginTransaction(SPISettings settings);
uint8_t transfer(uint8_t data);
uint16_t transfer16(uint16_t data);
void endTransaction(void);
};