aboutsummaryrefslogtreecommitdiffstats
path: root/src/rp2040/spi.c
diff options
context:
space:
mode:
authorTimofey Titovets <nefelim4ag@gmail.com>2025-05-23 02:52:46 +0200
committerKevinOConnor <kevin@koconnor.net>2025-05-30 15:18:07 -0400
commitf4130aa9487bed4210eedc01af4b9c88141a5771 (patch)
tree7e251f39b678f4a98baa6dceb41542ea10abb154 /src/rp2040/spi.c
parentde182b1d144accfbb43c46bcda38a761f13f0f96 (diff)
downloadkutter-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/rp2040/spi.c')
-rw-r--r--src/rp2040/spi.c12
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;