diff options
author | Timofey Titovets <nefelim4ag@gmail.com> | 2025-05-23 02:52:46 +0200 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2025-05-30 15:18:07 -0400 |
commit | f4130aa9487bed4210eedc01af4b9c88141a5771 (patch) | |
tree | 7e251f39b678f4a98baa6dceb41542ea10abb154 /src | |
parent | de182b1d144accfbb43c46bcda38a761f13f0f96 (diff) | |
download | kutter-f4130aa9487bed4210eedc01af4b9c88141a5771.tar.gz kutter-f4130aa9487bed4210eedc01af4b9c88141a5771.tar.xz kutter-f4130aa9487bed4210eedc01af4b9c88141a5771.zip |
rp2040: spi - enable fifo
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/rp2040/spi.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/rp2040/spi.c b/src/rp2040/spi.c index 57231966..a92a0358 100644 --- a/src/rp2040/spi.c +++ b/src/rp2040/spi.c @@ -132,11 +132,15 @@ void spi_transfer(struct spi_config config, uint8_t receive_data, uint8_t len, uint8_t *data) { + uint8_t* wptr = data; + uint8_t* end = data + len; spi_hw_t *spi = config.spi; - while (len--) { - spi->dr = *data; - while (!(spi->sr & SPI_SSPSR_RNE_BITS)) - ; + while (data < end) { + uint32_t sr = spi->sr & (SPI_SSPSR_TNF_BITS | SPI_SSPSR_RNE_BITS); + if ((sr == SPI_SSPSR_TNF_BITS) && wptr < end) + spi->dr = *wptr++; + if (!(sr & SPI_SSPSR_RNE_BITS)) + continue; uint8_t rdata = spi->dr; if(receive_data) *data = rdata; |