📄 os_cpu_a.lst
字号:
270 00000030 08002DE9 STMFD SP!, {R3} ;
Push task's CPSR (i.e.
IRQ's SPSR)
271 00000034
272 00000034 ;
HANDLE NESTING COUNTER
273 00000034 ........ LDR R0, ??OS_IntNesting ;
OSIntNesting++;
274 00000038 0010D0E5 LDRB R1, [R0]
275 0000003C 011081E2 ADD R1, R1,#1
276 00000040 0010C0E5 STRB R1, [R0]
277 00000044
278 00000044 010051E3 CMP R1, #1 ;
if (OSIntNesting == 1)
{
279 00000048 0200001A BNE OS_CPU_IRQ_ISR_1
280 0000004C
281 0000004C ........ LDR R4, ??OS_TCBCur ;
OSTCBCur->OSTCBStkPtr =
SP
282 00000050 005094E5 LDR R5, [R4]
283 00000054 00D085E5 STR SP, [R5] ;
}
284 00000058
285 00000058 OS_CPU_IRQ_ISR_1
286 00000058 D2F021E3 MSR CPSR_c, #(NO_INT | IRQ32_MODE) ;
Change to IRQ mode (to
use the IRQ stack to
handle interrupt)
287 0000005C
288 0000005C ........ LDR R0, ??OS_CPU_IRQ_ISR_Handler ;
OS_CPU_IRQ_ISR_Handler();
289 00000060 0FE0A0E1 MOV LR, PC
290 00000064 10FF2FE1 BX R0
291 00000068
292 00000068 D3F021E3 MSR CPSR_c, #(NO_INT | SVC32_MODE) ;
Change to SVC
mode
293 0000006C
294 0000006C ........ LDR R0, ??OS_IntExit ;
OSIntExit();
295 00000070 0FE0A0E1 MOV LR, PC
296 00000074 10FF2FE1 BX R0
297 00000078
298 00000078 ;
RESTORE NEW TASK'S CONTEXT
299 00000078 1000BDE8 LDMFD SP!, {R4} ;
Pop new task's CPSR
300 0000007C 04F06FE1 MSR SPSR_cxsf, R4
301 00000080
302 00000080 FFDFFDE8 LDMFD SP!, {R0-R12,LR,PC}^ ;
Pop new task's context
303 00000084
304 00000084
305 00000084 ;***********************************************
************************************************
**********
306 00000084 ; FIQ
Interrupt Service Routine
307 00000084 ;***********************************************
************************************************
**********
308 00000084
309 00000000 RSEG CODE:CODE:NOROOT(2)
310 00000000 CODE32
311 00000000
312 00000000 OS_CPU_FIQ_ISR
313 00000000
314 00000000 0E002DE9 STMFD SP!, {R1-R3} ;
PUSH WORKING REGISTERS ONTO
FIQ STACK
315 00000004
316 00000004 0D10A0E1 MOV R1, SP ;
Save FIQ stack pointer
317 00000008
318 00000008 0CD08DE2 ADD SP, SP,#12 ;
Adjust FIQ stack pointer
319 0000000C
320 0000000C 04204EE2 SUB R2, LR,#4 ;
Adjust PC for return
address to task
321 00000010
322 00000010 00304FE1 MRS R3, SPSR ;
Copy SPSR (i.e. interrupted
task's CPSR) to R3
323 00000014
324 00000014 D3F021E3 MSR CPSR_c, #(NO_INT | SVC32_MODE) ;
Change to SVC
mode
325 00000018
326 00000018 ;
SAVE TASK'S CONTEXT ONTO TASK'S STACK
327 00000018 04002DE9 STMFD SP!, {R2} ;
Push task's Return
PC
328 0000001C 00402DE9 STMFD SP!, {LR} ;
Push task's LR
329 00000020 F01F2DE9 STMFD SP!, {R4-R12} ;
Push task's R12-R4
330 00000024
331 00000024 7000B1E8 LDMFD R1!, {R4-R6} ;
Move task's R1-R3 from
FIQ stack to SVC stack
332 00000028 70002DE9 STMFD SP!, {R4-R6}
333 0000002C 01002DE9 STMFD SP!, {R0} ;
Push task's R0 onto
task's stack
334 00000030 08002DE9 STMFD SP!, {R3} ;
Push task's CPSR (i.e.
FIQ's SPSR)
335 00000034
336 00000034 ;
HANDLE NESTING COUNTER
337 00000034 58009FE5 LDR R0, ??OS_IntNesting ;
OSIntNesting++;
338 00000038 0010D0E5 LDRB R1, [R0]
339 0000003C 011081E2 ADD R1, R1,#1
340 00000040 0010C0E5 STRB R1, [R0]
341 00000044
342 00000044 010051E3 CMP R1, #1 ;
if (OSIntNesting == 1)
{
343 00000048 0200001A BNE OS_CPU_FIQ_ISR_1
344 0000004C
345 0000004C 50409FE5 LDR R4, ??OS_TCBCur ;
OSTCBCur->OSTCBStkPtr =
SP
346 00000050 005094E5 LDR R5, [R4]
347 00000054 00D085E5 STR SP, [R5] ;
}
348 00000058
349 00000058 OS_CPU_FIQ_ISR_1
350 00000058 D1F021E3 MSR CPSR_c, #(NO_INT | FIQ32_MODE) ;
Change to FIQ mode (to
use the FIQ stack to
handle interrupt)
351 0000005C
352 0000005C 28009FE5 LDR R0, ??OS_CPU_FIQ_ISR_Handler ;
OS_CPU_FIQ_ISR_Handler();
353 00000060 0FE0A0E1 MOV LR, PC
354 00000064 10FF2FE1 BX R0
355 00000068
356 00000068 D3F021E3 MSR CPSR_c, #(NO_INT | SVC32_MODE) ;
Change to SVC
mode
357 0000006C
358 0000006C 1C009FE5 LDR R0, ??OS_IntExit ;
OSIntExit();
359 00000070 0FE0A0E1 MOV LR, PC
360 00000074 10FF2FE1 BX R0
361 00000078
362 00000078 ;
RESTORE NEW TASK'S CONTEXT
363 00000078 1000BDE8 LDMFD SP!, {R4} ;
Pop new task's CPSR
364 0000007C 04F06FE1 MSR SPSR_cxsf, R4
365 00000080
366 00000080 FFDFFDE8 LDMFD SP!, {R0-R12,LR,PC}^ ;
Pop new task's context
367 00000084
368 00000084
369 00000084 ;***********************************************
************************************************
**********
370 00000084 ; POINTERS
TO VARIABLES
371 00000084 ;***********************************************
************************************************
**********
372 00000084
373 00000084 DATA
374 00000084
375 00000084 ??OS_TaskSwHook:
376 00000084 ........ DC32 OSTaskSwHook
377 00000088
378 00000088 ??OS_CPU_IRQ_ISR_Handler:
379 00000088 ........ DC32 OS_CPU_IRQ_ISR_Handler
380 0000008C
381 0000008C ??OS_CPU_FIQ_ISR_Handler:
382 0000008C ........ DC32 OS_CPU_FIQ_ISR_Handler
383 00000090
384 00000090 ??OS_IntExit:
385 00000090 ........ DC32 OSIntExit
386 00000094
387 00000094 ??OS_IntNesting:
388 00000094 ........ DC32 OSIntNesting
389 00000098
390 00000098 ??OS_PrioCur:
391 00000098 ........ DC32 OSPrioCur
392 0000009C
393 0000009C ??OS_PrioHighRdy:
394 0000009C ........ DC32 OSPrioHighRdy
395 000000A0
396 000000A0 ??OS_Running:
397 000000A0 ........ DC32 OSRunning
398 000000A4
399 000000A4 ??OS_TCBCur:
400 000000A4 ........ DC32 OSTCBCur
401 000000A8
402 000000A8 ??OS_TCBHighRdy:
403 000000A8 ........ DC32 OSTCBHighRdy
404 000000AC
405 000000AC END
##############################
# CRC:A02B #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 556 #
##############################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -