mirror of
https://github.com/adafruit/Adafruit-GFX-Library.git
synced 2026-10-26 22:10:52 +00:00
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:
1 parent
a3bf8baeee
commit
b654431d6f
1 file changed
+13
@@ -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))
|
||||
|
||||
Reference in new issue
Block a user