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

📄 coreasm.s

📁 一个多任务实时操作系统
💻 S
字号:
 	IMPORT	pVisby_CurrTask
	IMPORT	Visby_KernelServer
	IMPORT	Visby_KernelScheduler
	IMPORT	Visby_Tick
	IMPORT	Visby_Critical
	
	EXPORT	SWI_Handler
	EXPORT	TICK_Handler

MODE_USER	EQU	0x10
MODE_FIQ	EQU	0x11
MODE_IRQ	EQU	0x12
MODE_SUPER	EQU	0x13
MODE_ABORT	EQU	0x17
MODE_UNDEF	EQU	0x1B
MODE_SYSTEM	EQU	0x1F
	
rINTCON		EQU	0x01E00000
rI_ISPC		EQU	0x01E00024
BIT_TICK	EQU	0x00100000
BIT_TIMER2	EQU (0x1 << 11)

	AREA	Visby_Core, CODE, READONLY

	MACRO
	IncreaseTick
	LDR		r4, =Visby_Tick
	LDMIA	r4, {r5-r6}
	ADDS	r5, r5 ,#1
	ADC		r6, r6 ,#0
	STMIA	r4, {r5-r6}
	MEND

	MACRO
	ClrTickIrq
	LDR		r4, =rI_ISPC
	LDR		r5, =BIT_TIMER2
	STR		r5, [r4]
	MEND

;	MACRO
;	DisIrq
;	MRS		r4, cpsr
;	ORR		r4, r4, #0x00000080
;	MSR		cpsr_c, R8
;	MEND
	
;	MACRO
;	DisIrq
;	LDR		r4, =rINTCON
;	LDR		r5, [r4]
;	ORR		r5, r5, #0x00000002
;	STR		r5, [r4]
;	MEND
	
;	MACRO
;	EnaIrq
;	MRS		r4, cpsr
;	AND		r4, r4, #0xFFFFFF7F
;	MSR		cpsr_c, r4
;	MEND	
	
;	MACRO
;	EnaIrq
;	LDR		r4, =rINTCON
;	LDR		r5, [r4]
;	AND		r5, r5, #0xFFFFFFFD
;	STR		r5, [r4]
;	MEND	

	MACRO
	ToSysMode
	MRS		lr, cpsr
	AND		lr, lr, #0xFFFFFFE0
	ORR		lr, lr, #MODE_SYSTEM
	MSR		cpsr_cxsf, lr
	MEND

	MACRO
	ToSvcMode
	MRS		lr, cpsr
	AND		lr, lr, #0xFFFFFFE0
	ORR		lr, lr, #MODE_SUPER
	MSR		cpsr_cxsf, lr
	MEND

SWI_Handler
	STMFD	sp!, {r0-r6, lr}
	LDR		r4, =Visby_Critical
	LDR		r4, [r4]
	TEQ		r4, #0
	BNE		ExitHandler
	LDR		r0, [lr, #-4]				; Calculate the params
	BIC		r0, r0, #0xFF000000
	MOV		r1, sp						; Set pointer to parameters
	BL		Visby_KernelServer			; Call main part of handler
	TEQ		r0, #0						; Need schedule?
	BEQ		ExitHandler
	LDMFD	sp!, {r0-r6, lr}
	STR		lr, Bkp_TaskPC
	MRS		lr, spsr
	STR		lr, Bkp_TaskCPSR
	ToSysMode
	B		NextTask
ExitHandler
	LDMFD	sp!, {r0-r6, pc}^			; Restore registers and return with CPSR restoring
	
TICK_Handler
	SUB		lr, lr, #4
	STMFD 	sp!, {r4-r6, lr}
	ClrTickIrq		; r4,r5 used
	IncreaseTick	; r4,r5,r6 used
	LDR		r4, =Visby_Critical
	LDR		r4, [r4]
	TEQ		r4, #0
	BNE		NoSche
	LDMFD	sp!, {r4-r6, lr}
	STR		lr, Bkp_TaskPC
	MRS		lr, spsr
	STR		lr, Bkp_TaskCPSR
	ToSysMode
	B		NextTask
NoSche
	LDMFD	sp!, {r4-r6, pc}^

NextTask
	STR		lr, Bkp_TaskLR
	LDR		lr, =pVisby_CurrTask
	LDR		lr, [lr]
	STMIA	lr!, {r0-r12, sp}
	LDR		r4, Bkp_TaskLR
	LDR		r5, Bkp_TaskPC
	LDR		r6, Bkp_TaskCPSR
	STMIA	lr, {r4-r6}
	BL		Visby_KernelScheduler
	LDR		lr, =pVisby_CurrTask
	LDR		lr, [lr]
	LDR		r4, [lr, #64]
	MSR		cpsr_cxsf, r4
	LDMIA	lr, {r0-r12, sp, lr, pc}	

Bkp_TaskLR		DCD	0x00000000
Bkp_TaskPC		DCD	0x00000000
Bkp_TaskCPSR	DCD 0x00000000
	
	END

⌨️ 快捷键说明

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