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

📄 os_cpu_a.s

📁 ucosii 移植到ARM 9 2440环境 基本已经完成 没有最终试验 恐有差错
💻 S
📖 第 1 页 / 共 2 页
字号:
;*********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                          (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
;                                          All Rights Reserved
;
;                                               ARM920T Port
;                                            ADS v1.2 Compiler
;                                             Samsung S3C2440A
;
; File    : os_cpu_a.s
; Des	  : S3C2440侩 uC/OS-II Port 
; by      : ???
; History : 
; 2005.02.13: KInG(kimingoo@hotmail.com): 
;			  1. uC/OS-II 2/E 锅开辑狼 狼荤内靛甫 林籍栏肺 崔绊 鉴辑措肺 犁 硅摹 窃.
;			  2. 祈狼客 犬厘阑 困秦 C家胶肺 累己登绰 何盒档 狼荤内靛俊 嘎苗 绢祭喉府 内靛肺 累己窃.
;			  Note: ARM侩 器飘绰 辑利狼 狼荤内靛俊辑 割啊瘤绰 弊措肺 累己 且 荐 绝澜阑 林狼!!
; 2005.07.30: KInG(kimingoo@hotmail.com): OSCtxSw(), OSIntCtxSw() 鸥捞撇 林籍 荐沥
;*********************************************************************************************************

SRCPND   	EQU  0x4a000000    ; Source pending
INTPND   	EQU  0x4a000010    ; Interrupt request status

;*********************************************************************************************************
;                                    EXPORT and EXTERNAL REFERENCES
;*********************************************************************************************************
	IMPORT  OSRunning
	IMPORT  OSTCBCur
	IMPORT  OSTCBHighRdy
	IMPORT  OSPrioCur
	IMPORT  OSPrioHighRdy
	IMPORT  OSIntNesting
	IMPORT  OSIntCtxSwFlag
			
	IMPORT  OSIntEnter
	IMPORT  OSIntExit
	IMPORT  OSTaskSwHook
	IMPORT  OSTimeTick

	EXPORT  OSStartHighRdy
	EXPORT  OSCtxSw
	EXPORT  OSTickISR	
	EXPORT  OSIntCtxSw
	EXPORT  OS_IntCtxSw

	EXPORT  OSCPUSaveSR
	EXPORT  OSCPURestoreSR


	AREA UCOS_ARM, CODE, READONLY
	
;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; The stack frame is assumed to look as follows:
;
;							    Entry Point(Task Name)				(High memory)
;                               LR(R14)
;                               R12
;                               R11
;                               R10
;                               R9
;                               R8
;                               R7
;                               R6
;                               R5
;                               R4
;                               R3
;                               R2
;                               R1
;                               R0 : argument
;                               CPSR
; OSTCBHighRdy->OSTCBStkPtr --> SPSR								(Low memory)
;
; Note : OSStartHighRdy() MUST:
;           a) Call OSTaskSwHook() then,
;           b) Set OSRunning to TRUE,
;           c) Switch to the highest priority task.
;*********************************************************************************************************
OSStartHighRdy  
	;----------------------------------------------------------------------------------	
	; 荤侩磊 沥狼 窃荐 OSTaskSwHook() 阑 龋免茄促;
	; OSRunning = TRUE;
	;----------------------------------------------------------------------------------	
	BL		OSTaskSwHook
	LDR		R0, =OSRunning          ; Indicate that multitasking has started
	MOV		R1, #1
	STRB 	R1, [R0]

	;----------------------------------------------------------------------------------		
	; 犁积且 怕胶农狼 胶琶 器牢磐甫 掘绢柯促:
	; 		Stack pointer = OSTCBHighRdy->OSTCBStkPtr;
	;----------------------------------------------------------------------------------	
	LDR 	R0, =OSTCBHighRdy
	LDR 	R0, [R0]         
	LDR 	SP, [R0]         

	;----------------------------------------------------------------------------------		
	; 货 怕胶农狼 胶琶栏肺何磐 葛电 饭瘤胶磐甫 汗备茄促;
	;----------------------------------------------------------------------------------	
	LDMFD 	SP!, {R0}  
	MSR 	SPSR_cxsf, R0
	LDMFD 	SP!, {R0}  
	MSR 	CPSR_cxsf, R0
	LDMFD 	SP!, {R0-R12, LR, PC}


