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