From 6599a9f52a9386ff5215a268cdca663916df5f2e Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Mon, 4 May 2015 18:11:46 +0200 Subject: [PATCH] add SPIClass::transfer16 (needed by some display libs) --- libraries/SPI/SPI.cpp | 24 +++++++++++++++++++++++- libraries/SPI/SPI.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/libraries/SPI/SPI.cpp b/libraries/SPI/SPI.cpp index fefd5ce2b..347259f4d 100644 --- a/libraries/SPI/SPI.cpp +++ b/libraries/SPI/SPI.cpp @@ -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; +} + diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h index d62d96df3..5ff10d3a3 100644 --- a/libraries/SPI/SPI.h +++ b/libraries/SPI/SPI.h @@ -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); };