@@ -1021,6 +1021,21 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, bool block,
1021
1021
swapBytes (colors, len); // big-to-little endian to restore pixel buffer
1022
1022
}
1023
1023
1024
+ return ;
1025
+ #elif defined(ARDUINO_ARCH_RP2040)
1026
+ spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
1027
+
1028
+ if (!bigEndian) {
1029
+ // switch to 16-bit writes
1030
+ hw_write_masked (&spi_get_hw (pi_spi)->cr0 , 15 << SPI_SSPCR0_DSS_LSB,
1031
+ SPI_SSPCR0_DSS_BITS);
1032
+ spi_write16_blocking (pi_spi, colors, len);
1033
+ // switch back to 8-bit
1034
+ hw_write_masked (&spi_get_hw (pi_spi)->cr0 , 7 << SPI_SSPCR0_DSS_LSB,
1035
+ SPI_SSPCR0_DSS_BITS);
1036
+ } else {
1037
+ spi_write_blocking (pi_spi, (uint8_t *)colors, len * 2 );
1038
+ }
1024
1039
return ;
1025
1040
#elif defined(USE_SPI_DMA) && \
1026
1041
(defined (__SAMD51__) || defined (ARDUINO_SAMD_ZERO))
@@ -1326,7 +1341,13 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) {
1326
1341
hwspi._spi ->write (lo);
1327
1342
}
1328
1343
} while (len);
1329
- #else // !ESP8266
1344
+ #elif defined(ARDUINO_ARCH_RP2040)
1345
+ spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
1346
+ color = __builtin_bswap16 (color);
1347
+
1348
+ while (len--)
1349
+ spi_write_blocking (pi_spi, (uint8_t *)&color, 2 );
1350
+ #else // !ESP8266 && !ARDUINO_ARCH_RP2040
1330
1351
while (len--) {
1331
1352
#if defined(__AVR__)
1332
1353
AVR_WRITESPI (hi);
@@ -2079,6 +2100,9 @@ void Adafruit_SPITFT::spiWrite(uint8_t b) {
2079
2100
AVR_WRITESPI (b);
2080
2101
#elif defined(ESP8266) || defined(ESP32)
2081
2102
hwspi._spi ->write (b);
2103
+ #elif defined(ARDUINO_ARCH_RP2040)
2104
+ spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2105
+ spi_write_blocking (pi_spi, &b, 1 );
2082
2106
#else
2083
2107
hwspi._spi ->transfer (b);
2084
2108
#endif
@@ -2385,6 +2409,10 @@ void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) {
2385
2409
AVR_WRITESPI (w);
2386
2410
#elif defined(ESP8266) || defined(ESP32)
2387
2411
hwspi._spi ->write16 (w);
2412
+ #elif defined(ARDUINO_ARCH_RP2040)
2413
+ spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2414
+ w = __builtin_bswap16 (w);
2415
+ spi_write_blocking (pi_spi, (uint8_t *)&w, 2 );
2388
2416
#else
2389
2417
// MSB, LSB because TFTs are generally big-endian
2390
2418
hwspi._spi ->transfer (w >> 8 );
@@ -2437,6 +2465,10 @@ void Adafruit_SPITFT::SPI_WRITE32(uint32_t l) {
2437
2465
AVR_WRITESPI (l);
2438
2466
#elif defined(ESP8266) || defined(ESP32)
2439
2467
hwspi._spi ->write32 (l);
2468
+ #elif defined(ARDUINO_ARCH_RP2040)
2469
+ spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
2470
+ l = __builtin_bswap32 (l);
2471
+ spi_write_blocking (pi_spi, (uint8_t *)&l, 4 );
2440
2472
#else
2441
2473
hwspi._spi ->transfer (l >> 24 );
2442
2474
hwspi._spi ->transfer (l >> 16 );
0 commit comments