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

📄 os_cpu_a.asm

📁 这个UCOS II在TI2400DSP平台上的移植源代码
💻 ASM
字号:

	.def	_OSCtxSw, _OSIntCtxSw
	.def	_OSStartHighRdy
	
    .ref  _OSTCBHighRdy, _OSTaskSwHook, _OSRunning, _OSTCBCur
    .ref  _OSPrioCur, _OSPrioHighRdy
	
	.text 
;**************** Context Save and Restore Routines ************
;                                                        
;  CTX_SAVE and CTX_REST are just renamed versions of I$$SAVE 
;  and I$$REST, which you can extract from rts.src by using the
;  dspar utility. I'v also stripped away unrelated portions of 
;  code for clarify and 'C2400 Series specific.  - Ding Curie
; 
;**************************************************************
_CTX_SAVE:
     LARP     AR1            ; CURRENT ARP = STACK POINTER
     ADRK     1              ; SKIP TOP ELEMENT ON STACK

	 SST1     *+             ; SAVE STATUS REGISTERS
	 SST      *+

     SACH     *+             ; SAVE ACCUMULATOR
	 SACL     *+

	 ROVM			 		 ; turn off overflow mode
	 SPM	  0		 		 ; product shift count of 0

     SPH      *+		 	 ; SAVE P REGISTER
	 SPL      *+

     MPYK     1              ; SAVE T REGISTER
	 SPL      *+

	 SAR      AR0,*+         ; SAVE AUXILIARY REGISTERS
	 SAR      AR2,*+
	 SAR      AR3,*+
	 SAR      AR4,*+
	 SAR      AR5,*+
	 SAR      AR6,*+
	 SAR      AR7,*+

     POPD     *              ; POP RETURN ADDRESS OF i$$save
	 LAC      *              ; PUT RETURN ADDRESS IN ACCUMULATOR

     RPTK     6              ; SAVE REST OF HARDWARE STACK
	 POPD     *+   
	         
	 BACC                    ; RETURN TO INTERRUPT HANDLER


	
_CTX_REST:
	 MAR     *-              ; POINT TO TOP ELEMENT ON STACK 

	 RPTK    6               ; RESTORE TOP 6 ELEMENTS OF STACK
	 PSHD    *-              

	 LAR     AR7,*-          ; RESTORE ALL AUX REGISTERS EXCEPT AR1
	 LAR     AR6,*-
	 LAR     AR5,*-
	 LAR     AR4,*-
	 LAR     AR3,*-
	 LAR     AR2,*-
	 LAR     AR0,*-          

     MAR     *-              ; SKIP T REGISTER (FOR NOW)
	 LT      *+              
	 MPYK    1               ; RESTORE LOW PRODUCT REGISTER

	 LT      *-              ; RESTORE T REGISTER
	 MAR     *-              ; SKIP LOW PRODUCT REGISTER VALUE

	 LPH     *-              ; RESTORE HIGH PRODUCT REGISTER


	 ZALS    *-              ; RESTORE ACCUMULATOR
	 ADDH    *-

	 LST     *-              ; RESTORE STATUS REGISTERS
	 LST1    *-		 ; OLD ARP IS RESTORED *NOW*

	 EINT                    ; RESTORE INTERRUPTS
	 RET                     ; RETURN TO INTERRUPTED CODE


;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; Note : OSStartHighRdy() MUST:
;           a) Call OSTaskSwHook() then,
;           b) Set OSRunning to TRUE,
;           c) Switch to the highest priority task.
;*********************************************************************************************************	
_OSStartHighRdy:
	CALL _OSTaskSwHook		; OSTaskSwHook();
	LACK	1				; OSRunning = TRUE;
	LDPK	_OSRunning
	SACL	_OSRunning
	LDPK	_OSTCBHighRdy	; SP = OSTCBHighRdy->OSTCBStkPtr;
	LAR 	AR3, _OSTCBHighRdy
	MAR		*, AR3
	LAR		AR1, *
	
	B 		_CTX_REST, AR1	; Context restore & interrupt return
	
;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
; Note(s): 
;*********************************************************************************************************
_OSCtxSw:
	CALL	_CTX_SAVE
	LDPK 	_OSTCBCur		; OSTCBCur->OSTCBStkPtr = SP;
	LAR 	AR3, _OSTCBCur	; 
	MAR		*, AR3
	SAR		AR1, * , AR1
	
_OSIntCtxSw:
	CALL	_OSTaskSwHook				; OSTaskSwHook();
	LDPK	_OSTCBHighRdy				; OSTCBCur = OSTCBHighRdy;
	BLDD	_OSTCBHighRdy,#_OSTCBCur
	LDPK	_OSPrioHighRdy				; OSPrioCur = OSPrioHighRdy;
	BLDD	_OSPrioHighRdy,#_OSPrioCur
	LDPK 	_OSTCBHighRdy				; SP = OSTCBHighRdy->OSTCBStkPtr;
	LAR		AR3, _OSTCBHighRdy 
	MAR		*, AR3
	LAR		AR1, *
	
	B		_CTX_REST, AR1

;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From an ISR)
;                                        void OSIntCtxSw(void)
;
; Note(s): See above.
;*********************************************************************************************************


.end 

		

	

⌨️ 快捷键说明

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