summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--stmhal/pendsv.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/stmhal/pendsv.c b/stmhal/pendsv.c
index 4c2a14de1b..200d13a5a9 100644
--- a/stmhal/pendsv.c
+++ b/stmhal/pendsv.c
@@ -106,11 +106,14 @@ void pendsv_isr_handler(void) {
".no_obj:\n" // pendsv_object==NULL
"push {r4-r11, lr}\n"
"vpush {s16-s31}\n"
+ "mrs r5, primask\n" // save PRIMASK in r5
+ "cpsid i\n" // disable interrupts while we change stacks
"mov r0, sp\n" // pass sp to save
"mov r4, lr\n" // save lr because we are making a call
"bl pyb_thread_next\n" // get next thread to execute
"mov lr, r4\n" // restore lr
"mov sp, r0\n" // switch stacks
+ "msr primask, r5\n" // reenable interrupts
"vpop {s16-s31}\n"
"pop {r4-r11, lr}\n"
"bx lr\n" // return from interrupt; will return to new thread