Skip to content

Commit b654431

Browse files
committed
Even more direct writes for writePixels on RP2040
Switch SPI to 16-bit for little-endian, write bytes as-is for big-endian
1 parent a3bf8ba commit b654431

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

Adafruit_SPITFT.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,19 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, bool block,
10211021
swapBytes(colors, len); // big-to-little endian to restore pixel buffer
10221022
}
10231023

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, SPI_SSPCR0_DSS_BITS);
1031+
spi_write16_blocking(pi_spi, colors, len);
1032+
// switch back to 8-bit
1033+
hw_write_masked(&spi_get_hw(pi_spi)->cr0, 7 << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS);
1034+
} else {
1035+
spi_write_blocking(pi_spi, (uint8_t *)colors, len * 2);
1036+
}
10241037
return;
10251038
#elif defined(USE_SPI_DMA) && \
10261039
(defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO))

0 commit comments

Comments
 (0)