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

📄 os_cpu_s.s

📁 ARM 处理器的一个小操作系统内核源码 多任务
💻 S
字号:
;Pre-defined constants
USERMODE    EQU 	0x10
FIQMODE     EQU 	0x11
IRQMODE     EQU 	0x12
SVCMODE     EQU 	0x13
ABORTMODE   EQU 	0x17
UNDEFMODE   EQU 	0x1b
MODEMASK    EQU 	0x1f
NOINT       EQU 	0xc0

	AREA    OS_ASM,CODE,READONLY
			CODE32
			
 EXPORT AsmTkSw
 EXPORT StartHT
 EXPORT GETSP
 EXPORT IRQ_ISR
 
 IMPORT CtrTaskkSw
 IMPORT OSTimer

 IMPORT CToAsmSP
 IMPORT SVCLR
 IMPORT FIQLR
 IMPORT FIQSPSR
 IMPORT CallTkSwCount

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;中断级任务切换
IRQ_ISR
	STMFD   SP!,{R0-R12}	;存R0-R12
	SUB		LR,LR,#4
	LDR		R0,=FIQLR
	STR		LR,[R0]			;存FIQ LR
	
	MRS		R1,SPSR
	LDR		R0,=FIQSPSR
	STR		R1,[R0]			;存SPSR
	
	BL		OSTimer			;时间片处理
	
	;;if CallTkSwCount>0 return
	
	LDMFD	SP!,{R0-R12}
	MSR		CPSR_cxsf,#(NOINT|SVCMODE)	;转换模式

	STMFD	SP!,{R0}
	LDR		R0,=SVCLR
	STR		LR,[R0]			;save SVC LR
	
	LDR		R0,=FIQLR
	LDR		LR,[R0]
	LDMFD	SP!,{R0}
	STMFD	SP!,{LR}		;push FIQ LR
	LDR		LR,=SVCLR
	LDR		LR,[LR]			;load SVC LR
	
	STMFD	SP!,{R0-R12,LR}	;push r0-r12,SVC LR
	
	LDR		R0,=FIQSPSR
	LDR		R1,[R0]
	STMFD	SP!,{R1}		;push FIQ spsr

	LDR		R1,=CToAsmSP
	STR		SP,[R1]			;存SP到CToAsmSP
	
	BL		CtrTaskkSw
	
    LDR		R1,=CToAsmSP    ;加载新任务SP
    LDR		SP,[R1]


	LDMFD	SP!,{R0}
	BIC		R0,R0,#NOINT
	MSR		SPSR_cxsf,R0
	LDMFD	SP!,{R0-R12,LR,PC}^
	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;用户级任务级切换
AsmTkSw
	STMFD   SP!,{LR}
	STMFD   SP!,{R0-R12,LR}
	MRS		R0,CPSR
	STMFD	SP!,{R0}

	LDR		R1,=CToAsmSP
	STR		SP,[R1]			;存SP到CToAsmSP

	BL		CtrTaskkSw			;任务调度

StartHT
    LDR		R1,=CToAsmSP    ;加载新任务SP
    LDR		SP,[R1]
    
	LDMFD	SP!,{R0}
	BIC		R0,R0,#NOINT
	MSR		SPSR_cxsf,R0
	LDMFD	SP!,{R0-R12,LR,PC}^

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	

GETSP
	STMFD   SP!,{R1,LR}	
	LDR		R1,=CToAsmSP
	STR		SP,[R1]			;存SP到CToAsmSP
	LDMFD	SP!,{R1,PC}
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	END

⌨️ 快捷键说明

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