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

📄 os_cpu_a.asm

📁 此为针对凌阳SPCE061A板进行的uCOS2.00版本的移植
💻 ASM
字号:
//**************************************************
//				  norman
//		    	2008-08-03
//**************************************************	
.include spce061a.inc

.external _OSTCBCur
.external _OSTCBHighRdy
.external _OSRunning
.external _OSPrioCur
.external _OSPrioHighRdy
.external _OSIntNesting

.external _OSTaskSwHook
.external _OSIntEnter
.external _OSIntExit
.external _OSTimeTick


.public _OSStartHighRdy
.public _OSIntCtxSw
.public _OSCtxSw
.public _OSTickISR


PUSHALL: .MACRO
	PUSH R1,R5 to [sp]
	.ENDM
	
POPALL: .MACRO
	POP R1,R5 from [sp]
	.ENDM
	
	
.code

_OSStartHighRdy:
	CALL	_OSTaskSwHook
	R1 = 1
	[_OSRunning] = R1;
	R1 = [_OSTCBHighRdy]
	SP = [R1]
	POPALL
	RETI
	
_OSCtxSw:
	PUSHALL
	R1 = [_OSTCBCur]
	[R1] = SP
	CALL _OSTaskSwHook
	R1 = [_OSTCBHighRdy]
	[_OSTCBCur] = R1
	R2 = [_OSPrioHighRdy]
	[_OSPrioCur] = R2
	SP = [R1]
	POPALL
	RETI

_OSIntCtxSw:
	CALL _OSTaskSwHook
	R1 = [_OSTCBHighRdy]
	[_OSTCBCur] = R1
	R2 = [_OSPrioHighRdy]
	[_OSPrioCur] = R2
	SP = [R1]
	POPALL
	RETI
	
.text
.public _IRQ6
_IRQ6:
_OSTickISR:
	PUSHALL
	R1=C_IRQ6_TMB2			//判断是否为IRQ_TMB2中断
	TEST R1,[P_INT_Ctrl]
	JNZ IRQ_TMB2 			//是,进入IRQ_TMB2;否,进入IRQ_TMB1
IRQ_TMB1:
	R1=C_IRQ6_TMB1			//清中断标志
	[P_INT_Clear]=R1
 	R1=0x0001
    [P_Watchdog_Clear]=R1	//清看门狗
    
	R1=[_OSIntNesting]   	//  中断嵌套标志加1
	R1+=1					//  也可call _OSIntEnter
	[_OSIntNesting]=R1		// 

	CMP R1,1				//加入这几句话,省去调整SP,可移植性增强,何乐不为?
	JNZ NOT_SAVE_SP
SAVE_SP:
	R1 = [_OSTCBCur]
	[R1] = SP
	
NOT_SAVE_SP:
	call _OSTimeTick
	call _OSIntExit
	POPALL
	reti
IRQ_TMB2:					//中断子程序IRQ_TMB2
	R1=C_IRQ6_TMB2			//清中断标志
	[P_INT_Clear]=R1
	POPALL
	reti

⌨️ 快捷键说明

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