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

📄 os_cpu_asm.s

📁 易能嵌入式操作系统E_LAND1.0.0_LPC2106_DS12.rar
💻 S
字号:
;==========================================================================================
;--文件名:Os_cpu_asm.s
;--
;--功  能:
;--
;--作  者:陈  斌
;--
;--版本号:v1.00
;--
;--时  间:2006.12.31
;==========================================================================================
		INCLUDE		OS_ASM.INC
		IMPORT	OSIntOverRing
		IMPORT	OSIndexReady
		IMPORT	OSCourseSwRing
		EXPORT	TaskSwASM
		EXPORT	StartHighASM
		EXPORT	EnIRQASM
		EXPORT	DisIRQASM
		EXPORT	CPUstate
		EXPORT	CPUintTst
		EXPORT	Swap32
		EXPORT	Swap8
		EXPORT	IRQ_ISR
		EXPORT	FIQ_ISR
		EXPORT	SWI_ISR
	    CODE32
		AREA    vectors,CODE,READONLY
IrqOverAdd		EQU		IrqStackSpace - (IRQ_STACK_LENGTH-1+7) * 4
FirstIntAdd		EQU		IrqStackSpace - 8*4
IRQ_ISR
	SUB     LR, LR, #4
	STMFD   SP!, {R0-R3, R12, LR}
	MRS     R0, SPSR
	STMFD   SP!, {R0}
	LDR		R0, =IrqOverAdd
 	CMP		R0, SP
	BCC		OS_IRQ_A
	LDR	    r0,=OSIntOverRing
	MOV     lr, pc
	BX	    r0
	B		OS_IRQ_B
OS_IRQ_A
	LDR		R0,=IRQ_Vect_Addr
	LDR		R0,[R0]
	CMP		R0,#0
	BEQ		OS_IRQ_B
	MOV		LR,PC
	BX		R0
	LDR		R0,=OSIndexReady
	MOV		LR,PC
	BX		R0
	MRS		R0,CPSR
	ORR		R0,R0,#0x80
	MSR		CPSR_c,R0
	LDR		R0,=FirstIntAdd
 	CMP		R0,SP
	BCS		OS_IRQ_B
	LDR		R0, =pOSTcbCur
	LDR		R0, [R0]
	LDR		R1, =pOSHighRdy
	LDR		R1, [R1]
	CMP		R0, R1
	BNE		OS_IRQ_C
OS_IRQ_B
	LDMFD   SP!, {R0}
	MSR		SPSR_cxsf, R0
	LDMFD	SP!, {R0-R3, R12, PC}^
OS_IRQ_C
	MOV		R12, SP
	ADD		R12, R12, #7*4
	LDR		SP, =IrqStackSpace
	MSR		CPSR_c, #(SYS_MODE|IRQ_DIS)
	LDMEA	R12!, {R0,R1}
	STMFD	SP!, {R0,R1}
	LDMEA	R12!,{R0-R3}
	STMFD	SP!, {R0-R11}
	LDMEA	R12, {R0}
	STMFD	SP!, {R0}
	STMFD	SP!, {R14}
	LDR		R0, =pOSTcbCur
	LDR		R0,[R0]
	STR		SP,[R0]
SartNewCour
	LDR		SP, =pOSHighRdy
	LDR		SP,[SP]
	LDR		SP,[SP]
	LDR	    r0,=OSCourseSwRing
	MOV     lr, pc
	BX	    r0
	LDMFD	SP!,{R14}
	MOV		R0, SP
	ADD		SP, SP, #15*4
	MSR		CPSR_c, #(SVC_MODE|IRQ_DIS)
	MOV		SP, R0
	LDMFD	SP!,{R0}
	MSR		SPSR_cxsf, R0
	LDMFD	SP!,{R0-R12,PC}^
TaskSwCode
	MOV		R0, LR
	MSR		CPSR_c, #(SYS_MODE|IRQ_DIS)
	STMFD	SP!, {R0}
	STMFD	SP!,{R0-R12}
	MSR		CPSR_c, #(SVC_MODE|IRQ_DIS)
	MRS		R0, SPSR
	MSR		CPSR_c, #(SYS_MODE|IRQ_DIS)
	STMFD	SP!,{R0}
	STMFD	SP!,{R14}
	LDR		R0, =pOSTcbCur
	LDR		R0,[R0]
	STR		SP,[R0]
	B		SartNewCour
StartHighASM
	STMFD   SP!, {R0}
	LDR 	R0, =_StartHighASM
	SWI		0
_StartHighASM
	MSR		CPSR_c, #(SYS_MODE|IRQ_DIS)
	B		SartNewCour
TaskSwASM
	STMFD   SP!, {R0}
	LDR 	R0, =TaskSwCode
	B		Swi_Code
EnIRQASM
	STMFD   SP!, {R0}
	LDR 	R0, =EnIRQCode
	B		Swi_Code
EnIRQCode
	MRS		R0,SPSR
	BIC		R0,R0,#0x80
	MSR		SPSR_cxsf,R0
	MOVS	PC,LR
DisIRQASM
	STMFD   SP!, {R0}
	LDR 	R0, =DisIRQCode
	B		Swi_Code
DisIRQCode
	MRS		R0,SPSR
	ORR		R0,R0,#0x80
	MSR		SPSR_cxsf,R0
	MOVS	PC,LR
Swi_Code
	SWI		0
	LDMFD	SP!, {R0}
	BX		LR
SWI_ISR
	MOV		PC,R0
FIQ_ISR
	STMFD   SP!, {R0-R3, LR}
	LDMFD   SP!, {R0-R3, LR}
	SUBS    PC,  LR,  #4
CPUstate
	MRS		R0,CPSR
	BX		LR
CPUintTst
	MRS		R0,CPSR
	EOR		R0,R0,#0x12
	MOV		R0,R0,LSL #24
	BX		LR
Swap32
	SWP		R0,R0,[R1]
	BX		LR
Swap8
	SWPB	R0,R0,[R1]
	BX		LR
	END

⌨️ 快捷键说明

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