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

📄 bseppca.s

📁 ppc860的ucos part
💻 S
字号:
#
# bseppca.s
#
# Barnett Systems Engineering 
# MPC8xx PowerPC Specific Assembly Language Functions
# for UCOS-II
# Has only been checked with MPC8xx chips
# but should work with any 32-bit non-floating point PowerPC
#
# Functions:
#	void OSStartHighRdy (void)
#	void OSCtxSw (void)					
#	void OSIntCtxSw (void)
#	void DECIntr (void)
#
# Author: Harry E. Barnett 11/11/99
# harryb@hbbse.com http://www.hbbse.com
#
# Version V1.00
#
#########################################################################
	.list
	.file	"bseppca.s"
	.title	"UCOS-II MPC8xx Power PC Assembly Language Functions"

	.global	OSStartHighRdy
	.global	OSCtxSw
	.global	OSIntCtxSw
	.global	DECIntr
	.global	EIEIntr

	.text
	.align  2

	.extern OSTCBHighRdy	;pointer to highest priority ready task
	.extern OSTCBCur		;pointer to current tasks TCB
	.extern OSTaskSwHook
	.extern OSRunning

#########################################################################
#	Stack Frame Definition
#		These Stack frame definitions have to be congruent with the 
#		Stack Frame usage in bseppcc.c
#########################################################################
	XR1		.equ	0
	XBLK	.equ	XR1+4
	XR0		.equ	XBLK+4
	XSRR0	.equ	XR0+4
	XSRR1	.equ	XSRR0+4
	XCTR	.equ	XSRR1+4
	XXER	.equ	XCTR+4
	XCR		.equ	XXER+4
	XLR		.equ	XCR+4
	XR2		.equ	XLR+4
	XR3		.equ	XR2+4
	XR4		.equ	XR3+4
	XR5		.equ	XR4+4
	XR6		.equ	XR5+4
	XR7		.equ	XR6+4
	XR8		.equ	XR7+4
	XR9		.equ	XR8+4
	XR10	.equ	XR9+4
	XR11	.equ	XR10+4
	XR12	.equ	XR11+4
	XR13	.equ	XR12+4
	XR14	.equ	XR13+4
	XR15	.equ	XR14+4
	XR16	.equ	XR15+4
	XR17	.equ	XR16+4
	XR18	.equ	XR17+4
	XR19	.equ	XR18+4
	XR20	.equ	XR19+4
	XR21	.equ	XR20+4
	XR22	.equ	XR21+4
	XR23	.equ	XR22+4
	XR24	.equ	XR23+4
	XR25	.equ	XR24+4
	XR26	.equ	XR25+4
	XR27	.equ	XR26+4
	XR28	.equ	XR27+4
	XR29	.equ	XR28+4
	XR30	.equ	XR29+4
	XR31	.equ	XR30+4
	XMSR	.equ	XR31+4
	STACK_FRAME_SIZE	.equ	XMSR+4

#########################################################################
#	Start multitasking
#	void OSStartHighRdy(void)
#########################################################################

OSStartHighRdy:
# Call OSTaskSwHook
	bl		OSTaskSwHook

# Set OSRunning to 1
	li		r0,1
	lis		r11,OSRunning@ha
	stb		r0,OSRunning@l(r11)

# Get pointer to ready task TCB
	lis		r11,OSTCBHighRdy@ha
	lwz		r11,OSTCBHighRdy@l(r11)

# Save as current task TCB ptr.
	lis		r12,OSTCBCur@ha
	stw		r11,OSTCBCur@l(r12)

# Get new stack pointer
	lwz		r1,0(r11)

