From f19a5fe18639f4b193bf5294b7cbbb7df67518a4 Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Tue, 30 May 2023 18:54:56 +0200
Subject: [PATCH] [SPI] Fixed transfer16 function

---
 src/shared/drivers/spi/SPIBus.h | 36 ++++-----------------------------
 1 file changed, 4 insertions(+), 32 deletions(-)

diff --git a/src/shared/drivers/spi/SPIBus.h b/src/shared/drivers/spi/SPIBus.h
index a58b4b035..fa58b7a8c 100644
--- a/src/shared/drivers/spi/SPIBus.h
+++ b/src/shared/drivers/spi/SPIBus.h
@@ -501,12 +501,6 @@ inline void SPIBus::read16(uint16_t* data, size_t nBytes)
         // Write the data item to transmit
         spi->DR = 0;
 
-        // Make sure transmission is complete
-        while ((spi->SR & SPI_SR_TXE) == 0)
-            ;
-        while ((spi->SR & SPI_SR_BSY) > 0)
-            ;        
-
         // Wait until data is received
         while ((spi->SR & SPI_SR_RXNE) == 0)
             ;
@@ -547,12 +541,6 @@ inline void SPIBus::write16(const uint16_t* data, size_t nBytes)
         // Write the data item to transmit
         spi->DR = static_cast<uint16_t>(data[i]);
 
-        // Make sure transmission is complete
-        while ((spi->SR & SPI_SR_TXE) == 0)
-            ;
-        while ((spi->SR & SPI_SR_BSY) > 0)
-            ;
-
         // Wait until data is received
         while ((spi->SR & SPI_SR_RXNE) == 0)
             ;
@@ -574,12 +562,6 @@ inline uint8_t SPIBus::transfer(uint8_t data)
     // Write the data item to transmit
     *(volatile uint8_t*)&spi->DR = static_cast<uint8_t>(data);
 
-    // Make sure transmission is complete
-    while ((spi->SR & SPI_SR_TXE) == 0)
-        ;
-    while ((spi->SR & SPI_SR_BSY) > 0)
-        ;
-
     // Wait until data is received
     while ((spi->SR & SPI_SR_RXNE) == 0)
         ;
@@ -600,21 +582,17 @@ inline uint16_t SPIBus::transfer16(uint16_t data)
     // Write the data item to transmit
     spi->DR = static_cast<uint16_t>(data);
 
-    // Make sure transmission is complete
-    while ((spi->SR & SPI_SR_TXE) == 0)
-        ;
-    while ((spi->SR & SPI_SR_BSY) > 0)
-        ;
-
     // Wait until data is received
     while ((spi->SR & SPI_SR_RXNE) == 0)
         ;
 
+    // Read the received data item
+    data = static_cast<uint16_t>(spi->DR);
+
     // Go back to 8 bit frame format
     set8BitFrameFormat();
 
-    // Read the received data item
-    return static_cast<uint16_t>(spi->DR);
+    return data;
 }
 
 inline uint32_t SPIBus::transfer24(uint32_t data)
@@ -653,12 +631,6 @@ inline void SPIBus::transfer16(uint16_t* data, size_t nBytes)
         // Write the data item to transmit
         spi->DR = static_cast<uint16_t>(data[i]);
 
-        // Make sure transmission is complete
-        while ((spi->SR & SPI_SR_TXE) == 0)
-            ;
-        while ((spi->SR & SPI_SR_BSY) > 0)
-            ;
-
         // Wait until data is received
         while ((spi->SR & SPI_SR_RXNE) == 0)
             ;
-- 
GitLab