altos: Set APRS deviation to 3kHz
[fw/altos] / src / stm / ao_arch_funcs.h
index 87bbe73e3b926a6b964d181f6dc5a60926cb4305..f3d68202303a1844e180b7b846873999275aa417 100644 (file)
@@ -23,7 +23,7 @@
 
 /* PCLK is set to 16MHz (HCLK 32MHz, APB prescaler 2) */
 
-#define AO_SPI_SPEED_8MHz      STM_SPI_CR1_BR_PCLK_2   /* This doesn't appear to work */
+#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
@@ -32,7 +32,7 @@
 #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_4MHz
+#define AO_SPI_SPEED_FAST      AO_SPI_SPEED_8MHz
 
 /* Companion bus wants something no faster than 200kHz */
 
@@ -317,6 +317,19 @@ static inline void ao_arch_restore_stack(void) {
        asm("bx lr");
 }
 
+#define HAS_ARCH_START_SCHEDULER       1
+
+static inline void ao_arch_start_scheduler(void) {
+       uint32_t        sp;
+       uint32_t        control;
+
+       asm("mrs %0,msp" : "=&r" (sp));
+       asm("msr psp,%0" : : "r" (sp));
+       asm("mrs %0,control" : "=&r" (control));
+       control |= (1 << 1);
+       asm("msr control,%0" : : "r" (control));
+}
+
 #define ao_arch_isr_stack()
 
 #define ao_arch_wait_interrupt() do {                  \