X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm%2Fao_arch_funcs.h;h=2c017c79f0191b5b5395f66f508a26748cb048db;hb=04759dddeb29e4de9f7e6b3673dc06c633fa2369;hp=6fcfd5f85a1187e5e3018dd1827ef2e7e507acb4;hpb=7c9a111ac1c88467ce28e03b4a9d3eabc9d7015b;p=fw%2Faltos diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h index 6fcfd5f8..2c017c79 100644 --- a/src/stm/ao_arch_funcs.h +++ b/src/stm/ao_arch_funcs.h @@ -278,14 +278,35 @@ ao_i2c_recv(void *block, uint16_t len, uint8_t i2c_index, uint8_t stop); void ao_i2c_init(void); +#if USE_SERIAL_1_SW_FLOW || USE_SERIAL_2_SW_FLOW || USE_SERIAL_3_SW_FLOW +#define HAS_SERIAL_SW_FLOW 1 +#else +#define HAS_SERIAL_SW_FLOW 0 +#endif + +#if USE_SERIAL_1_FLOW && !USE_SERIAL_1_SW_FLOW || USE_SERIAL_2_FLOW && !USE_SERIAL_2_SW_FLOW || USE_SERIAL_3_FLOW && !USE_SERIAL_3_SW_FLOW +#define HAS_SERIAL_HW_FLOW 1 +#else +#define HAS_SERIAL_HW_FLOW 0 +#endif + /* 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; uint8_t tx_running; uint8_t draining; +#if HAS_SERIAL_SW_FLOW + /* RTS - 0 if we have FIFO space, 1 if not + * CTS - 0 if we can send, 0 if not + */ + struct stm_gpio *gpio_rts; + struct stm_gpio *gpio_cts; + uint8_t pin_rts; + uint8_t pin_cts; + uint8_t rts; +#endif }; #if HAS_SERIAL_1 @@ -370,13 +391,6 @@ static inline void ao_arch_save_stack(void) { static inline void ao_arch_restore_stack(void) { uint32_t sp; - uint32_t control; - - asm("mrs %0,control" : "=&r" (control)); - control |= (1 << 1); - asm("msr control,%0" : : "r" (control)); - asm("isb"); - sp = (uint32_t) ao_cur_task->sp; /* Switch stacks */ @@ -433,14 +447,7 @@ static inline void ao_arch_start_scheduler(void) { } #endif -static inline void ao_arch_isr_stack(void) { - uint32_t control; - - asm("mrs %0,control" : "=&r" (control)); - control &= ~(1 << 1); - asm("msr control,%0" : : "r" (control)); - asm("isb"); -} +#define ao_arch_isr_stack() #endif