# Restore context
	lwz		r2,XR2(r1)
	lwz		r3,XR3(r1)
	lwz		r4,XR4(r1)
	lwz		r5,XR5(r1)
	lwz		r6,XR6(r1)
	lwz		r7,XR7(r1)
	lwz		r8,XR8(r1)
	lwz		r9,XR9(r1)
	lwz		r10,XR10(r1)
	lwz		r11,XR11(r1)
	lwz		r12,XR12(r1)
	lwz		r13,XR13(r1)
	lwz		r14,XR14(r1)
	lwz		r15,XR15(r1)
	lwz		r16,XR16(r1)
	lwz		r17,XR17(r1)
	lwz		r18,XR18(r1)
	lwz		r19,XR19(r1)
	lwz		r20,XR20(r1)
	lwz		r21,XR21(r1)
	lwz		r22,XR22(r1)
	lwz		r23,XR23(r1)
	lwz		r24,XR24(r1)
	lwz		r25,XR25(r1)
	lwz		r26,XR26(r1)
	lwz		r27,XR27(r1)
	lwz		r28,XR28(r1)
	lwz		r29,XR29(r1)
	lwz		r30,XR30(r1)
	lwz		r31,XR31(r1)
	lwz		r0,XLR(r1)
	mtspr	LR,r0
	lwz		r0,XCR(r1)
	mtcrf	255,r0
	lwz		r0,XXER(r1)
	mtspr	XER,r0
	lwz		r0,XCTR(r1)
	mtspr	CTR,r0
	lwz		r0,XSRR1(r1)
	mtspr   SRR1,r0
	lwz		r0,XSRR0(r1)
	mtspr   SRR0,r0
	lwz		r0,XR0(r1)
	addi	r1,r1,STACK_FRAME_SIZE
	rfi


#########################################################################
#	Perform a context switch from task level
#	void OSCtxSw(void)					
#########################################################################

OSCtxSw:
#Save context
	stwu	r1,-STACK_FRAME_SIZE(r1)
	stw		r0,XR0(r1)
	mfmsr	r0
	stw		r0,XMSR(1)
	mfspr	r0,SRR0
	stw		r0,XSRR0(r1)
	mfspr	r0,SRR1
	stw		r0,XSRR1(r1)
	mfspr	r0,CTR
	stw		r0,XCTR(r1)
	mfspr	r0,XER
	stw		r0,XXER(r1)
	mfcr	r0
	stw		r0,XCR(r1)
	mfspr	r0,LR
	stw		r0,XLR(r1)
	stw		r2,XR2(r1)
	stw		r3,XR3(r1)
	stw		r4,XR4(r1)
	stw		r5,XR5(r1)
	stw		r6,XR6(r1)
	stw		r7,XR7(r1)
	stw		r8,XR8(r1)
	stw		r9,XR9(r1)
	stw		r10,XR10(r1)
	stw		r11,XR11(r1)
	stw		r12,XR12(r1)
	stw		r13,XR13(r1)
	stw		r14,XR14(r1)
	stw		r15,XR15(r1)
	stw		r16,XR16(r1)
	stw		r17,XR17(r1)
	stw		r18,XR18(r1)
	stw		r19,XR19(r1)
	stw		r20,XR20(r1)
	stw		r21,XR21(r1)
	stw		r22,XR22(r1)
	stw		r23,XR23(r1)
	stw		r24,XR24(r1)
	stw		r25,XR25(r1)
	stw		r26,XR26(r1)
	stw		r27,XR27(r1)
	stw		r28,XR28(r1)
	stw		r29,XR29(r1)
	stw		r30,XR30(r1)
	stw		r31,XR31(r1)

# Get pointer to current TCB
	lis		r11,OSTCBCur@ha
	lwz		r11,OSTCBCur@l(r11)

# Save stack pointer in current TCB
	stw		r1,0(r11)

# Call OSTaskSwHook
	bl		OSTaskSwHook

# Get pointer to ready task TCB
	lis		r11,OSTCBHighRdy@ha
	lwz		r11,OSTCBHighRdy@l(r11)

# Save as current task TCB ptr.
	lis		r12,OSTCBCur@ha
	stw		r11,OSTCBCur@l(r12)

# Get High Ready Priority
	lis		r12,OSPrioHighRdy@ha
	lbz		r10,OSPrioHighRdy@l(r12)

# Save as Current Priority
	lis		r12,OSPrioCur@ha
	stb		r10,OSPrioCur@l(r12)

# Get new stack pointer
	lwz		r1,0(r11)

