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

📄 os_cpu_a.asm

📁 ucos-IIv2.52在TMS320c6416上的移植
💻 ASM
字号:
;*********************************************************************
;*File:		OS_CPU_C.C -  V2.52 port for C6416
;*Author: 	Jean J. Labrosse
;*Data:		
;*modification history:
;	2006.04.20 rongjie revised content about C6416 
;*DESCRIPTION:
;	little endian, C code in relation to processor.
;*********************************************************************

;  PUBLIC and EXTERNAL REFERENCES

FP	.set	A15
DP	.set	B14
SP	.set	B15	
	.global _ctwRest
	.global _ctwSave
	
	.global _OSTaskSwHook		; extern function & var from other objects
    .global _OSTCBHighRdy
	.global _OSTCBCur
	.global _OSPrioCur
	.global _OSPrioHighRdy
	.global _OSRunning

	
	.def _DSP_C6x_GetCurrentSP
	.global	_DSP_C6x_GetCurrentDP
	
    .global _OSStartHighRdy
	.global _OSCtxSw
	.global _OSIntCtxSw
	
    .global _Disable_int ;
	.global _Restore_int ;

	
	
	
; /*$PAGE*/
;*********************************************************************************************************
;                                          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:

	B		_OSTaskSwHook
	NOP		3
	MVKL	L1,B3	
	MVKH	L1,B3   
	;return here from _OSTaskSwHook

	;OSRunning = TRUE
L1:	MVK		1,B1
    STB		B1,*+DP(_OSRunning)     

	; StackPointer = OSTCBHighRdy->OSTCBStkPtr    
	LDW		*+DP(_OSTCBHighRdy),B4
    nop		4	
    LDW		*B4,SP                 
    nop		4
    
    ;pop current task's context from stack
	;MVKL	_I$$SAVE, B1
	;MVKH	_I$$SAVE

	B		_ctwRest
	NOP		5		
; /*$PAGE*/
;*********************************************************************************************************
;
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
;*********************************************************************************************************

;	.align	32

_OSCtxSw:
    
	B		_ctwSave				;save context
	STW		B3, *SP--
	ADDK .S2	-4, SP
	MVC		B3, IRP
    MVKL	L2, B3
    MVKH    L2, B3
    NOP   
L2:	LDW		*+DP(_OSTCBCur), B0     ; B0 = OSTCBCur
    NOP		5
    STW		SP, *B0                 ; previous OSTCBCur->OSTCBStkPtr = SP ;
    
_OSIntCtxSw:			; form here, the same with _OSIntCtxSw

	B		_OSTaskSwHook			; invoke the OSTaskSwHook function
	NOP		3
	MVKL	L3,B3	
	MVKH	L3,B3   

L3:	; return here from _OSTaskSwHook
	
; OSTCBCur  = OSTCBHighRdy
; OSPrioCur = OSPrioHighRdy
	LDW		*+DP(_OSTCBHighRdy), B4
    LDB		*+DP(_OSPrioHighRdy), B5
    NOP		3
    STW     B4, *+DP(_OSTCBCur)      
    STB     B5, *+DP(_OSPrioCur)    

;pop current task's context from stack
	B		_ctwRest 
	LDW		*B4, SP                 
	
	nop		4;


	



; /*$PAGE*/
;******************************************************************************
;* FUNCTION NAME: _Disable_int		                                          *
;*                                                                            *
;*	Notes:	function for disable interrupt                                    *
;******************************************************************************
;.align	32
_Disable_int: ;
		mvc		CSR, B4
		and		1, B4, B0
 [!B0]	CLR 	B4, 1, 1, B4		
 [B0]	SET 	B4, 1, 1, B4
		CLR 	B4, 0, 0, B4
		mvc 	B4, CSR
		BNOP	B3, 5
		

; /*$PAGE*/
;******************************************************************************
;* FUNCTION NAME: _Enable_int: 		                                          *
;*                                                                            *
;*	Notes:	function for enable interrupt                                     *
;******************************************************************************
;.align	32
_Restore_int: ;
		mvc		CSR, B4
		and		2, B4, B0
 [!B0]	CLR 	B4, 0, 0, B4		
 [B0]	SET 	B4, 0, 0, B4
 		mvc		B4, CSR
		BNOP	B3, 5



; /*$PAGE*/
;******************************************************************************
;* FUNCTION NAME: _DSP_C6x_GetCurrentDP (It's used in OSTaskStkInit function)      *
;*                                                                            *
;*   Regs Modified     : A4                                                   *
;*   Regs Used         : A4,B3                                                *
;*   Local Frame Size  : 0 Args + 0 Auto + 0 Save = 0 byte                    *
;******************************************************************************
;.align	32

_DSP_C6x_GetCurrentDP:
           MV		DP, A4
           BNOP		B3, 5
           

; /*$PAGE*/
;******************************************************************************
;* FUNCTION NAME: _DSP_C6x_GetCurrentSP (It's used in any ISR function)      *
;*                                                                            *
;*   Regs Modified     : A4                                                   *
;*   Regs Used         : A4,B3                                                *
;*   Local Frame Size  : 0 Args + 0 Auto + 0 Save = 0 byte                    *
;******************************************************************************
;.align	32

_DSP_C6x_GetCurrentSP:
           mv		SP, A4
           BNOP		B3, 5

.end

⌨️ 快捷键说明

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