📄 tct.s
字号:
;/*************************************************************************/;/* */;/* Copyright (c) 1993-1996 Accelerated Technology, Inc. */;/* */;/* PROPRIETARY RIGHTS of Accelerated Technology are involved in the */;/* subject matter of this material. All manufacturing, reproduction, */;/* use, and sales rights pertaining to this subject matter are governed */;/* by the license agreement. The recipient of this software implicitly */;/* accepts the terms of the license. */;/* */;/*************************************************************************/;;/*************************************************************************/;/* */;/* FILE NAME VERSION */;/* */;/* tct.s PLUS/MCF5204_06/D 1.2 */;/* */;/* COMPONENT */;/* */;/* TC - Thread Control */;/* */;/* DESCRIPTION */;/* */;/* This file contains the target processor dependent routines for */;/* performing target-dependent scheduling functions. */;/* */;/* AUTHOR */;/* */;/* Barry Sellew, Accelerated Technology, Inc. */;/* */;/* DATA STRUCTURES */;/* */;/* None */;/* */;/* FUNCTIONS */;/* */;/* TCT_Control_Interrupts Enable / disable interrupts */;/* TCT_Local_Control_Interrupts Local enable / disable ints */;/* TCT_Restore_Interrupts Restore global interrupt lck */;/* TCT_Build_Task_Stack Build initial task stack */;/* TCT_Build_HISR_Stack Build initial HISR stack */;/* TCT_Build_Signal_Frame Build signal handler frame */;/* TCT_Check_Stack Check current stack */;/* TCT_Schedule Schedule the next thread */;/* TCT_Control_To_Thread Transfer control to a thread */;/* TCT_Control_To_System Transfer control from thread */;/* TCT_Signal_Exit Exit from signal handler */;/* TCT_Current_Thread Returns a pointer to current */;/* thread */;/* TCT_Set_Execute_Task Sets TCD_Execute_Task under */;/* protection from interrupts */;/* TCT_Protect Protect critical section */;/* TCT_Unprotect Unprotect critical section */;/* TCT_Unprotect_Specific Release specific protection */;/* TCT_Set_Current_Protect Set the thread's current */;/* protection field */;/* TCT_Protect_Switch Switch to protected thread */;/* TCT_Schedule_Protected Schedule the protected thread*/;/* TCT_Interrupt_Context_Save Save interrupted context */;/* TCT_Interrupt_Context_Restore Restore interrupted context */;/* TCT_Activate_HISR Activate a HISR */;/* TCT_HISR_Shell HISR execution shell */;/* TCT_Check_For_Preemption Check for preemption */;/* */;/* DEPENDENCIES */;/* */;/* cs_extr.h Common Service functions */;/* tc_extr.h Thread Control functions */;/* */;/* HISTORY */;/* */;/* NAME DATE REMARKS */;/* */;/* B. Sellew 02-21-1997 Created and verified version 1.0 */ */;/* B. Sellew 07-30-1997 Created and verified version 1.1 */ */;/* B. Sellew 11-06-1997 Created and verified version 1.2 */ */;/* */;/*************************************************************************/;#define NU_SOURCE_FILE;;#include "cs_extr.h" ;/* Common service functions */;#include "tc_extr.h" /* Thread control functions */;;;/* Define external inner-component global data references. */;;extern TC_TCB *TCD_Execute_Task;;extern TC_HCB *TCD_Execute_HISR;;extern VOID *TCD_Current_Thread;;extern VOID *TCD_System_Stack;;extern INT TCD_Interrupt_Count;;extern TC_HCB *TCD_Active_HISR_Heads[TC_HISR_PRIORITIES];;extern TC_HCB *TCD_Active_HISR_Tails[TC_HISR_PRIORITIES];;extern INT TCD_Interrupt_Level;;extern UNSIGNED TMD_Time_Slice;;extern INT TMD_Time_Slice_State;; XREF _OldSR XREF _TCD_Interrupt_Level XREF _TCD_Current_Thread XREF _TCD_Execute_HISR XREF _TCD_Execute_Task XREF _TMD_Time_Slice XREF _TMD_Time_Slice_State XREF _TCD_System_Stack XREF _TCD_Interrupt_Count XREF _TCD_Active_HISR_Tails XREF _TCD_Active_HISR_Heads;;;/* Define external function references. */;VOID TCC_Task_Shell(VOID);;VOID TCC_Signal_Shell(VOID);;VOID ERC_System_Error(INT error);; XREF _TCC_Task_Shell XREF _TCC_Signal_Shell XREF _ERC_System_Error;;;/* Define internal function references. */;VOID TCT_Schedule_Protected(VOID *thread);;; SECTION .bss;;/* Define the flag that determines if a nested condition is present ; before the actual interrupt counter can be incremented. */;;UNSIGNED TCT_Nested;; XDEF _TCT_Nested_TCT_Nested DS.B 4;;;/* Define the saved interrupt posture for use during interrupt processing. */;;UNSIGNED TCT_Interrupt_Level;; XDEF _TCT_Interrupt_Level_TCT_Interrupt_Level DS.B 4;;;/* Define internal interrupt lockout constant. This value must lockout any; interrupt that interfaces with Nucleus. */;LOCKOUT EQU $2700;;/* Define the interrupt lockout that protects the HISR activation lists. This; allows the user to make a HISR active from a high-priority non-managed ; ISR. This value must lockout all interrupts that are locked out by; the LOCKOUT equate, defined previously. */;HISRLOCK EQU $2700;;;/* Define initial SR value for tasks and HISRs. */;INIT_SR EQU $2000;; SECTION .text;/*************************************************************************/;/* */;/* FUNCTION */;/* */;/* TCT_Control_Interrupts */;/* */;/* DESCRIPTION */;/* */;/* This function enables and disables interrupts as specified by */;/* the caller. Interrupts disabled by this call are left disabled */;/* until the another call is made to enable them. */;/* */;/* AUTHOR */;/* */;/* Barry Sellew, Accelerated Technology, Inc. */;/* */;/* CALLED BY */;/* */;/* Application */;/* */;/* CALLS */;/* */;/* None */;/* */;/* INPUTS */;/* */;/* new_level New interrupt enable level */;/* */;/* OUTPUTS */;/* */;/* old_level Previous interrupt enable */;/* level */;/* */;/* HISTORY */;/* */;/* NAME DATE REMARKS */;/* */;/* B. Sellew 02-21-1997 Created and verified version 1.0 */ */;/* */;/*************************************************************************/ XDEF _TCT_Control_Interrupts_TCT_Control_Interrupts:;INT TCT_Control_Interrupts(new_level);{;;INT old_level; /* Old interrupt level */;; /* For the 52xx family, do not modify the actual interrupt level ; value inside of ISRs, since it is used to determine if nesting; has occurred prior to normal nesting detection logic. */; if (TCD_Interrupt_Count == 0); TCD_Interrupt_Level = new_level;; else; TCT_Interrupt_Level = new_level;; TST.L _TCD_Interrupt_Count ; Called from interrupt thread BNE _TCT_Interrupt_Thread ; Yes, use interrupt storage LEA _TCD_Interrupt_Level,A0 ; Point at normal interrupt level ; storage BRA _TCT_Continue ; _TCT_Interrupt_Thread: LEA _TCT_Interrupt_Level,A0 ; Point at interrupt level storage;; /* Obtain the current interrupt lockout posture. */; old_level = TCD_Interrupt_Level;;_TCT_Continue: CLR.L D0 ; Clear return value
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -