Files
mkrtos-real/mkrtos_knl/arch/armv7m/sche.S
2023-08-26 23:12:31 +08:00

84 lines
1.6 KiB
ArmAsm
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.syntax unified
.cpu cortex-m3
.thumb
.global mpu_switch_to
.global PendSV_Handler
.type PendSV_Handler, %function
PendSV_Handler:
CPSID I
// pspmsp
MRS R0,PSP
MRS R1,MSP
// r4-r11
TST LR,#4
ITTEE EQ
MRSEQ r3, MSP
MOVEQ r2, #0 //!< r2使pspmsp
MRSNE r3, PSP
MOVNE r2, #1
//! psp
//CMP r0,#0
//CBZ r0, thread_sche
SUB R3, R3, #0x20 //R3 -= 32
STM R3, {R4-R11}
//
TST LR,#4
ITE EQ
MSREQ MSP, r3
MSRNE PSP, r3
thread_sche:
MOV r0, r3
MOV r1, r2
// r0:sp r1:(0msp 1 psp)
LDR.w r3,=schde_to
BLX r3
// r1 psp r2 msp
lDRD r1,r2,[r0]
//使r3 0msp 1ps
LDR r3,[R0,#8]
TST r3,#1 //使
ITE EQ
MOVEQ R0,R2
MOVNE R0,R1 //使psp
LDM r0, {R4-R11} //r4-r11
ADDS r0, r0, #0x20 //R0 += 0x20
//
MSR MSP,R2
MSR PSP,R1
//
CMP r3,#1
BEQ user_mode//psp
B super_mode
user_mode:
//psp
MSR PSP, r0
//线
MOV R1,#1
MSR CONTROL, R1
//lr 21PSP
MOV LR,#0xfffffffd
B to_ret
super_mode: //msp
MSR MSP,R0
MOV LR,#0xfffffff9
//线
MOV R0,#0
MSR CONTROL, R0
to_ret:
CPSIE I
push {r0-r3, lr}
bl mpu_switch_to
pop {r0-r3, lr}
BX LR