altosui: Add config and pyro tabs to graph widget
[fw/altos] / src / stm32l0 / ao_arch_funcs.h
index 5b23081fc6787e6621015936690ac7f1a369db7a..5f0f07dea9ed0d7a6ce3ce2a67170beebf55c7d9 100644 (file)
 
 /* PCLK is set to 16MHz (HCLK 32MHz, APB prescaler 2) */
 
-#define AO_SPI_SPEED_8MHz      STM_SPI_CR1_BR_PCLK_2
-#define AO_SPI_SPEED_4MHz      STM_SPI_CR1_BR_PCLK_4
-#define AO_SPI_SPEED_2MHz      STM_SPI_CR1_BR_PCLK_8
-#define AO_SPI_SPEED_1MHz      STM_SPI_CR1_BR_PCLK_16
-#define AO_SPI_SPEED_500kHz    STM_SPI_CR1_BR_PCLK_32
-#define AO_SPI_SPEED_250kHz    STM_SPI_CR1_BR_PCLK_64
-#define AO_SPI_SPEED_125kHz    STM_SPI_CR1_BR_PCLK_128
-#define AO_SPI_SPEED_62500Hz   STM_SPI_CR1_BR_PCLK_256
-
-#define AO_SPI_SPEED_FAST      AO_SPI_SPEED_8MHz
+#define _AO_SPI_SPEED_8MHz     STM_SPI_CR1_BR_PCLK_2
+#define _AO_SPI_SPEED_4MHz     STM_SPI_CR1_BR_PCLK_4
+#define _AO_SPI_SPEED_2MHz     STM_SPI_CR1_BR_PCLK_8
+#define _AO_SPI_SPEED_1MHz     STM_SPI_CR1_BR_PCLK_16
+#define _AO_SPI_SPEED_500kHz   STM_SPI_CR1_BR_PCLK_32
+#define _AO_SPI_SPEED_250kHz   STM_SPI_CR1_BR_PCLK_64
+#define _AO_SPI_SPEED_125kHz   STM_SPI_CR1_BR_PCLK_128
+#define _AO_SPI_SPEED_62500Hz  STM_SPI_CR1_BR_PCLK_256
 
 /* Companion bus wants something no faster than 200kHz */
 
-#define AO_SPI_SPEED_200kHz    AO_SPI_SPEED_125kHz
+static inline uint32_t
+ao_spi_speed(int index, uint32_t hz)
+{
+       (void) index;
+       if (hz >= 4000000) return _AO_SPI_SPEED_4MHz;
+       if (hz >= 2000000) return _AO_SPI_SPEED_2MHz;
+       if (hz >= 1000000) return _AO_SPI_SPEED_1MHz;
+       if (hz >=  500000) return _AO_SPI_SPEED_500kHz;
+       if (hz >=  250000) return _AO_SPI_SPEED_250kHz;
+       if (hz >=  125000) return _AO_SPI_SPEED_125kHz;
+       return _AO_SPI_SPEED_62500Hz;
+}
 
 #define AO_SPI_CPOL_BIT                4
 #define AO_SPI_CPHA_BIT                5
 
 #define AO_SPI_CONFIG_1                0x00
 #define AO_SPI_1_CONFIG_PA5_PA6_PA7    AO_SPI_CONFIG_1
-#define AO_SPI_2_CONFIG_PB13_PB14_PB15 AO_SPI_CONFIG_1
 
 #define AO_SPI_CONFIG_2                0x04
-#define AO_SPI_1_CONFIG_PB3_PB4_PB5    AO_SPI_CONFIG_2
+#define AO_SPI_1_CONFIG_PA12_PA13_PA14 AO_SPI_CONFIG_2
 #define AO_SPI_2_CONFIG_PD1_PD3_PD4    AO_SPI_CONFIG_2
 
 #define AO_SPI_CONFIG_3                0x08