# Restore context
	lwz		r2,XR2(r1)
	lwz		r3,XR3(r1)
	lwz		r4,XR4(r1)
	lwz		r5,XR5(r1)
	lwz		r6,XR6(r1)
	lwz		r7,XR7(r1)
	lwz		r8,XR8(r1)
	lwz		r9,XR9(r1)
	lwz		r10,XR10(r1)
	lwz		r11,XR11(r1)
	lwz		r12,XR12(r1)
	lwz		r13,XR13(r1)
	lwz		r14,XR14(r1)
	lwz		r15,XR15(r1)
	lwz		r16,XR16(r1)
	lwz		r17,XR17(r1)
	lwz		r18,XR18(r1)
	lwz		r19,XR19(r1)
	lwz		r20,XR20(r1)
	lwz		r21,XR21(r1)
	lwz		r22,XR22(r1)
	lwz		r23,XR23(r1)
	lwz		r24,XR24(r1)
	lwz		r25,XR25(r1)
	lwz		r26,XR26(r1)
	lwz		r27,XR27(r1)
	lwz		r28,XR28(r1)
	lwz		r29,XR29(r1)
	lwz		r30,XR30(r1)
	lwz		r31,XR31(r1)
	lwz		r0,XLR(r1)
	mtspr	LR,r0
	lwz		r0,XCR(r1)
	mtcrf	255,r0
	lwz		r0,XXER(r1)
	mtspr	XER,r0
	lwz		r0,XCTR(r1)
	mtspr	CTR,r0
	lwz		r0,XSRR1(r1)
	mtspr   SRR1,r0
	lwz		r0,XSRR0(r1)
	mtspr   SRR0,r0
	lwz		r0,XMSR(r1)
	mtmsr	r0
	lwz		r0,XR0(r1)
	addi	r1,r1,STACK_FRAME_SIZE
	rfi

#########################################################################
#	Perform a context switch from an ISR
#	void OSIntCtxSw(void)					 
#########################################################################

OSIntCtxSw:
# Ignore calls to OSIntExit, OSIntCtxSw
	addi	r1,r1,0x10

#  Get pointer to current TCB
	lis		r11,OSTCBCur@ha
	lwz		r11,OSTCBCur@l(r11)

#  Save stack pointer in current TCB 
	stw		r1,0(r11)

# Call OSTaskSwHook
	bl		OSTaskSwHook

#  Get pointer to ready task TCB
	lis		r11,OSTCBHighRdy@ha
	lwz		r11,OSTCBHighRdy@l(r11)

#  Save as current task TCB ptr.
	lis		r12,OSTCBCur@ha
	stw		r11,OSTCBCur@l(r12)

# Get High Ready Priority
	lis		r12,OSPrioHighRdy@ha
	lbz		r10,OSPrioHighRdy@l(r12)

# Save as Current Priority
	lis		r12,OSPrioCur@ha
	stb		r10,OSPrioCur@l(r12)

#  Get new stack pointer
	lwz		r1,0(r11)

# Restore context
	lwz		r2,XR2(r1)
	lwz		r3,XR3(r1)
	lwz		r4,XR4(r1)
	lwz		r5,XR5(r1)
	lwz		r6,XR6(r1)
	lwz		r7,XR7(r1)
	lwz		r8,XR8(r1)
	lwz		r9,XR9(r1)
	lwz		r10,XR10(r1)
	lwz		r11,XR11(r1)
	lwz		r12,XR12(r1)
	lwz		r14,XR14(r1)
	lwz		r15,XR15(r1)
	lwz		r16,XR16(r1)
	lwz		r17,XR17(r1)
	lwz		r18,XR18(r1)
	lwz		r19,XR19(r1)
	lwz		r20,XR20(r1)
	lwz		r21,XR21(r1)
	lwz		r22,XR22(r1)
	lwz		r23,XR23(r1)
	lwz		r24,XR24(r1)
	lwz		r25,XR25(r1)
	lwz		r26,XR26(r1)
	lwz		r27,XR27(r1)
	lwz		r28,XR28(r1)
	lwz		r29,XR29(r1)
	lwz		r30,XR30(r1)
	lwz		r31,XR31(r1)
	lwz		r0,XLR(r1)
	mtspr	LR,r0
	lwz		r0,XCR(r1)
	mtcrf	255,r0
	lwz		r0,XXER(r1)
	mtspr	XER,r0
	lwz		r0,XCTR(r1)
	mtspr	CTR,r0
	lwz		r0,XSRR1(r1)
	mtspr   SRR1,r0
	lwz		r0,XSRR0(r1)
	mtspr   SRR0,r0 
	lwz		r0,XMSR(r1)
	mtmsr	r0
	lwz		r0,XR0(r1)
	addi	r1,r1,STACK_FRAME_SIZE
	rfi

