X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm32l0%2Fao_arch_funcs.h;h=5f0f07dea9ed0d7a6ce3ce2a67170beebf55c7d9;hb=HEAD;hp=5b23081fc6787e6621015936690ac7f1a369db7a;hpb=d907b0fe40d31995848e5b207009ba230da2e36e;p=fw%2Faltos diff --git a/src/stm32l0/ao_arch_funcs.h b/src/stm32l0/ao_arch_funcs.h index 5b23081f..5f0f07de 100644 --- a/src/stm32l0/ao_arch_funcs.h +++ b/src/stm32l0/ao_arch_funcs.h @@ -24,34 +24,42 @@ /* 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 + 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_ */