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

📄 os_cpu_a.asm

📁 UCOS_II移植的(MEGA16,CVAVR)
💻 ASM
字号:

_.MACRO PUSH_ALL
	ST -Y ,R0
	ST -Y ,R1
	ST -Y ,R2
	ST -Y ,R3
	ST -Y ,R4
	ST -Y ,R5
	ST -Y ,R6
	ST -Y ,R7
	ST -Y ,R8
	ST -Y ,R9
	ST -Y ,R10
	ST -Y ,R11
	ST -Y ,R12
	ST -Y ,R13
	ST -Y ,R14
	ST -Y ,R15
	ST -Y ,R16
	ST -Y ,R17
	ST -Y ,R18
	ST -Y ,R19
	ST -Y ,R20
	ST -Y ,R21
	ST -Y ,R22
	ST -Y ,R23
	ST -Y ,R24
	ST -Y ,R25
	ST -Y ,R26
	ST -Y ,R27
	ST -Y ,R28
	ST -Y ,R29
	ST -Y ,R30
	ST Y- ,R31	
_.ENDMACRO

_.MACRO POP_ALL
 LD R31,  Y+
 LD R30,  Y+
 LD R29,  Y+
 LD R28,  Y+
 LD R27,  Y+
 LD R26,  Y+
 LD R25,  Y+
 LD R24,  Y+
 LD R23,  Y+
 LD R22,  Y+
 LD R21,  Y+
 LD R20,  Y+
 LD R19,  Y+
 LD R18,  Y+
 LD R17,  Y+
 LD R16,  Y+
 LD R15,  Y+
 LD R14,  Y+
 LD R13,  Y+
 LD R12,  Y+
 LD R11,  Y+
 LD R10,  Y+
 LD R9,   Y+
 LD R8,   Y+   
 LD R7,   Y+
 LD R6,   Y+
 LD R5,   Y+
 LD R4,   Y+
 LD R3,   Y+
 LD R2,   Y+
 LD R1,   Y+
 LD R0,   Y+
_.ENDMACRO 

_.MACRO PUSH_SP
  IN  R16, SPH ;$3E
  ST  Y+,  R16
  IN  R16, SPL ;$3D
  ST  Y+,  R16  
_.ENDMACRO

_.MACRO POP_SP
	LD  R16, Y-
	OUT SPL, R16
	LD  R16, Y-
	OUT SPH, R16 
_.ENDMACRO

_.MACRO PUSH_SREG
	IN R16, SREG  ;$3F
	ST Y+,  R16
_.ENDMACRO

_.MACRO POP_SREG
	LD  Y+,   R16
	OUT SRET, R16
_.ENDMACRO


_OSStartHighRdy::
	CALL _OSTaskSwHook
	LDI R16, 1
	STS _OSRunning, R16
	LDS R30, _OSTCBHighRdy
	LDS R31, _OSTCBHighRdy + 1
	
	LD  R28, Z+
	LD  R29, Z+
	
	POP_SP
	POP_SREG
	POP_ALL
RET

_OSCtxSw::
	PUSH_ALL
	PUSH_SREG
	PUSH_SP
	
	LDS R30, _OSTCBCur
	LDS R31, _OSTCBCur + 1
	ST  Z+,	 R28
	ST  Z+,  R29
	
	CALL _OSTaskSwHook  
	
	LDS R16, _OSPrioHighRdy
	STS _OSPrioCur,	R16
	
	LDS R30, _OSTCBHighRdy
	LDS R31, _OSTCBHighRdy + 1
	STS _OSTCBCur, R30
	STS _OSTCBCur + 1, R31
	
	LD  R28, Z+
	LD  R29, Z+
	
	POP_SP
	POP_SREG
	POP_ALL
RET

_OSIntCtxSw::
	
	LDS R16, _OSPrioHighRdy
	STS _OSPrioCur,	R16
	
	LDS R30, _OSTCBHighRdy
	LDS R31, _OSTCBHighRdy + 1
	STS _OSTCBCur, R30
	STS _OSTCBCur + 1, R31
	
	LD  R28, Z+
	LD  R29, Z+
	
	POP_SP
	POP_SREG
	POP_ALL
RETI

_OSTickISR::
	PUSH_ALL
	IN  R16,SREG         
	SBR R16,0x80    ;enable interrupt            
  ST  -Y,R16      ;save sreg
	PUSH_SP
	
	LDS R16, _OSIntNesting
	INC R16
	STS _OSIntNesting, R16
	
	CPI R16, 1
	BRNE _TickISR1
	
	LDS R30, _OSTCBCur
	LDS R31, _OSTCBCur + 1
	ST  Z+,	 R28
	ST  Z+,  R29
		
 _TickISR1:
  LDI   R16,0xF9             ;Reload the timer
	OUT   TCNT1H,R16           
	LDI   R16,0xE6
	OUT   TCNT1L,R16
  SEI 											 ;enable nest interrupt
  
  CALL   _OSTimeTick           
  CALL   _OSIntExit 
  
  POP_SP
	POP_SREG
	POP_ALL
RETI

_OS_CPU_SR_Save::
                IN      R16,SREG                    ; Get current state of interrupts disable flag
                CLI                                 ; Disable interrupts
                RET                                 ; Return original SREG value in R16


_OS_CPU_SR_Restore::
                OUT     SREG,R16                    ; Restore SREG
                RET                                 ; Return

⌨️ 快捷键说明

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