Merge pull request #76 from monroewilliams/master

Faster hardware SPI writes on ESP32
This commit is contained in:
Limor "Ladyada" Fried 2022-01-12 13:47:24 -05:00 committed by GitHub
commit edd38996a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 7 deletions

View File

@ -301,11 +301,23 @@ bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len,
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
// do the writing // do the writing
for (size_t i = 0; i < prefix_len; i++) { #if defined(ARDUINO_ARCH_ESP32)
transfer(prefix_buffer[i]); if (_spi) {
} if (prefix_len > 0) {
for (size_t i = 0; i < len; i++) { _spi->transferBytes(prefix_buffer, nullptr, prefix_len);
transfer(buffer[i]); }
if (len > 0) {
_spi->transferBytes(buffer, nullptr, len);
}
} else
#endif
{
for (size_t i = 0; i < prefix_len; i++) {
transfer(prefix_buffer[i]);
}
for (size_t i = 0; i < len; i++) {
transfer(buffer[i]);
}
} }
digitalWrite(_cs, HIGH); digitalWrite(_cs, HIGH);
@ -396,8 +408,17 @@ bool Adafruit_SPIDevice::write_then_read(uint8_t *write_buffer,
digitalWrite(_cs, LOW); digitalWrite(_cs, LOW);
// do the writing // do the writing
for (size_t i = 0; i < write_len; i++) { #if defined(ARDUINO_ARCH_ESP32)
transfer(write_buffer[i]); if (_spi) {
if (write_len > 0) {
_spi->transferBytes(write_buffer, nullptr, write_len);
}
} else
#endif
{
for (size_t i = 0; i < write_len; i++) {
transfer(write_buffer[i]);
}
} }
#ifdef DEBUG_SERIAL #ifdef DEBUG_SERIAL