Skip to content

Commit 13aaca5

Browse files
committed
conditional AVR macro for TFT_HARD_SPI
1 parent 78cca38 commit 13aaca5

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

Adafruit_SPITFT.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@
3535

3636
#include "Adafruit_SPITFT.h"
3737

38+
#if defined(__AVR__)
39+
#if defined(__AVR_XMEGA__) //only tested with __AVR_ATmega4809__
40+
#define AVR_WRITESPI(x) for(SPI0_DATA = (x); (!(SPI0_INTFLAGS & _BV(SPI_IF_bp))); )
41+
#else
42+
#define AVR_WRITESPI(x) for(SPDR = (x); (!(SPSR & _BV(SPIF))); )
43+
#endif
44+
#endif
45+
3846
#if defined(PORT_IOBUS)
3947
// On SAMD21, redefine digitalPinToPort() to use the slightly-faster
4048
// PORT_IOBUS rather than PORT (not needed on SAMD51).
@@ -1220,8 +1228,8 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) {
12201228
#else // !ESP8266
12211229
while(len--) {
12221230
#if defined(__AVR__)
1223-
for(SPDR = hi; !(SPSR & _BV(SPIF)); );
1224-
for(SPDR = lo; !(SPSR & _BV(SPIF)); );
1231+
AVR_WRITESPI(hi);
1232+
AVR_WRITESPI(lo);
12251233
#elif defined(ESP32)
12261234
hwspi._spi->write(hi);
12271235
hwspi._spi->write(lo);
@@ -1828,7 +1836,7 @@ inline void Adafruit_SPITFT::SPI_END_TRANSACTION(void) {
18281836
void Adafruit_SPITFT::spiWrite(uint8_t b) {
18291837
if(connection == TFT_HARD_SPI) {
18301838
#if defined(__AVR__)
1831-
for(SPDR = b; !(SPSR & _BV(SPIF)); );
1839+
AVR_WRITESPI(b);
18321840
#elif defined(ESP8266) || defined(ESP32)
18331841
hwspi._spi->write(b);
18341842
#else
@@ -2055,8 +2063,8 @@ inline bool Adafruit_SPITFT::SPI_MISO_READ(void) {
20552063
void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) {
20562064
if(connection == TFT_HARD_SPI) {
20572065
#if defined(__AVR__)
2058-
for(SPDR = (w >> 8); (!(SPSR & _BV(SPIF))); );
2059-
for(SPDR = w ; (!(SPSR & _BV(SPIF))); );
2066+
AVR_WRITESPI(w >> 8);
2067+
AVR_WRITESPI(w);
20602068
#elif defined(ESP8266) || defined(ESP32)
20612069
hwspi._spi->write16(w);
20622070
#else
@@ -2102,10 +2110,10 @@ void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) {
21022110
void Adafruit_SPITFT::SPI_WRITE32(uint32_t l) {
21032111
if(connection == TFT_HARD_SPI) {
21042112
#if defined(__AVR__)
2105-
for(SPDR = (l >> 24); !(SPSR & _BV(SPIF)); );
2106-
for(SPDR = (l >> 16); !(SPSR & _BV(SPIF)); );
2107-
for(SPDR = (l >> 8); !(SPSR & _BV(SPIF)); );
2108-
for(SPDR = l ; !(SPSR & _BV(SPIF)); );
2113+
AVR_WRITESPI(l >> 24);
2114+
AVR_WRITESPI(l >> 16);
2115+
AVR_WRITESPI(l >> 8);
2116+
AVR_WRITESPI(l );
21092117
#elif defined(ESP8266) || defined(ESP32)
21102118
hwspi._spi->write32(l);
21112119
#else

0 commit comments

Comments
 (0)