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