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

📄 os_cpu_a.asm

📁 这是移植到凌阳十六位单片机上的UCOS 凌阳十六位单片机性能强大
💻 ASM
字号:
//**************************************************************
//*              by dejam at Shantou University
//*                       2006.5.4
//**************************************************************

.include SPCE061A.inc

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

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

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

//定义压栈、出栈
PUSHALL: .MACRO
	push r1,r5 to [sp]
	.ENDM
POPALL: .MACRO
	pop r1,r5 from [sp]
	.ENDM
	
//*******************************************************
//        下面开始定义前面声明的四个可重入函数
//*******************************************************
.code

_OSStartHighRdy:
	call _OSTaskSwHook
	r1=[_OSTCBHighRdy]
	sp=[r1]            //TCB的第一个元素是OSTCBStkPtr,指向任务堆栈的指针
	r1=1               //置OSRunning=TURE
	[_OSRunning]=r1
	POPALL             //从新堆栈中恢复所以的寄存器内容
	reti
	
	
_OSCtxSw:
	PUSHALL
OSIntCtxSw_in:
	r1=[_OSTCBCur]     //获得当前TCB的指针
	[r1]=sp            //OSTCBCur->OSTCBStkPtr = Stack Pointer
	call _OSTaskSwHook
	r1=[_OSTCBHighRdy]
	[_OSTCBCur]=r1
	r2=[_OSPrioHighRdy]
	[_OSPrioCur]=r2
	sp=[r1]            //得到需要恢复的任务的堆栈指针
	POPALL
	reti
	
	
_OSIntCtxSw:
	r1=sp
	r1+=7
	sp=r1
	jmp OSIntCtxSw_in  //除了前面一点不同,OSIntCtxSw()的代码和OSCtxSw()是一样的
	

.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		// /
	
	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 + -