X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm%2Fao_arch_funcs.h;h=083f7a2beb7ad394e57c200d9b1f13dd2ff5f020;hb=a6baf04bae3fe6a6b3da2f456419732ffeb4d056;hp=ad46ef32babf9fd52b0f9d58f08fd09e6f534275;hpb=d6c3c3618a708d2a1a7948454710e6ae21c2a426;p=fw%2Faltos diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h index ad46ef32..083f7a2b 100644 --- a/src/stm/ao_arch_funcs.h +++ b/src/stm/ao_arch_funcs.h @@ -24,20 +24,26 @@ /* 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_8MHz STM_SPI_CR1_BR_PCLK_2 /* too fast to use safely */ +#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 - -/* Companion bus wants something no faster than 200kHz */ - -#define AO_SPI_SPEED_200kHz AO_SPI_SPEED_125kHz +static inline uint32_t +ao_spi_speed(uint32_t hz) +{ + 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 @@ -151,8 +157,6 @@ 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]; - void ao_spi_init(void); @@ -473,9 +477,8 @@ ao_arch_irq_check(void) { #if HAS_TASK static inline void -ao_arch_init_stack(struct ao_task *task, void *start) +ao_arch_init_stack(struct ao_task *task, uint32_t *sp, void *start) { - uint32_t *sp = &task->stack32[AO_STACK_SIZE>>2]; uint32_t a = (uint32_t) start; int i; @@ -559,8 +562,8 @@ ao_validate_cur_stack(void) asm("mrs %0,psp" : "=&r" (psp)); if (ao_cur_task && - psp <= ao_cur_task->stack && - psp >= ao_cur_task->stack - 256) + (psp <= ao_cur_task->stack8 || + psp >= ao_cur_task->stack8 + AO_STACK_SIZE)) ao_panic(AO_PANIC_STACK); } #endif