📄 os_cpu_a.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 + -