From c28d7bc18782c21429ddab9fc985cfe0f6db375e Mon Sep 17 00:00:00 2001 From: Kuldeep Singh Dhaka Date: Fri, 25 Jul 2014 02:10:12 +0530 Subject: [PATCH] stm32: spi: Standard mode selection Allow setting cpol/cpha via standard mode numbers, instead of separate calls for each bit. --- .../libopencm3/stm32/common/spi_common_all.h | 1 + lib/stm32/common/spi_common_all.c | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/libopencm3/stm32/common/spi_common_all.h b/include/libopencm3/stm32/common/spi_common_all.h index afff6e66..949fec1d 100644 --- a/include/libopencm3/stm32/common/spi_common_all.h +++ b/include/libopencm3/stm32/common/spi_common_all.h @@ -391,6 +391,7 @@ void spi_enable_tx_dma(uint32_t spi); void spi_disable_tx_dma(uint32_t spi); void spi_enable_rx_dma(uint32_t spi); void spi_disable_rx_dma(uint32_t spi); +void spi_set_standard_mode(uint32_t spi, uint8_t mode); END_DECLS diff --git a/lib/stm32/common/spi_common_all.c b/lib/stm32/common/spi_common_all.c index 1619fecb..6e764916 100644 --- a/lib/stm32/common/spi_common_all.c +++ b/lib/stm32/common/spi_common_all.c @@ -709,4 +709,29 @@ void spi_disable_rx_dma(uint32_t spi) SPI_CR2(spi) &= ~SPI_CR2_RXDMAEN; } +/*---------------------------------------------------------------------------*/ +/** @brief SPI Standard Mode selection +@details Set SPI standard Modes +Mode | CPOL | CPHA +---- | ---- | ---- + 0 | 0 | 0 + 1 | 0 | 1 + 2 | 1 | 0 + 3 | 1 | 1 +@param[in] spi Unsigned int32. SPI peripheral identifier @ref spi_reg_base. +@param[in] mode Unsigned int8. Standard SPI mode (0, 1, 2, 3) +@sa spi_set_clock_phase_0 spi_set_clock_phase_1 +@sa spi_set_clock_polarity_0 spi_set_clock_polarity_1 +*/ + +void spi_set_standard_mode(uint32_t spi, uint8_t mode) +{ + if(mode > 3) { + return; + } + + uint32_t reg32 = SPI_CR1(spi) & ~(SPI_CR1_CPOL | SPI_CR1_CPHA); + SPI_CR1(spi) = reg32 | mode; +} + /**@}*/