?? os_cpu_a.lst
字號:
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 1
os_cpu_a
LOC CODE LINE SOURCELINE
1 #line 1 "c:\software\ucos-ii\c167\tasking\source\os_cpu_a.asm"
1 ;********************************************************************************************************
2 ; uC/OS-II
3 ; The Real-Time Kernel
4 ;
5 ; (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL
6 ; All Rights Reserved
7 ;
8 ; Infineon C167
9 ; Extended Architecture Specific Code
10 ; LARGE MEMORY MODEL
11 ;
12 ;
13 ; Module Title : uC/OS-II C167
14 ; System Platform : Target System Infineon C167
15 ; Compile with : TASKING C166/ST10 V2.0 R1 Cross-Assembler
16 ; Author : Michael Awosika, Karl Wannenmacher
17 ; Date : 5 Dez. 2000
18 ; Revision : 1.00
19 ; File Name : OS_CPU_A.ASM
20 ; Description : This uC/OS-II port is intended for Infineon Technologies
21 ; C167 Extended Architecture Micro Controller Targets
22 ;********************************************************************************************************
23
24 $DEBUG
25 $NOLOCALS
26 $EXTEND
27 $NOMOD166
28 $STDNAMES(Reg167.def)
29 $SEGMENTED
30 $CASE
31 $MODEL(LARGE)
32 $CHECKCPU16
33 NAME OS_CPU_C16x
34 ASSUME DPP3:SYSTEM
35
36 REGBAS REGBANK R0
37 COMAREA COMREG R1 - R15
38
39 ; 1 [State] = 2 * 1/ f CPU [s] for f CPU = variable
40 ; = 100 [ns] for f CPU = 20 MHz
41
42
43
44
45
46 ;********************************************************************************************************
47 ; External Code
48 ;********************************************************************************************************
49 EXTERN _OSIntExit:FAR
50 EXTERN _OSTimeTick:FAR
51 EXTERN _OSTaskSwHook:FAR
52 EXTERN _OSIntEnter:FAR
53
54 ;********************************************************************************************************
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 2
os_cpu_a
LOC CODE LINE SOURCELINE
55 ; External Data
56 ;********************************************************************************************************
57 EXTERN _OSIntNesting:BYTE
58 EXTERN _OSPrioHighRdy:BYTE
59 EXTERN _OSPrioCur:BYTE
60 EXTERN _OSRunning:BYTE
61 EXTERN _OSTCBCur:WORD
62 EXTERN _OSTCBHighRdy:WORD
63
64 UCOS_C16X SECTION CODE WORD PUBLIC 'CPROGRAM'
65 PUBLIC _OSStartHighRdy
66 PUBLIC _OSCtxSw
67 PUBLIC _OSIntCtxSw
68 PUBLIC _OSTickISR
69 UCOS_C16X ENDS
70
71 ;********************************************************************************************************
72 ; START MULTITASKING
73 ; void OSStartHighRdy (void)
74 ;
75 ; Note : OSStartHighRdy() MUST:
76 ; a) Call OSTaskSwHook() then,
77 ; b) Set OSRunning to TRUE.
78 ;
79 ; The user stack frame of the task to start looks as follows:
80 ;
81 ; TASK STACK AREA (High Memory)
82 ; +12 TASK DATA PARAMETER PAGE pointer
83 ; +10 TASK DATA PARAMETER OFFSET pointer
84 ; +0E SEGMENT of task code address
85 ; +0C OFFSET of task code address
86 ; +0A USER STACK OFFSET POINTER (R0) of task
87 ; +08 USER STACK PAGE POINTER (DPP1) of task
88 ; +06 PSW flags of task
89 ; +04 OFFSET of task code address
90 ; +02 SEGMENT of task code address
91 ; OSTCBHighRdy->OSTCBStkPtr --> 0
92 ; -02 R[1 ..15] General Purpose registers of task
93 ; -20 CP Context pointer of task
94 ; -22 DPP3 Data page pointer 3 of task
95 ; -24 DPP2 Data page pointer 2 of task
96 ; -26 DPP0 Data page pointer 0 of task
97 ; -28 MDC Multiply/Divide Control of task
98 ; -2A MDH Multiply/Divide High register of task
99 ; -2C MDL Multiply/Divide Low register of task (Low Memory)
100 ;********************************************************************************************************
101
102 UCOS_C16X SECTION CODE
103 _OSStartHighRdy PROC FAR
104
0000 E6F90000 R 105 MOV R9,#SOF _ADDR00 ; Call user defined task switch hook
0004 8890 106 MOV [-R0],R9
0006 E6F90000 R 107 MOV R9,#SEG _ADDR00
000A 8890 108 MOV [-R0],R9
000C FA000000 R 109 JMPS SEG(_OSTaskSwHook),SOF( _OSTaskSwHook)
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc. Date: Dec 5 2000 Time: 10:02:43 Page: 3
os_cpu_a
LOC CODE LINE SOURCELINE
110
0010 111 _ADDR00:
0010 E112 112 MOVB RL1,#01h ; Indicate that multitasking has started
0012 D7400000 R 113 EXTP #PAG _OSRunning,#01h
0016 F7F20000 1R 114 MOVB POF _OSRunning,RL1
001A BE88 115 BCLR IEN ; Disable interrupts
116
001C D7500000 R 117 EXTP #PAG _OSTCBHighRdy,#02h ; OSTCBCur = OSTCBHighRdy;
0020 F2FC0000 2R 118 MOV R12,POF _OSTCBHighRdy
0024 F2FD0000 1R 119 MOV R13,POF (_OSTCBHighRdy+2)
0028 D7500000 R 120 EXTP #PAG _OSTCBCur,#02h
002C F6FC0000 2R 121 MOV POF (_OSTCBCur),R12
0030 F6FD0000 1R 122 MOV POF (_OSTCBCur+2),R13
123
0034 DC5D 124 EXTP R13,#02h ; pStack = OSTCBCur->OSTCBStkPtr;
0036 98EC 2 125 MOV R14,[R12+] ; Load Offset pointer
0038 A8FC 1 126 MOV R15,[R12] ; Load Page pointer
127
128 ; ; Load Task's Context from TCB
003A DC5F 129 EXTP R15,#02h ; Start Of Task USR Stack Offset
003C D40E0A00 2 130 MOV R0,[R14+#0AH] ; Task R0
0040 D41E0800 1 131 MOV R1,[R14+#08H] ; Task DPP1
132
0044 DC5F 133 EXTP R15,#02h
0046 D42E0400 2 134 MOV R2,[R14+#04H] ; Task IP
004A D43E0200 1 135 MOV R3,[R14+#02H] ; Task CSP
136
004E F6F102FE 137 MOV DPP1,R1 ; Start Of Task USER Stack Page
0052 ECF3 138 PUSH R3 ; Load "saved" CSP on System Stack
0054 ECF2 139 PUSH R2 ; Load "saved" IP on System Stack
140
0056 9810 141 MOV R1,[R0+] ; Restore MDL
0058 F6F10EFE 142 MOV MDL,R1 ;
005C 9810 143 MOV R1,[R0+] ; Restore MDH
005E F6F10CFE 144 MOV MDH,R1 ;
0062 9810 145 MOV R1,[R0+] ; Restore MDC
0064 F6F10EFF 146 MOV MDC,R1 ;
0068 9810 147 MOV R1,[R0+] ; Restore DPP0
006A F6F100FE 148 MOV DPP0,R1 ;
006E 9810 149 MOV R1,[R0+] ; Restore DPP2
0070 F6F104FE 150 MOV DPP2,R1 ;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -