X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fstm%2Fao_arch_funcs.h;h=f3d68202303a1844e180b7b846873999275aa417;hb=1e9b405e939136d25d937334d1f14f06c7d6127b;hp=d17793076f38ca177e60f66082288c607044d1b5;hpb=760b1f02c178c600226f39b5e66d8cbadbf4a29b;p=fw%2Faltos diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h index d1779307..f3d68202 100644 --- a/src/stm/ao_arch_funcs.h +++ b/src/stm/ao_arch_funcs.h @@ -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 { \