first cut at turnon scripts for EasyTimer v2
[fw/altos] / src / stm / ao_arch_funcs.h
index 8f4f6cd4ce9e70658a64a352ab81b7a3ca015df2..0f2f36a6e40aa0a6a64b147c02508ade2d2e380c 100644 (file)
@@ -34,8 +34,9 @@
 #define _AO_SPI_SPEED_62500Hz  STM_SPI_CR1_BR_PCLK_256
 
 static inline uint32_t
-ao_spi_speed(uint32_t hz)
+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;
@@ -92,6 +93,9 @@ ao_spi_get(uint8_t spi_index, uint32_t speed);
 void
 ao_spi_put(uint8_t spi_index);
 
+void
+ao_spi_put_pins(uint8_t spi_index);
+
 void
 ao_spi_send(const void *block, uint16_t len, uint8_t spi_index);
 
@@ -148,7 +152,7 @@ ao_spi_recv_byte(uint8_t spi_index)
        stm_spi->dr = 0xff;
        while (!(stm_spi->sr & (1 << STM_SPI_SR_RXNE)))
                ;
-       return stm_spi->dr;
+       return (uint8_t) stm_spi->dr;
 }
 
 void
@@ -182,8 +186,8 @@ ao_spi_try_get_mask(struct stm_gpio *reg, uint16_t mask, uint8_t bus, uint32_t s
                ao_spi_put(bus);                \
        } while (0)
 
-#define ao_spi_get_bit(reg,bit,bus,speed) ao_spi_get_mask(reg,(1<<bit),bus,speed)
-#define ao_spi_put_bit(reg,bit,bus) ao_spi_put_mask(reg,(1<<bit),bus)
+#define ao_spi_get_bit(reg,bit,bus,speed) ao_spi_get_mask(reg,1<<(bit),bus,speed)
+#define ao_spi_put_bit(reg,bit,bus) ao_spi_put_mask(reg,1<<(bit),bus)
 
 #define ao_enable_port(port) do {                                      \
                if ((port) == &stm_gpioa)                               \
@@ -200,15 +204,15 @@ ao_spi_try_get_mask(struct stm_gpio *reg, uint16_t mask, uint8_t bus, uint32_t s
 
 #define ao_disable_port(port) do {                                     \
                if ((port) == &stm_gpioa)                               \
-                       stm_rcc.ahbenr &= ~(1 << STM_RCC_AHBENR_GPIOAEN); \
+                       stm_rcc.ahbenr &= ~(1UL << STM_RCC_AHBENR_GPIOAEN); \
                else if ((port) == &stm_gpiob)                          \
-                       stm_rcc.ahbenr &= ~(1 << STM_RCC_AHBENR_GPIOBEN); \
+                       stm_rcc.ahbenr &= ~(1UL << STM_RCC_AHBENR_GPIOBEN); \
                else if ((port) == &stm_gpioc)                          \
-                       stm_rcc.ahbenr &= ~(1 << STM_RCC_AHBENR_GPIOCEN); \
+                       stm_rcc.ahbenr &= ~(1UL << STM_RCC_AHBENR_GPIOCEN); \
                else if ((port) == &stm_gpiod)                          \
-                       stm_rcc.ahbenr &= ~(1 << STM_RCC_AHBENR_GPIODEN); \
+                       stm_rcc.ahbenr &= ~(1UL << STM_RCC_AHBENR_GPIODEN); \
                else if ((port) == &stm_gpioe)                          \
-                       stm_rcc.ahbenr &= ~(1 << STM_RCC_AHBENR_GPIOEEN); \
+                       stm_rcc.ahbenr &= ~(1UL << STM_RCC_AHBENR_GPIOEEN); \
        } while (0)
 
 
@@ -239,7 +243,7 @@ ao_spi_try_get_mask(struct stm_gpio *reg, uint16_t mask, uint8_t bus, uint32_t s
 #define AO_OUTPUT_PUSH_PULL    STM_OTYPER_PUSH_PULL
 #define AO_OUTPUT_OPEN_DRAIN   STM_OTYPER_OPEN_DRAIN
 
-#define ao_gpio_set_output_mode(port,bit,mode) \
+#define ao_gpio_set_output_mode(port,pin,mode) \
        stm_otyper_set(port, pin, mode)
 
 #define ao_gpio_set_mode(port,bit,mode) do {                           \
@@ -562,8 +566,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