;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
; Note(s): 	   1) Upon entry: 
;              	  OSTCBCur      points to the OS_TCB of the task to suspend
;              	  OSTCBHighRdy  points to the OS_TCB of the task to resume
;
;          	   2) The stack frame of the task to suspend looks as follows:
;
;				  									LR(R14)					(High memory)
;           					                    R12
; 			                      			        R11
;           		                			    R10
;                   		           			 	R9
;                           		    			R8
;                               					R7
;                               					R6
;                               					R5
;                               					R4
;                               					R3
;                               					R2
;                               					R1
;                               					R0
;                               					CPSR
; 						OSTCBCur->OSTCBStkPtr ----> SPSR					(Low memory)
;
;
;          	   3) The stack frame of the task to resume looks as follows:
;
;			  		  								LR(R14)					(High memory)
;			           			                    R12
;           		            			        R11
;                   		        			    R10
;                           		   			 	R9
;                               					R8
;                               					R7
;			                               			R6
;           		                    			R5
;                   		            			R4
;                           		    			R3
;                               					R2
;                               					R1
;			                               			R0
;           		                    			CPSR
; 					OSTCBHighRdy->OSTCBStkPtr ---->	SPSR					(Low memory)
;*********************************************************************************************************
OSCtxSw
	;----------------------------------------------------------------------------------	
	; 橇肺技辑 饭瘤胶磐 历厘;
	;----------------------------------------------------------------------------------		
	STMFD	SP!, {LR}
	STMFD	SP!, {R0-R12, LR}
	MRS		R0,  CPSR
	STMFD	SP!, {R0}	
	MRS		R0,  SPSR
	STMFD	SP!, {R0}	

	;----------------------------------------------------------------------------------	
	; 泅犁 怕胶农狼 胶琶 器牢磐甫 泅犁 怕胶农狼 怕胶农 牧飘费 喉废俊 历厘:
	; 		OSTCBCur->OSTCBStkPtr = 胶琶 器牢磐;
	;----------------------------------------------------------------------------------		
	LDR		R0, =OSTCBCur
	LDR		R0, [R0]
	STR		SP, [R0]
	
	;----------------------------------------------------------------------------------		
	; OSTaskSwHook();
	;----------------------------------------------------------------------------------	
	BL 		OSTaskSwHook

	;----------------------------------------------------------------------------------			
	; OSTCBCur = OSTCBHighRdy;
	;----------------------------------------------------------------------------------		
	LDR		R0, =OSTCBHighRdy
	LDR		R1, =OSTCBCur
	LDR		R0, [R0]
	STR		R0, [R1]
	
	;----------------------------------------------------------------------------------		
	; OSPrioCur = OSPrioHighRdy;
	;----------------------------------------------------------------------------------		
	LDR		R0, =OSPrioHighRdy
	LDR		R1, =OSPrioCur
	LDRB	R0, [R0]
	STRB	R0, [R1]
	
	;----------------------------------------------------------------------------------		
	; 犁角青且 怕胶农狼 胶琶 器牢磐 汗备:
	; 		胶琶 器牢磐 = OSTCBHighRdy->OSTCBStkPtr;
	;----------------------------------------------------------------------------------		
	LDR		R0, =OSTCBHighRdy
	LDR		R0, [R0]
	LDR		R0, [R0]
	MOV		SP, R0

	;----------------------------------------------------------------------------------	
	; 犁角青且 怕胶农狼 胶琶栏肺何磐 橇肺技辑 饭瘤胶磐 汗备;
	;----------------------------------------------------------------------------------	
	LDMFD 	SP!, {R0}		
	MSR 	SPSR_cxsf, R0
	LDMFD 	SP!, {R0}		
	MSR		CPSR_cxsf, R0
	LDMFD 	SP!, {R0-R12, LR, PC}	

	
;*********************************************************************************************************
;                                            TICK HANDLER
;
; Description:  
;     This handles all the Timer4(INT_TIMER4) interrupt which is used to generate the uC/OS-II tick.
;*********************************************************************************************************
OSTickISR
	;----------------------------------------------------------------------------------	
	; 橇肺技辑 饭瘤胶磐 历厘
	;----------------------------------------------------------------------------------	
	STMFD   SP!, {R0-R3, R12, LR}
        

⌨️ 快捷键说明

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