⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bseppca.lst

📁 ucos移植到mpc860的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
  00000000 00                     1 	#
  00000000 00                     2 	# bseppca.s
  00000000 00                     3 	#
  00000000 00                     4 	# Barnett Systems Engineering 
  00000000 00                     5 	# MPC8xx PowerPC Specific Assembly Language Functions
  00000000 00                     6 	# for UCOS-II
  00000000 00                     7 	# Has only been checked with MPC8xx chips
  00000000 00                     8 	# but should work with any 32-bit non-floating point PowerPC
  00000000 00                     9 	#
  00000000 00                    10 	# Functions:
  00000000 00                    11 	#	void OSStartHighRdy (void)
  00000000 00                    12 	#	void OSCtxSw (void)					
  00000000 00                    13 	#	void OSIntCtxSw (void)
  00000000 00                    14 	#	void DECIntr (void)
  00000000 00                    15 	#
  00000000 00                    16 	# Author: Harry E. Barnett 11/11/99
  00000000 00                    17 	# harryb@hbbse.com http://www.hbbse.com
  00000000 00                    18 	#
  00000000 00                    19 	# Version V1.00
  00000000 00                    20 	#
  00000000 00                    21 	#########################################################################
  00000000 00                    22 		.list
  00000000 00                    23 		.file	"bseppca.s"
  00000000 00                    24 		.title	"UCOS-II MPC8xx Power PC Assembly Language Functions"
  00000000 00                    25 	
  00000000 00                    26 		.global	OSStartHighRdy
  00000000 00                    27 		.global	OSCtxSw
  00000000 00                    28 		.global	OSIntCtxSw
  00000000 00                    29 		.global	DECIntr
  00000000 00                    30 		.global	EIEIntr
  00000000 00                    31 	
  00000000 00                    32 		.text
  00000000 00                    33 		.align  2
  00000000 00                    34 	
  00000000 00                    35 		.extern OSTCBHighRdy	;pointer to highest priority ready task
  00000000 00                    36 		.extern OSTCBCur		;pointer to current tasks TCB
  00000000 00                    37 		.extern OSTaskSwHook
  00000000 00                    38 		.extern OSRunning
  00000000 00                    39 	
  00000000 00                    40 	#########################################################################
  00000000 00                    41 	#	Stack Frame Definition
  00000000 00                    42 	#		These Stack frame definitions have to be congruent with the 
  00000000 00                    43 	#		Stack Frame usage in bseppcc.c
  00000000 00                    44 	#########################################################################
  00000000 00                    45 		XR1		.equ	0
  00000000 00                    46 		XBLK	.equ	XR1+4
  00000000 00                    47 		XR0		.equ	XBLK+4
  00000000 00                    48 		XSRR0	.equ	XR0+4
  00000000 00                    49 		XSRR1	.equ	XSRR0+4
  00000000 00                    50 		XCTR	.equ	XSRR1+4
  00000000 00                    51 		XXER	.equ	XCTR+4
  00000000 00                    52 		XCR		.equ	XXER+4
  00000000 00                    53 		XLR		.equ	XCR+4
  00000000 00                    54 		XR2		.equ	XLR+4
  00000000 00                    55 		XR3		.equ	XR2+4
  00000000 00                    56 		XR4		.equ	XR3+4
  00000000 00                    57 		XR5		.equ	XR4+4
  00000000 00                    58 		XR6		.equ	XR5+4
  00000000 00                    59 		XR7		.equ	XR6+4
  00000000 00                    60 		XR8		.equ	XR7+4
  00000000 00                    61 		XR9		.equ	XR8+4
  00000000 00                    62 		XR10	.equ	XR9+4
  00000000 00                    63 		XR11	.equ	XR10+4
  00000000 00                    64 		XR12	.equ	XR11+4
  00000000 00                    65 		XR13	.equ	XR12+4
  00000000 00                    66 		XR14	.equ	XR13+4
  00000000 00                    67 		XR15	.equ	XR14+4
  00000000 00                    68 		XR16	.equ	XR15+4
  00000000 00                    69 		XR17	.equ	XR16+4
  00000000 00                    70 		XR18	.equ	XR17+4
  00000000 00                    71 		XR19	.equ	XR18+4
  00000000 00                    72 		XR20	.equ	XR19+4
  00000000 00                    73 		XR21	.equ	XR20+4
  00000000 00                    74 		XR22	.equ	XR21+4
  00000000 00                    75 		XR23	.equ	XR22+4
  00000000 00                    76 		XR24	.equ	XR23+4
  00000000 00                    77 		XR25	.equ	XR24+4
  00000000 00                    78 		XR26	.equ	XR25+4
  00000000 00                    79 		XR27	.equ	XR26+4
  00000000 00                    80 		XR28	.equ	XR27+4
  00000000 00                    81 		XR29	.equ	XR28+4
  00000000 00                    82 		XR30	.equ	XR29+4
  00000000 00                    83 		XR31	.equ	XR30+4
  00000000 00                    84 		XMSR	.equ	XR31+4
  00000000 00                    85 		STACK_FRAME_SIZE	.equ	XMSR+4
  00000000 00                    86 	
  00000000 00                    87 	#########################################################################
  00000000 00                    88 	#	Start multitasking
  00000000 00                    89 	#	void OSStartHighRdy(void)
  00000000 00                    90 	#########################################################################
  00000000 00                    91 	
  00000000 00                    92 	OSStartHighRdy:
  00000000 00                    93 	# Call OSTaskSwHook
  00000000 00  4800 0001         94 		bl		OSTaskSwHook
  00000004 00                    95 	
  00000004 00                    96 	# Set OSRunning to 1
  00000004 00  3800 0001         97 		li		r0,1
  00000008 00  3d60 0000         98 		lis		r11,OSRunning@ha
  0000000c 00  980b 0000         99 		stb		r0,OSRunning@l(r11)
  00000010 00                   100 	
  00000010 00                   101 	# Get pointer to ready task TCB
  00000010 00  3d60 0000        102 		lis		r11,OSTCBHighRdy@ha
  00000014 00  816b 0000        103 		lwz		r11,OSTCBHighRdy@l(r11)
  00000018 00                   104 	
  00000018 00                   105 	# Save as current task TCB ptr.
  00000018 00  3d80 0000        106 		lis		r12,OSTCBCur@ha
  0000001c 00  916c 0000        107 		stw		r11,OSTCBCur@l(r12)
  00000020 00                   108 	
  00000020 00                   109 	# Get new stack pointer
  00000020 00  802b 0000        110 		lwz		r1,0(r11)
  00000024 00                   111 	
  00000024 00                   112 	# Restore context
  00000024 00  8041 0024        113 		lwz		r2,XR2(r1)
  00000028 00  8061 0028        114 		lwz		r3,XR3(r1)
  0000002c 00  8081 002c        115 		lwz		r4,XR4(r1)
  00000030 00  80a1 0030        116 		lwz		r5,XR5(r1)
  00000034 00  80c1 0034        117 		lwz		r6,XR6(r1)
  00000038 00  80e1 0038        118 		lwz		r7,XR7(r1)
  0000003c 00  8101 003c        119 		lwz		r8,XR8(r1)
  00000040 00  8121 0040        120 		lwz		r9,XR9(r1)
  00000044 00  8141 0044        121 		lwz		r10,XR10(r1)
  00000048 00  8161 0048        122 		lwz		r11,XR11(r1)
  0000004c 00  8181 004c        123 		lwz		r12,XR12(r1)
  00000050 00  81a1 0050        124 		lwz		r13,XR13(r1)
  00000054 00  81c1 0054        125 		lwz		r14,XR14(r1)
  00000058 00  81e1 0058        126 		lwz		r15,XR15(r1)
  0000005c 00  8201 005c        127 		lwz		r16,XR16(r1)
  00000060 00  8221 0060        128 		lwz		r17,XR17(r1)
  00000064 00  8241 0064        129 		lwz		r18,XR18(r1)
  00000068 00  8261 0068        130 		lwz		r19,XR19(r1)
  0000006c 00  8281 006c        131 		lwz		r20,XR20(r1)
  00000070 00  82a1 0070        132 		lwz		r21,XR21(r1)
  00000074 00  82c1 0074        133 		lwz		r22,XR22(r1)
  00000078 00  82e1 0078        134 		lwz		r23,XR23(r1)
  0000007c 00  8301 007c        135 		lwz		r24,XR24(r1)
  00000080 00  8321 0080        136 		lwz		r25,XR25(r1)
  00000084 00  8341 0084        137 		lwz		r26,XR26(r1)
  00000088 00  8361 0088        138 		lwz		r27,XR27(r1)
  0000008c 00  8381 008c        139 		lwz		r28,XR28(r1)
  00000090 00  83a1 0090        140 		lwz		r29,XR29(r1)
  00000094 00  83c1 0094        141 		lwz		r30,XR30(r1)
  00000098 00  83e1 0098        142 		lwz		r31,XR31(r1)
  0000009c 00  8001 0020        143 		lwz		r0,XLR(r1)
  000000a0 00  7c08 03a6        144 		mtspr	LR,r0
  000000a4 00  8001 001c        145 		lwz		r0,XCR(r1)
  000000a8 00  7c0f f120        146 		mtcrf	255,r0
  000000ac 00  8001 0018        147 		lwz		r0,XXER(r1)
  000000b0 00  7c01 03a6        148 		mtspr	XER,r0
  000000b4 00  8001 0014        149 		lwz		r0,XCTR(r1)
  000000b8 00  7c09 03a6        150 		mtspr	CTR,r0
  000000bc 00  8001 0010        151 		lwz		r0,XSRR1(r1)
  000000c0 00  7c1b 03a6        152 		mtspr   SRR1,r0
  000000c4 00  8001 000c        153 		lwz		r0,XSRR0(r1)
  000000c8 00  7c1a 03a6        154 		mtspr   SRR0,r0
  000000cc 00                   155 	
  000000cc 00                   156 		# srn 04.06.26
  000000cc 00                   157 		# Finally, make r1 point to the bottom of this stack frame.
  000000cc 00                   158 		# Restore action has been completed...
  000000cc 00                   159 		# ...and we can use this new stack point since here.
  000000cc 00                   160 		#
  000000cc 00                   161 		# Yes, we did lose old MSR in the case of we needn't it!
  000000cc 00                   162 		#
  000000cc 00                   163 		#
  000000cc 00                   164 		# Test: restore msr
  000000cc 00  8001 009c        165 		lwz		r0,XMSR(r1)
  000000d0 00  7c00 0124        166 		mtmsr	r0
  000000d4 00                   167 		# End
  000000d4 00                   168 	
  000000d4 00  8001 0008        169 		lwz		r0,XR0(r1)
  000000d8 00  3821 00a0        170 		addi	r1,r1,STACK_FRAME_SIZE
  000000dc 00  4c00 0064        171 		rfi
  000000e0 00                   172 	
  000000e0 00                   173 	
  000000e0 00                   174 	#########################################################################
  000000e0 00                   175 	#	Perform a context switch from task level
  000000e0 00                   176 	#	void OSCtxSw(void)					
  000000e0 00                   177 	#########################################################################
  000000e0 00                   178 	
  000000e0 00                   179 	OSCtxSw:
  000000e0 00                   180 	#Save context
  000000e0 00  9421 ff60        181 		stwu		r1,-STACK_FRAME_SIZE(r1)
  000000e4 00  9001 0008        182 		stw		r0,XR0(r1)
  000000e8 00  7c00 00a6        183 		mfmsr	r0
  000000ec 00  9001 009c        184 		stw		r0,XMSR(1)	# srn 04.06.26 ???
  000000f0 00  7c1a 02a6        185 		mfspr	r0,SRR0
  000000f4 00  9001 000c        186 		stw		r0,XSRR0(r1)
  000000f8 00  7c1b 02a6        187 		mfspr	r0,SRR1
  000000fc 00  9001 0010        188 		stw		r0,XSRR1(r1)
  00000100 00  7c09 02a6        189 		mfspr	r0,CTR
  00000104 00  9001 0014        190 		stw		r0,XCTR(r1)
  00000108 00  7c01 02a6        191 		mfspr	r0,XER
  0000010c 00  9001 0018        192 		stw		r0,XXER(r1)
  00000110 00  7c00 0026        193 		mfcr		r0
  00000114 00  9001 001c        194 		stw		r0,XCR(r1)
  00000118 00  7c08 02a6        195 		mfspr	r0,LR
  0000011c 00  9001 0020        196 		stw		r0,XLR(r1)
  00000120 00  9041 0024        197 		stw		r2,XR2(r1)
  00000124 00  9061 0028        198 		stw		r3,XR3(r1)
  00000128 00  9081 002c        199 		stw		r4,XR4(r1)
  0000012c 00  90a1 0030        200 		stw		r5,XR5(r1)
  00000130 00  90c1 0034        201 		stw		r6,XR6(r1)
  00000134 00  90e1 0038        202 		stw		r7,XR7(r1)
  00000138 00  9101 003c        203 		stw		r8,XR8(r1)
  0000013c 00  9121 0040        204 		stw		r9,XR9(r1)
  00000140 00  9141 0044        205 		stw		r10,XR10(r1)
  00000144 00  9161 0048        206 		stw		r11,XR11(r1)
  00000148 00  9181 004c        207 		stw		r12,XR12(r1)
  0000014c 00  91a1 0050        208 		stw		r13,XR13(r1)
  00000150 00  91c1 0054        209 		stw		r14,XR14(r1)
  00000154 00  91e1 0058        210 		stw		r15,XR15(r1)
  00000158 00  9201 005c        211 		stw		r16,XR16(r1)
  0000015c 00  9221 0060        212 		stw		r17,XR17(r1)
  00000160 00  9241 0064        213 		stw		r18,XR18(r1)
  00000164 00  9261 0068        214 		stw		r19,XR19(r1)
  00000168 00  9281 006c        215 		stw		r20,XR20(r1)
  0000016c 00  92a1 0070        216 		stw		r21,XR21(r1)
  00000170 00  92c1 0074        217 		stw		r22,XR22(r1)
  00000174 00  92e1 0078        218 		stw		r23,XR23(r1)
  00000178 00  9301 007c        219 		stw		r24,XR24(r1)
  0000017c 00  9321 0080        220 		stw		r25,XR25(r1)
  00000180 00  9341 0084        221 		stw		r26,XR26(r1)
  00000184 00  9361 0088        222 		stw		r27,XR27(r1)
  00000188 00  9381 008c        223 		stw		r28,XR28(r1)
  0000018c 00  93a1 0090        224 		stw		r29,XR29(r1)
  00000190 00  93c1 0094        225 		stw		r30,XR30(r1)
  00000194 00  93e1 0098        226 		stw		r31,XR31(r1)
  00000198 00                   227 	
  00000198 00                   228 	# Get pointer to current TCB
  00000198 00                   229 		#
  00000198 00                   230 		# srn 04.06.27
  00000198 00                   231 		# 'OSTCBCur@ha' means the high 16 bits addr of OSTCBCur...
  00000198 00                   232 		# ...not the value of OSTCBCur!
  00000198 00                   233 		#
  00000198 00  3d60 0000        234 		lis		r11,OSTCBCur@ha
  0000019c 00  816b 0000        235 		lwz		r11,OSTCBCur@l(r11)
  000001a0 00                   236 	
  000001a0 00                   237 	# Save stack pointer in current TCB
  000001a0 00  902b 0000        238 		stw		r1,0(r11)
  000001a4 00                   239 	
  000001a4 00                   240 	# Call OSTaskSwHook
  000001a4 00  4800 0001        241 		bl		OSTaskSwHook
  000001a8 00                   242 	
  000001a8 00                   243 	# Get pointer to ready task TCB
  000001a8 00  3d60 0000        244 		lis		r11,OSTCBHighRdy@ha
  000001ac 00  816b 0000        245 		lwz		r11,OSTCBHighRdy@l(r11)
  000001b0 00                   246 	
  000001b0 00                   247 	# Save as current task TCB ptr.
  000001b0 00                   248 		#
  000001b0 00                   249 		# srn 04.06.26
  000001b0 00                   250 		# Why not do this before the calling of OS_TASK_SW() ?
  000001b0 00                   251 		#
  000001b0 00  3d80 0000        252 		lis		r12,OSTCBCur@ha
  000001b4 00  916c 0000        253 		stw		r11,OSTCBCur@l(r12)
  000001b8 00                   254 	
  000001b8 00                   255 	# Get High Ready Priority
  000001b8 00  3d80 0000        256 		lis		r12,OSPrioHighRdy@ha
  000001bc 00  894c 0000        257 		lbz		r10,OSPrioHighRdy@l(r12)
  000001c0 00                   258 	
  000001c0 00                   259 	# Save as Current Priority
  000001c0 00  3d80 0000        260 		lis		r12,OSPrioCur@ha
  000001c4 00  994c 0000        261 		stb		r10,OSPrioCur@l(r12)
  000001c8 00                   262 	
  000001c8 00                   263 	# Get new stack pointer
  000001c8 00  802b 0000        264 		lwz		r1,0(r11)
  000001cc 00                   265 	
  000001cc 00                   266 	# Restore context
  000001cc 00  8041 0024        267 		lwz		r2,XR2(r1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -