I created a patch for the SPIv2 and the newest chibos 191. Does that seem right?
Code: Select all
Index: os/hal/include/hal_spi.h
===================================================================
--- os/hal/include/hal_spi.h (revision 8ef845498982e9b5f2b8368ecd9af744c90ac6c6)
+++ os/hal/include/hal_spi.h (date 1585150715934)
@@ -152,6 +152,10 @@
*/
bool circular;
#endif
+ /**
+ * @brief SPI Slave mode flag.
+ */
+ bool slave_mode;
+ /**
/**
* @brief Operation complete callback or @p NULL.
*/
Index: os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c
===================================================================
--- os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c (revision 8ef845498982e9b5f2b8368ecd9af744c90ac6c6)
+++ os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c (date 1585150414264)
@@ -465,9 +465,17 @@
/* SPI setup and enable.*/
spip->spi->CR1 &= ~SPI_CR1_SPE;
- spip->spi->CR1 = spip->config->cr1 | SPI_CR1_MSTR;
- spip->spi->CR2 = spip->config->cr2 | SPI_CR2_FRXTH | SPI_CR2_SSOE |
+ if (spip->config->slave_mode) {
+ spip->spi->CR1 = spip->config->cr1;
+ spip->spi->CR2 = spip->config->cr2 | SPI_CR2_FRXTH |
+ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN;
+ }
+ else{
+ spip->spi->CR1 = spip->config->cr1 | SPI_CR1_MSTR;
+ spip->spi->CR2 = spip->config->cr2 | SPI_CR2_FRXTH | SPI_CR2_SSOE |
SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN;
+ }
+
spip->spi->CR1 |= SPI_CR1_SPE;
}