Skip to content

Commit a3bf8ba

Browse files
committed
Call spi_write_blocking directly for RP2040
This is around a 6-13x speed up in graphicstest (at 62.5Mhz)
1 parent 5bbee15 commit a3bf8ba

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

Adafruit_SPITFT.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,13 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) {
13261326
hwspi._spi->write(lo);
13271327
}
13281328
} while (len);
1329-
#else // !ESP8266
1329+
#elif defined(ARDUINO_ARCH_RP2040)
1330+
spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
1331+
color = __builtin_bswap16(color);
1332+
1333+
while (len--)
1334+
spi_write_blocking(pi_spi, (uint8_t *)&color, 2);
1335+
#else // !ESP8266 && !ARDUINO_ARCH_RP2040
13301336
while (len--) {
13311337
#if defined(__AVR__)
13321338
AVR_WRITESPI(hi);
@@ -2079,6 +2085,9 @@ void Adafruit_SPITFT::spiWrite(uint8_t b) {
20792085
AVR_WRITESPI(b);
20802086
#elif defined(ESP8266) || defined(ESP32)
20812087
hwspi._spi->write(b);
2088+
#elif defined(ARDUINO_ARCH_RP2040)
2089+
spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2090+
spi_write_blocking(pi_spi, &b, 1);
20822091
#else
20832092
hwspi._spi->transfer(b);
20842093
#endif
@@ -2385,6 +2394,10 @@ void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) {
23852394
AVR_WRITESPI(w);
23862395
#elif defined(ESP8266) || defined(ESP32)
23872396
hwspi._spi->write16(w);
2397+
#elif defined(ARDUINO_ARCH_RP2040)
2398+
spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2399+
w = __builtin_bswap16(w);
2400+
spi_write_blocking(pi_spi, (uint8_t *)&w, 2);
23882401
#else
23892402
// MSB, LSB because TFTs are generally big-endian
23902403
hwspi._spi->transfer(w >> 8);
@@ -2437,6 +2450,10 @@ void Adafruit_SPITFT::SPI_WRITE32(uint32_t l) {
24372450
AVR_WRITESPI(l);
24382451
#elif defined(ESP8266) || defined(ESP32)
24392452
hwspi._spi->write32(l);
2453+
#elif defined(ARDUINO_ARCH_RP2040)
2454+
spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2455+
l = __builtin_bswap32(l);
2456+
spi_write_blocking(pi_spi, (uint8_t *)&l, 4);
24402457
#else
24412458
hwspi._spi->transfer(l >> 24);
24422459
hwspi._spi->transfer(l >> 16);

0 commit comments

Comments
 (0)