-#define AO_SPI_1_CONFIG_PE13_PE14_PE15 AO_SPI_CONFIG_3
+#define AO_SPI_1_CONFIG_PB3_PB4_PB5    AO_SPI_CONFIG_3
 
 #define AO_SPI_CONFIG_NONE     0x0c
 
@@ -59,8 +67,8 @@
 #define AO_SPI_CONFIG_MASK     0x0c
 
 #define AO_SPI_1_PA5_PA6_PA7   (STM_SPI_INDEX(1) | AO_SPI_1_CONFIG_PA5_PA6_PA7)
+#define AO_SPI_1_PA12_PA13_PA14        (STM_SPI_INDEX(1) | AO_SPI_1_CONFIG_PA12_PA13_PA14)
 #define AO_SPI_1_PB3_PB4_PB5   (STM_SPI_INDEX(1) | AO_SPI_1_CONFIG_PB3_PB4_PB5)
-#define AO_SPI_1_PE13_PE14_PE15        (STM_SPI_INDEX(1) | AO_SPI_1_CONFIG_PE13_PE14_PE15)
 
 #define AO_SPI_2_PB13_PB14_PB15        (STM_SPI_INDEX(2) | AO_SPI_2_CONFIG_PB13_PB14_PB15)
 #define AO_SPI_2_PD1_PD3_PD4   (STM_SPI_INDEX(2) | AO_SPI_2_CONFIG_PD1_PD3_PD4)
@@ -104,16 +112,8 @@ ao_spi_stop_bytes(uint8_t spi_index);
 static inline void
 ao_spi_send_byte(uint8_t byte, uint8_t spi_index)
 {
-       struct stm_spi  *stm_spi;
-
-       switch (AO_SPI_INDEX(spi_index)) {
-       case 0:
-               stm_spi = &stm_spi1;
-               break;
-       case 1:
-               stm_spi = &stm_spi2;
-               break;
-       }
+       struct stm_spi  *stm_spi = &stm_spi1;
+       (void) spi_index;
 
        while (!(stm_spi->sr & (1 << STM_SPI_SR_TXE)))
                ;
@@ -126,32 +126,21 @@ ao_spi_send_byte(uint8_t byte, uint8_t spi_index)
 static inline uint8_t
 ao_spi_recv_byte(uint8_t spi_index)
 {
-       struct stm_spi  *stm_spi;
-
-       switch (AO_SPI_INDEX(spi_index)) {
-       case 0:
-               stm_spi = &stm_spi1;
-               break;
-       case 1:
-               stm_spi = &stm_spi2;
-               break;
-       }
+       struct stm_spi  *stm_spi = &stm_spi1;
+       (void) spi_index;
 
        while (!(stm_spi->sr & (1 << STM_SPI_SR_TXE)))
                ;
        stm_spi->dr = 0xff;
        while (!(stm_spi->sr & (1 << STM_SPI_SR_RXNE)))
                ;
-       return stm_spi->dr;
+       return (uint8_t) stm_spi->dr;
 }
 
 void
 ao_spi_recv(void *block, uint16_t len, uint8_t spi_index);
 
-void
-ao_spi_duplex(const void *out, void *in, uint16_t len, uint8_t spi_index);
-
-extern uint16_t        ao_spi_speed[STM_NUM_SPI];
+#define AO_SPI_DUPLEX  0
 
 void
 ao_spi_init(void);
@@ -341,7 +330,7 @@ void
 ao_dma_done_transfer(uint8_t index);
 
 void
-ao_dma_alloc(uint8_t index);
+ao_dma_alloc(uint8_t index, uint8_t cselr);
 
 void
 ao_dma_init(void);
@@ -397,6 +386,8 @@ struct ao_stm_usart {
 #endif
 };
 
+#include <ao_lpuart.h>
+
 void
 ao_debug_out(char c);
 
@@ -602,4 +593,7 @@ ao_arch_wait_interrupt(void) {
 
 void start(void);
 
+bool
+ao_storage_device_is_erased(uint32_t pos);
+
 #endif /* _AO_ARCH_FUNCS_H_ */