From 48e0da4b2d1568f9f29058def12dc32d1cff3586 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 2 Aug 2020 13:09:17 -0700 Subject: [PATCH] altos/stmf0: Add spi format configuration options This lets different SPI devices use different SPI formats Signed-off-by: Keith Packard --- src/stmf0/ao_arch_funcs.h | 11 +++++++++++ src/stmf0/ao_spi_stm.c | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/stmf0/ao_arch_funcs.h b/src/stmf0/ao_arch_funcs.h index defe2598..5a9cf6b5 100644 --- a/src/stmf0/ao_arch_funcs.h +++ b/src/stmf0/ao_arch_funcs.h @@ -74,6 +74,17 @@ ao_spi_speed(uint32_t hz) #define AO_SPI_INDEX(id) ((id) & AO_SPI_INDEX_MASK) #define AO_SPI_CONFIG(id) ((id) & AO_SPI_CONFIG_MASK) +#define AO_SPI_CPOL_BIT 4 +#define AO_SPI_CPHA_BIT 5 +#define AO_SPI_CPOL(id) ((uint32_t) (((id) >> AO_SPI_CPOL_BIT) & 1)) +#define AO_SPI_CPHA(id) ((uint32_t) (((id) >> AO_SPI_CPHA_BIT) & 1)) + +#define AO_SPI_MAKE_MODE(pol,pha) (((pol) << AO_SPI_CPOL_BIT) | ((pha) << AO_SPI_CPHA_BIT)) +#define AO_SPI_MODE_0 AO_SPI_MAKE_MODE(0,0) +#define AO_SPI_MODE_1 AO_SPI_MAKE_MODE(0,1) +#define AO_SPI_MODE_2 AO_SPI_MAKE_MODE(1,0) +#define AO_SPI_MODE_3 AO_SPI_MAKE_MODE(1,1) + uint8_t ao_spi_try_get(uint8_t spi_index, uint32_t speed, uint8_t task_id); diff --git a/src/stmf0/ao_spi_stm.c b/src/stmf0/ao_spi_stm.c index d83f0658..04827cf7 100644 --- a/src/stmf0/ao_spi_stm.c +++ b/src/stmf0/ao_spi_stm.c @@ -451,8 +451,8 @@ ao_spi_config(uint8_t spi_index, uint32_t speed) (1 << STM_SPI_CR1_SPE) | /* Enable SPI unit */ (speed << STM_SPI_CR1_BR) | /* baud rate to pclk/4 */ (1 << STM_SPI_CR1_MSTR) | - (0 << STM_SPI_CR1_CPOL) | /* Format 0 */ - (0 << STM_SPI_CR1_CPHA)); + (AO_SPI_CPOL(spi_index) << STM_SPI_CR1_CPOL) | /* Format */ + (AO_SPI_CPHA(spi_index) << STM_SPI_CR1_CPHA)); } uint8_t -- 2.30.2