#########################################################################
#	Decrementer Interrupt Handler
#	void DECIntr (void)
#########################################################################

DECIntr:
#Save context
	stwu	r1,-STACK_FRAME_SIZE(r1)
	stw		r0,XR0(r1)
	mfspr	r0,LR
	stw		r0,XLR(r1)
	mfcr	r0
	stw		r0,XCR(r1)
	mfspr	r0,XER
	stw		r0,XXER(r1)
	mfspr	r0,CTR
	stw		r0,XCTR(r1)
	mfspr	r0,SRR1
	stw		r0,XSRR1(r1)
	mfspr	r0,SRR0
	stw		r0,XSRR0(r1)
	mfmsr	r0
	stw		r0,XMSR(1)
	stw		r2,XR2(r1)
	stw		r3,XR3(r1)
	stw		r4,XR4(r1)
	stw		r5,XR5(r1)
	stw		r6,XR6(r1)
	stw		r7,XR7(r1)
	stw		r8,XR8(r1)
	stw		r9,XR9(r1)
	stw		r10,XR10(r1)
	stw		r11,XR11(r1)
	stw		r12,XR12(r1)
	stw		r13,XR13(r1)
	stw		r14,XR14(r1)
	stw		r15,XR15(r1)
	stw		r16,XR16(r1)
	stw		r17,XR17(r1)
	stw		r18,XR18(r1)
	stw		r19,XR19(r1)
	stw		r20,XR20(r1)
	stw		r21,XR21(r1)
	stw		r22,XR22(r1)
	stw		r23,XR23(r1)
	stw		r24,XR24(r1)
	stw		r25,XR25(r1)
	stw		r26,XR26(r1)
	stw		r27,XR27(r1)
	stw		r28,XR28(r1)
	stw		r29,XR29(r1)
	stw		r30,XR30(r1)
	stw		r31,XR31(r1)

	bl	  DEC_Hdlr

	lwz		r2,XR2(r1)
	lwz		r3,XR3(r1)
	lwz		r4,XR4(r1)
	lwz		r5,XR5(r1)
	lwz		r6,XR6(r1)
	lwz		r7,XR7(r1)
	lwz		r8,XR8(r1)
	lwz		r9,XR9(r1)
	lwz		r10,XR10(r1)
	lwz		r11,XR11(r1)
	lwz		r12,XR12(r1)
	lwz		r13,XR13(r1)
	lwz		r14,XR14(r1)
	lwz		r15,XR15(r1)
	lwz		r16,XR16(r1)
	lwz		r17,XR17(r1)
	lwz		r18,XR18(r1)
	lwz		r19,XR19(r1)
	lwz		r20,XR20(r1)
	lwz		r21,XR21(r1)
	lwz		r22,XR22(r1)
	lwz		r23,XR23(r1)
	lwz		r24,XR24(r1)
	lwz		r25,XR25(r1)
	lwz		r26,XR26(r1)
	lwz		r27,XR27(r1)
	lwz		r28,XR28(r1)
	lwz		r29,XR29(r1)
	lwz		r30,XR30(r1)
	lwz		r31,XR31(r1)
	lwz		r0,XLR(r1)
	mtspr	LR,r0
	lwz		r0,XCR(r1)
	mtcrf	255,r0
	lwz		r0,XXER(r1)
	mtspr	XER,r0
	lwz		r0,XCTR(r1)
	mtspr	CTR,r0
	lwz		r0,XSRR1(r1)
	mtspr	SRR1,r0
	lwz		r0,XSRR0(r1)
	mtspr	SRR0,r0
	lwz		r0,XMSR(r1)
	mtmsr	r0
	lwz		r0,XR0(r1)
	addi	r1,r1,STACK_FRAME_SIZE
	rfi

	.end

⌨️ 快捷键说明

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