Even more direct writes for writePixels on RP2040

Switch SPI to 16-bit for little-endian, write bytes as-is for big-endian
This commit is contained in:
Charlie Birks committed 2021-09-15 12:09:29 +01:00
1 parent a3bf8baeee
commit b654431d6f
1 file changed
+13
+13
View File
@@ -1021,6 +1021,19 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, bool block,
swapBytes(colors, len); // big-to-little endian to restore pixel buffer
}
return;
#elif defined(ARDUINO_ARCH_RP2040)
spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
if (!bigEndian) {
// switch to 16-bit writes
hw_write_masked(&spi_get_hw(pi_spi)->cr0, 15 << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS);
spi_write16_blocking(pi_spi, colors, len);
// switch back to 8-bit
hw_write_masked(&spi_get_hw(pi_spi)->cr0, 7 << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS);
} else {
spi_write_blocking(pi_spi, (uint8_t *)colors, len * 2);
}
return;
#elif defined(USE_SPI_DMA) && \
(defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO))