📄 os_cpu_a.s
字号:
;*********************************************************************************************************
; uC/OS-II
; The Real-Time Kernel
;
; (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
; All Rights Reserved
;
; ARM920T Port
; ADS v1.2 Compiler
; Samsung S3C2440A
;
; File : os_cpu_a.s
; Des : S3C2440侩 uC/OS-II Port
; by : ???
; History :
; 2005.02.13: KInG(kimingoo@hotmail.com):
; 1. uC/OS-II 2/E 锅开辑狼 狼荤内靛甫 林籍栏肺 崔绊 鉴辑措肺 犁 硅摹 窃.
; 2. 祈狼客 犬厘阑 困秦 C家胶肺 累己登绰 何盒档 狼荤内靛俊 嘎苗 绢祭喉府 内靛肺 累己窃.
; Note: ARM侩 器飘绰 辑利狼 狼荤内靛俊辑 割啊瘤绰 弊措肺 累己 且 荐 绝澜阑 林狼!!
; 2005.07.30: KInG(kimingoo@hotmail.com): OSCtxSw(), OSIntCtxSw() 鸥捞撇 林籍 荐沥
;*********************************************************************************************************
SRCPND EQU 0x4a000000 ; Source pending
INTPND EQU 0x4a000010 ; Interrupt request status
;*********************************************************************************************************
; EXPORT and EXTERNAL REFERENCES
;*********************************************************************************************************
IMPORT OSRunning
IMPORT OSTCBCur
IMPORT OSTCBHighRdy
IMPORT OSPrioCur
IMPORT OSPrioHighRdy
IMPORT OSIntNesting
IMPORT OSIntCtxSwFlag
IMPORT OSIntEnter
IMPORT OSIntExit
IMPORT OSTaskSwHook
IMPORT OSTimeTick
EXPORT OSStartHighRdy
EXPORT OSCtxSw
EXPORT OSTickISR
EXPORT OSIntCtxSw
EXPORT OS_IntCtxSw
EXPORT OSCPUSaveSR
EXPORT OSCPURestoreSR
AREA UCOS_ARM, CODE, READONLY
;*********************************************************************************************************
; START MULTITASKING
; void OSStartHighRdy(void)
;
; The stack frame is assumed to look as follows:
;
; Entry Point(Task Name) (High memory)
; LR(R14)
; R12
; R11
; R10
; R9
; R8
; R7
; R6
; R5
; R4
; R3
; R2
; R1
; R0 : argument
; CPSR
; OSTCBHighRdy->OSTCBStkPtr --> SPSR (Low memory)
;
; Note : OSStartHighRdy() MUST:
; a) Call OSTaskSwHook() then,
; b) Set OSRunning to TRUE,
; c) Switch to the highest priority task.
;*********************************************************************************************************
OSStartHighRdy
;----------------------------------------------------------------------------------
; 荤侩磊 沥狼 窃荐 OSTaskSwHook() 阑 龋免茄促;
; OSRunning = TRUE;
;----------------------------------------------------------------------------------
BL OSTaskSwHook
LDR R0, =OSRunning ; Indicate that multitasking has started
MOV R1, #1
STRB R1, [R0]
;----------------------------------------------------------------------------------
; 犁积且 怕胶农狼 胶琶 器牢磐甫 掘绢柯促:
; Stack pointer = OSTCBHighRdy->OSTCBStkPtr;
;----------------------------------------------------------------------------------
LDR R0, =OSTCBHighRdy
LDR R0, [R0]
LDR SP, [R0]
;----------------------------------------------------------------------------------
; 货 怕胶农狼 胶琶栏肺何磐 葛电 饭瘤胶磐甫 汗备茄促;
;----------------------------------------------------------------------------------
LDMFD SP!, {R0}
MSR SPSR_cxsf, R0
LDMFD SP!, {R0}
MSR CPSR_cxsf, R0
LDMFD SP!, {R0-R12, LR, PC}
;*********************************************************************************************************
; PERFORM A CONTEXT SWITCH (From task level)
; void OSCtxSw(void)
;
; Note(s): 1) Upon entry:
; OSTCBCur points to the OS_TCB of the task to suspend
; OSTCBHighRdy points to the OS_TCB of the task to resume
;
; 2) The stack frame of the task to suspend looks as follows:
;
; LR(R14) (High memory)
; R12
; R11
; R10
; R9
; R8
; R7
; R6
; R5
; R4
; R3
; R2
; R1
; R0
; CPSR
; OSTCBCur->OSTCBStkPtr ----> SPSR (Low memory)
;
;
; 3) The stack frame of the task to resume looks as follows:
;
; LR(R14) (High memory)
; R12
; R11
; R10
; R9
; R8
; R7
; R6
; R5
; R4
; R3
; R2
; R1
; R0
; CPSR
; OSTCBHighRdy->OSTCBStkPtr ----> SPSR (Low memory)
;*********************************************************************************************************
OSCtxSw
;----------------------------------------------------------------------------------
; 橇肺技辑 饭瘤胶磐 历厘;
;----------------------------------------------------------------------------------
STMFD SP!, {LR}
STMFD SP!, {R0-R12, LR}
MRS R0, CPSR
STMFD SP!, {R0}
MRS R0, SPSR
STMFD SP!, {R0}
;----------------------------------------------------------------------------------
; 泅犁 怕胶农狼 胶琶 器牢磐甫 泅犁 怕胶农狼 怕胶农 牧飘费 喉废俊 历厘:
; OSTCBCur->OSTCBStkPtr = 胶琶 器牢磐;
;----------------------------------------------------------------------------------
LDR R0, =OSTCBCur
LDR R0, [R0]
STR SP, [R0]
;----------------------------------------------------------------------------------
; OSTaskSwHook();
;----------------------------------------------------------------------------------
BL OSTaskSwHook
;----------------------------------------------------------------------------------
; OSTCBCur = OSTCBHighRdy;
;----------------------------------------------------------------------------------
LDR R0, =OSTCBHighRdy
LDR R1, =OSTCBCur
LDR R0, [R0]
STR R0, [R1]
;----------------------------------------------------------------------------------
; OSPrioCur = OSPrioHighRdy;
;----------------------------------------------------------------------------------
LDR R0, =OSPrioHighRdy
LDR R1, =OSPrioCur
LDRB R0, [R0]
STRB R0, [R1]
;----------------------------------------------------------------------------------
; 犁角青且 怕胶农狼 胶琶 器牢磐 汗备:
; 胶琶 器牢磐 = OSTCBHighRdy->OSTCBStkPtr;
;----------------------------------------------------------------------------------
LDR R0, =OSTCBHighRdy
LDR R0, [R0]
LDR R0, [R0]
MOV SP, R0
;----------------------------------------------------------------------------------
; 犁角青且 怕胶农狼 胶琶栏肺何磐 橇肺技辑 饭瘤胶磐 汗备;
;----------------------------------------------------------------------------------
LDMFD SP!, {R0}
MSR SPSR_cxsf, R0
LDMFD SP!, {R0}
MSR CPSR_cxsf, R0
LDMFD SP!, {R0-R12, LR, PC}
;*********************************************************************************************************
; TICK HANDLER
;
; Description:
; This handles all the Timer4(INT_TIMER4) interrupt which is used to generate the uC/OS-II tick.
;*********************************************************************************************************
OSTickISR
;----------------------------------------------------------------------------------
; 橇肺技辑 饭瘤胶磐 历厘
;----------------------------------------------------------------------------------
STMFD SP!, {R0-R3, R12, LR}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -