📄 os_cpu_asm.s
字号:
;==========================================================================================
;--文件名:Os_cpu_asm.s
;--
;--功 能:
;--
;--作 者:陈 斌
;--
;--版本号:v1.00
;--
;--时 间:2006.12.31
;==========================================================================================
INCLUDE OS_ASM.INC
IMPORT OSIntOverRing
IMPORT OSIndexReady
IMPORT OSCourseSwRing
EXPORT TaskSwASM
EXPORT StartHighASM
EXPORT EnIRQASM
EXPORT DisIRQASM
EXPORT CPUstate
EXPORT CPUintTst
EXPORT Swap32
EXPORT Swap8
EXPORT IRQ_ISR
EXPORT FIQ_ISR
EXPORT SWI_ISR
CODE32
AREA vectors,CODE,READONLY
IrqOverAdd EQU IrqStackSpace - (IRQ_STACK_LENGTH-1+7) * 4
FirstIntAdd EQU IrqStackSpace - 8*4
IRQ_ISR
SUB LR, LR, #4
STMFD SP!, {R0-R3, R12, LR}
MRS R0, SPSR
STMFD SP!, {R0}
LDR R0, =IrqOverAdd
CMP R0, SP
BCC OS_IRQ_A
LDR r0,=OSIntOverRing
MOV lr, pc
BX r0
B OS_IRQ_B
OS_IRQ_A
LDR R0,=IRQ_Vect_Addr
LDR R0,[R0]
CMP R0,#0
BEQ OS_IRQ_B
MOV LR,PC
BX R0
LDR R0,=OSIndexReady
MOV LR,PC
BX R0
MRS R0,CPSR
ORR R0,R0,#0x80
MSR CPSR_c,R0
LDR R0,=FirstIntAdd
CMP R0,SP
BCS OS_IRQ_B
LDR R0, =pOSTcbCur
LDR R0, [R0]
LDR R1, =pOSHighRdy
LDR R1, [R1]
CMP R0, R1
BNE OS_IRQ_C
OS_IRQ_B
LDMFD SP!, {R0}
MSR SPSR_cxsf, R0
LDMFD SP!, {R0-R3, R12, PC}^
OS_IRQ_C
MOV R12, SP
ADD R12, R12, #7*4
LDR SP, =IrqStackSpace
MSR CPSR_c, #(SYS_MODE|IRQ_DIS)
LDMEA R12!, {R0,R1}
STMFD SP!, {R0,R1}
LDMEA R12!,{R0-R3}
STMFD SP!, {R0-R11}
LDMEA R12, {R0}
STMFD SP!, {R0}
STMFD SP!, {R14}
LDR R0, =pOSTcbCur
LDR R0,[R0]
STR SP,[R0]
SartNewCour
LDR SP, =pOSHighRdy
LDR SP,[SP]
LDR SP,[SP]
LDR r0,=OSCourseSwRing
MOV lr, pc
BX r0
LDMFD SP!,{R14}
MOV R0, SP
ADD SP, SP, #15*4
MSR CPSR_c, #(SVC_MODE|IRQ_DIS)
MOV SP, R0
LDMFD SP!,{R0}
MSR SPSR_cxsf, R0
LDMFD SP!,{R0-R12,PC}^
TaskSwCode
MOV R0, LR
MSR CPSR_c, #(SYS_MODE|IRQ_DIS)
STMFD SP!, {R0}
STMFD SP!,{R0-R12}
MSR CPSR_c, #(SVC_MODE|IRQ_DIS)
MRS R0, SPSR
MSR CPSR_c, #(SYS_MODE|IRQ_DIS)
STMFD SP!,{R0}
STMFD SP!,{R14}
LDR R0, =pOSTcbCur
LDR R0,[R0]
STR SP,[R0]
B SartNewCour
StartHighASM
STMFD SP!, {R0}
LDR R0, =_StartHighASM
SWI 0
_StartHighASM
MSR CPSR_c, #(SYS_MODE|IRQ_DIS)
B SartNewCour
TaskSwASM
STMFD SP!, {R0}
LDR R0, =TaskSwCode
B Swi_Code
EnIRQASM
STMFD SP!, {R0}
LDR R0, =EnIRQCode
B Swi_Code
EnIRQCode
MRS R0,SPSR
BIC R0,R0,#0x80
MSR SPSR_cxsf,R0
MOVS PC,LR
DisIRQASM
STMFD SP!, {R0}
LDR R0, =DisIRQCode
B Swi_Code
DisIRQCode
MRS R0,SPSR
ORR R0,R0,#0x80
MSR SPSR_cxsf,R0
MOVS PC,LR
Swi_Code
SWI 0
LDMFD SP!, {R0}
BX LR
SWI_ISR
MOV PC,R0
FIQ_ISR
STMFD SP!, {R0-R3, LR}
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
CPUstate
MRS R0,CPSR
BX LR
CPUintTst
MRS R0,CPSR
EOR R0,R0,#0x12
MOV R0,R0,LSL #24
BX LR
Swap32
SWP R0,R0,[R1]
BX LR
Swap8
SWPB R0,R0,[R1]
BX LR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -