Merge branch 'micropeak-1.1'
[fw/altos] / src / stm / ao_arch_funcs.h
index ca451a53239cf34c805bcfc7f89e1c3db1aae4bd..87bbe73e3b926a6b964d181f6dc5a60926cb4305 100644 (file)
@@ -210,6 +210,26 @@ ao_i2c_recv(void *block, uint16_t len, uint8_t i2c_index, uint8_t stop);
 void
 ao_i2c_init(void);
 
+/* ao_serial_stm.c */
+struct ao_stm_usart {
+       struct ao_fifo          rx_fifo;
+       struct ao_fifo          tx_fifo;
+       struct stm_usart        *reg;
+       uint8_t                 tx_started;
+};
+
+#if HAS_SERIAL_1
+extern struct ao_stm_usart     ao_stm_usart1;
+#endif
+
+#if HAS_SERIAL_2
+extern struct ao_stm_usart     ao_stm_usart2;
+#endif
+
+#if HAS_SERIAL_3
+extern struct ao_stm_usart     ao_stm_usart3;
+#endif
+
 #define ARM_PUSH32(stack, val) (*(--(stack)) = (val))
 
 static inline uint32_t
@@ -299,8 +319,10 @@ static inline void ao_arch_restore_stack(void) {
 
 #define ao_arch_isr_stack()
 
-#define ao_arch_cpu_idle() do {                        \
+#define ao_arch_wait_interrupt() do {                  \
                asm(".global ao_idle_loc\n\twfi\nao_idle_loc:");        \
+               ao_arch_release_interrupts();                           \
+               ao_arch_block_interrupts();                             \
        } while (0)
 
 #define ao_arch_critical(b) do {                               \