altos/stmf0: Add spi format configuration options
authorKeith Packard <keithp@keithp.com>
Sun, 2 Aug 2020 20:09:17 +0000 (13:09 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 22 Oct 2020 04:33:58 +0000 (21:33 -0700)
This lets different SPI devices use different SPI formats

Signed-off-by: Keith Packard <keithp@keithp.com>
src/stmf0/ao_arch_funcs.h
src/stmf0/ao_spi_stm.c

index defe259896e67b4eaf0f78ae0be48808dddcbede..5a9cf6b5258f87620bf70e9965f5b616431f383b 100644 (file)
@@ -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);
 
index d83f06580380014fb0a09583ee276e9b19dc5b49..04827cf72c6ee92c8e46bf072690f1a472ff6dfd 100644 (file)
@@ -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