📄 os_cpu_a.lst
字号:
ARM Macro Assembler Page 1
1 00000000 ;*******************************************************
**************************************************
2 00000000 ; uC/OS-II
3 00000000 ; The Real-Time
Kernel
4 00000000 ;
5 00000000 ; (c) Copyright 1992-2003, Jean
J. Labrosse, Weston, FL
6 00000000 ; All Rights Re
served
7 00000000 ;
8 00000000 ; ARM920T
Port
9 00000000 ; ADS v1.2 Co
mpiler
10 00000000 ; Samsung S3
C2440A
11 00000000 ;
12 00000000 ; File : os_cpu_a.s refrence to ucos application note
for arm AN-1014
13 00000000 ; Des : S3C2440 uC/OS-II Port
14 00000000 ; by : tangxiaofeng xidian 503
15 00000000 ; History :
16 00000000 ; OSCtxSw(), OSIntCtxSw() OSStartHighRdy() OS_CPU_IRQ_
ISR() OSTickISR()
17 00000000 ;*******************************************************
************************************************* */
18 00000000 PRESERVE8
19 00000000 4A000000
SRCPND EQU 0x4a000000 ; Source pending
20 00000000 4A000010
INTPND EQU 0x4a000010 ; Interrupt request
status
21 00000000
22 00000000 560000A8
EINTPEND
EQU 0x560000a8
23 00000000 4A000014
INTOFFSET
EQU 0x4a000014
24 00000000
25 00000000
26 00000000 00000010
USERMODE
EQU 0x10
27 00000000 00000011
FIQMODE EQU 0x11
28 00000000 00000012
IRQMODE EQU 0x12
29 00000000 00000013
SVCMODE EQU 0x13
30 00000000 00000017
ABORTMODE
EQU 0x17
31 00000000 0000001B
UNDEFMODE
EQU 0x1b
32 00000000 0000001F
ARM Macro Assembler Page 2
MODEMASK
EQU 0x1f
33 00000000 000000C0
NOINT EQU 0xc0
34 00000000
35 00000000 ;*******************************************************
**************************************************
36 00000000 ; EXPORT and EXTERNAL
REFERENCES
37 00000000 ;*******************************************************
**************************************************/
38 00000000 IMPORT OSRunning
39 00000000 IMPORT OSTCBCur
40 00000000 IMPORT OSTCBHighRdy
41 00000000 IMPORT OSPrioCur
42 00000000 IMPORT OSPrioHighRdy
43 00000000 IMPORT OSIntNesting
44 00000000
45 00000000 IMPORT IRQ_Dispatch
46 00000000 IMPORT OSIntEnter
47 00000000 IMPORT OSIntExit
48 00000000 IMPORT OSTaskSwHook
49 00000000 IMPORT OSTimeTick
50 00000000
51 00000000 ; IMPORT HandleEINT0
52 00000000
53 00000000
54 00000000 EXPORT OSStartHighRdy
55 00000000 EXPORT OSCtxSw
56 00000000 EXPORT OSTickISR
57 00000000 EXPORT OSIntCtxSw
58 00000000
59 00000000 EXPORT OSCPUSaveSR
60 00000000 EXPORT OSCPURestoreSR
61 00000000
62 00000000 EXPORT OS_CPU_IRQ_ISR
63 00000000
64 00000000
65 00000000 AREA UCOS_ARM, CODE, READONLY
66 00000000
67 00000000 ;*******************************************************
**************************************************
68 00000000 ; START MULTITA
SKING
69 00000000 ; void OSStartHigh
Rdy(void)
70 00000000 ;
71 00000000 ; The stack frame is assumed to look as follows:
72 00000000 ;
73 00000000 ; Entry Point(Task Name) (High memory)
74 00000000 ; LR(R14)
75 00000000 ; R12
76 00000000 ; R11
77 00000000 ; R10
78 00000000 ; R9
79 00000000 ; R8
80 00000000 ; R7
81 00000000 ; R6
82 00000000 ; R5
ARM Macro Assembler Page 3
83 00000000 ; R4
84 00000000 ; R3
85 00000000 ; R2
86 00000000 ; R1
87 00000000 ; R0 : argument
88 00000000 ; OSTCBHighRdy->OSTCBStkPtr --> CPSR (Low memory)
89 00000000 ;
90 00000000 ; Note : OSStartHighRdy() MUST:
91 00000000 ; a) Call OSTaskSwHook() then,
92 00000000 ; b) Set OSRunning to TRUE,
93 00000000 ; c) Switch to the highest priority task.
94 00000000 ;*******************************************************
*************************************************** */
95 00000000 OSStartHighRdy
96 00000000 ;-------------------------------------------------------
---------------------------
97 00000000 ; OSRunning = TRUE;
98 00000000 ;-------------------------------------------------------
---------------------------
99 00000000
100 00000000 E32FF0D3 MSR CPSR_cxsf,#SVCMODE|NOINT ;Switc
h to SVC mode with
IRQ&FIQ disable
101 00000004
102 00000004 EBFFFFFE BL OSTaskSwHook ;Call user define
Task switch hook
103 00000008
104 00000008 E59F0174 LDR R0, =OSRunning
; OSRunning =TRUE
105 0000000C E3A01001 MOV R1, #1
106 00000010 E5C01000 STRB R1, [R0]
107 00000014
108 00000014 ;-------------------------------------------------------
---------------------------
109 00000014 ; SP = OSTCBHighRdy->OSTCBStkPtr;
110 00000014 ;-------------------------------------------------------
---------------------------
111 00000014 E59F016C LDR R0, =OSTCBHighRdy
112 00000018 E5900000 LDR R0, [R0]
113 0000001C E590D000 LDR SP, [R0]
114 00000020
115 00000020 ;-------------------------------------------------------
---------------------------
116 00000020 ; Prepare to return to proper mode
117 00000020 ;-------------------------------------------------------
---------------------------
118 00000020 E8BD0001 LDMFD SP!, {R0}
119 00000024 E16FF000 MSR SPSR_cxsf, R0
120 00000028 E8FDDFFF LDMFD SP!, {R0-R12, LR, PC}^
121 0000002C
122 0000002C
123 0000002C ;*******************************************************
***************************************************
124 0000002C ; PERFORM A CONTEXT SWITC
H (From task level)
125 0000002C ; void OSCtxSw
(void)
126 0000002C ;
ARM Macro Assembler Page 4
127 0000002C ; Note(s): 1) Upon entry:
128 0000002C ; OSTCBCur points to the OS_TCB of
the task to suspend
129 0000002C ; OSTCBHighRdy points to the OS_TCB of
the task to resume
130 0000002C ;
131 0000002C ; 2) The stack frame of the task to suspend
looks as follows:
132 0000002C ;
133 0000002C ; PC
(High memory)
134 0000002C ; LR(R14)
135 0000002C ; R12
136 0000002C ; R11
137 0000002C ; R10
138 0000002C ; R9
139 0000002C ; R8
140 0000002C ; R7
141 0000002C ; R6
142 0000002C ; R5
143 0000002C ; R4
144 0000002C ; R3
145 0000002C ; R2
146 0000002C ; R1
147 0000002C ; R0
148 0000002C ; OSTCBCur->OSTCBStkPtr ----> CPSR (Low memory
)
149 0000002C ;
150 0000002C ;
151 0000002C ; 3) The stack frame of the task to resume
looks as follows:
152 0000002C ;
153 0000002C ; PC (High memory)
154 0000002C ; LR(R
14)
155 0000002C ; R12
156 0000002C ; R11
157 0000002C ; R10
158 0000002C ; R9
159 0000002C ; R8
160 0000002C ; R7
161 0000002C ; R6
162 0000002C ; R5
163 0000002C ; R4
164 0000002C ; R3
165 0000002C ; R2
166 0000002C ; R1
167 0000002C ; R0
168 0000002C ; OSTCBHighRdy->OSTCBStkPtr ----> CPSR (Low mem
ory)
169 0000002C ;*******************************************************
**************************************************/
170 0000002C OSCtxSw
171 0000002C
172 0000002C E92D4000 STMFD SP!, {LR} ;PC
173 00000030 E92D5FFF STMFD SP!, {R0-R12, LR} ;R0-R12 LR
174 00000034 E10F0000 MRS R0, CPSR ;Push CPSR
175 00000038 E92D0001 STMFD SP!, {R0}
176 0000003C
ARM Macro Assembler Page 5
177 0000003C ;-------------------------------------------------------
---------------------------
178 0000003C ; OSTCBCur->OSTCBStkPtr = SP
179 0000003C ;-------------------------------------------------------
---------------------------
180 0000003C E59F0148 LDR R0, =OSTCBCur
181 00000040 E5900000 LDR R0, [R0]
182 00000044 E580D000 STR SP, [R0]
183 00000048
184 00000048 ;-------------------------------------------------------
---------------------------
185 00000048 ; OSTaskSwHook();
186 00000048 ;-------------------------------------------------------
--------------------------
187 00000048 EBFFFFFE BL OSTaskSwHook
188 0000004C
189 0000004C ;-------------------------------------------------------
---------------------------
190 0000004C ; OSTCBCur = OSTCBHighRdy;
191 0000004C ;-------------------------------------------------------
---------------------------
192 0000004C E59F0134 LDR R0, =OSTCBHighRdy
193 00000050 E59F1134 LDR R1, =OSTCBCur
194 00000054 E5900000 LDR R0, [R0]
195 00000058 E5810000 STR R0, [R1]
196 0000005C
197 0000005C ;-------------------------------------------------------
---------------------------
198 0000005C ; OSPrioCur = OSPrioHighRdy;
199 0000005C ;-------------------------------------------------------
---------------------------
200 0000005C E59F012C LDR R0, =OSPrioHighRdy
201 00000060 E59F112C LDR R1, =OSPrioCur
202 00000064 E5D00000 LDRB R0, [R0]
203 00000068 E5C10000 STRB R0, [R1]
204 0000006C
205 0000006C ;-------------------------------------------------------
---------------------------
206 0000006C ; OSTCBHighRdy->OSTCBStkPtr;
207 0000006C ;-------------------------------------------------------
---------------------------
208 0000006C E59F0114 LDR R0, =OSTCBHighRdy
209 00000070 E5900000 LDR R0, [R0]
210 00000074 E590D000 LDR SP, [R0]
211 00000078
212 00000078 ;-------------------------------------------------------
---------------------------
213 00000078 ;Restore New task context
214 00000078 ;-------------------------------------------------------
---------------------------
215 00000078 E8BD0001 LDMFD SP!, {R0} ;POP CPSR
216 0000007C E16FF000 MSR SPSR_cxsf, R0
217 00000080 E8FDDFFF LDMFD SP!, {R0-R12, LR, PC}^
218 00000084
219 00000084
220 00000084 ;*******************************************************
**************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -