Files
mkrtos-real/mkrtos_knl/arch/cortex-m3/sche.S
2024-03-31 16:06:11 +00:00

93 lines
1.7 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 sched_reset
.global PendSV_Handler
.type PendSV_Handler, %function
PendSV_Handler:
CPSID I
// pspmsp
MRS R0,PSP
MRS R1,MSP
// r4-r11
TST LR,#4
ITE EQ
MRSEQ r3, MSP
MRSNE r3, PSP
mov r2, lr
push {r4}
ldr r4, =sched_reset
ldr r4, [r4]
//! psp
CBZ r4, thread_sche
pop {r4}
SUB R3, R3, #0x20 //R3 -= 32
STM R3, {R4-R11}
//
TST LR,#4
ITTEE EQ
MSREQ MSP, r3
MOVEQ r1,r3
MSRNE PSP, r3
MOVNE r0,r3
b thread_sche_next
thread_sche:
pop {r4}
thread_sche_next:
// r0:psp r1:msp r2:(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,#4 //使
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
TST r3,#4 //使
IT EQ
BEQ super_mode//psp
B user_mode
user_mode:
//psp
MSR PSP, r0
//线
MOV R1,#1
MSR CONTROL, R1
//lr 21PSP
MOV LR,r3
B to_ret
super_mode: //msp
MSR MSP,R0
MOV LR,r3
//线
MOV R0,#0
MSR CONTROL, R0
to_ret:
push {r0-r3, lr}
bl mpu_switch_to
pop {r0-r3, lr}
CPSIE I
DSB
ISB
BX LR