altos: Massive product config cleanup
[fw/altos] / src / stm / ao_arch.h
index ce3a22e262e6ce8c7a7c330c3aa66b732b9b4620..62af86f776faba6cd1ac17c64256b4336e6c06aa 100644 (file)
@@ -42,7 +42,9 @@
 #define __interrupt(n)
 #define __at(n)
 
-#define ao_arch_reboot()       /* XXX */
+#define CORTEX_M3_AIRCR                ((uint32_t *) 0xe000ed0c)
+
+#define ao_arch_reboot()       (*((uint32_t *) 0xe000ed0c) = 0x05fa0004)
 
 #define ao_arch_nop()          asm("nop")
 
@@ -148,7 +150,30 @@ extern const uint16_t ao_serial_number;
 /*
  * For now, we're running at a weird frequency
  */
-#define STM_APB1       (16000000 * 6 / 4)
+
+#if AO_HSE
+#define AO_PLLSRC      AO_HSE
+#else
+#define AO_PLLSRC      STM_HSI_FREQ
+#endif
+
+#define AO_PLLVCO      (AO_PLLSRC * AO_PLLMUL)
+#define AO_SYSCLK      (AO_PLLVCO / AO_PLLDIV)
+#define AO_HCLK                (AO_SYSCLK / AO_AHB_PRESCALER)
+#define AO_PCLK1       (AO_HCLK / AO_APB1_PRESCALER)
+#define AO_PCLK2       (AO_HCLK / AO_APB2_PRESCALER)
+
+#if AO_APB1_PRESCALER == 1
+#define AO_TIM23467_CLK                AO_PCLK1
+#else
+#define AO_TIM23467_CLK                (2 * AO_PCLK1)
+#endif
+
+#if AO_APB2_PRESCALER == 1
+#define AO_TIM91011_CLK                AO_PCLK2
+#else
+#define AO_TIM91011_CLK                (2 * AO_PCLK2)
+#endif
 
 void ao_lcd_stm_init(void);
 
@@ -156,8 +181,6 @@ void ao_lcd_font_init(void);
 
 void ao_lcd_font_string(char *s);
 
-#define USE_SERIAL_STDIN       (USE_SERIAL_1_STDIN + USE_SERIAL_2_STDIN + USE_SERIAL_3_STDIN)
-
 char
 ao_serial1_getchar(void);