FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/nucleus/tct.S @ 214:bdfdea886bea
gsm-fw/services/ffs: ffs_env.c and ffstrace.c compile
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Mon, 06 Jan 2014 04:43:21 +0000 | 
| parents | afceeeb2cba1 | 
| children | 962f0d3a4e7e | 
| rev | line source | 
|---|---|
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
3 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
4 * Copyright Mentor Graphics Corporation 2002 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
5 * All Rights Reserved. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
6 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
7 * THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
8 * THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
9 * SUBJECT TO LICENSE TERMS. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
10 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
11 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
12 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
13 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
14 * FILE NAME VERSION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
15 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
16 * tct.s Nucleus PLUS\ARM925\Code Composer 1.14.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
17 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
18 * COMPONENT | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
19 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
20 * TC - Thread Control | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
21 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
22 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
23 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
24 * This file contains the target processor dependent routines for | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
25 * performing target-dependent scheduling functions. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
26 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
27 * FUNCTIONS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
28 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
29 * TCT_Control_Interrupts Enable / disable interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
30 * by changing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
31 * TCD_Interrupt_Level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
32 * TCT_Local_Control_Interrupts Enable/disable interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
33 * by not changing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
34 * TCD_Interrupt_Level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
35 * TCT_Restore_Interrupts Restores interrupts to the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
36 * level in TCD_Interrupt_Level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
37 * TCT_Build_Task_Stack Build initial task stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
38 * TCT_Build_HISR_Stack Build initial HISR stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
39 * TCT_Build_Signal_Frame Build signal handler frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
40 * TCT_Check_Stack Check current stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
41 * TCT_Schedule Schedule the next thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
42 * TCT_Control_To_Thread Transfer control to a thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
43 * TCT_Control_To_System Transfer control from thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
44 * TCT_Signal_Exit Exit from signal handler | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
45 * TCT_Current_Thread Returns a pointer to current | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
46 * thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
47 * TCT_Set_Execute_Task Sets TCD_Execute_Task under | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
48 * protection from interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
49 * TCT_Protect Protect critical section | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
50 * TCT_Unprotect Unprotect critical section | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
51 * TCT_Unprotect_Specific Release specific protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
52 * TCT_Set_Current_Protect Set the thread's current | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
53 * protection field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
54 * TCT_Protect_Switch Switch to protected thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
55 * TCT_Schedule_Protected Schedule the protected thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
56 * TCT_Interrupt_Context_Save Save interrupted context | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
57 * TCT_Interrupt_Context_Restore Restore interrupted context | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
58 * TCT_Activate_HISR Activate a HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
59 * TCT_HISR_Shell HISR execution shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
60 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
61 * DEPENDENCIES | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
62 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
63 * cs_extr.h Common Service functions | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
64 * tc_extr.h Thread Control functions | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
65 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
66 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
67 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
68 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
69 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
70 * B. Ronquillo 08-28-2002 Released version 1.14.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
71 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
72 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
73 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
74 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
75 #define NU_SOURCE_FILE | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
76 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
77 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
78 ****************************** | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
79 * INCLUDE ASSEMBLY CONSTANTS * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
80 ****************************** | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
81 * Define constants used in low-level initialization. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
82 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
83 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
84 #include "asm_defs.h" | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
85 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
86 .code 32 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
87 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
88 /* TCT_System_Limit is a global variable defined in this module */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
89 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
90 .comm TCT_System_Limit,4,4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
91 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
92 .text | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
93 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
94 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
95 ********************************** | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
96 * LOCAL VARIABLE DECLARATIONS * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
97 ********************************** | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
98 * Define pointers to system variables so their addresses may be obtained in a | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
99 * pc-relative manner. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
100 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
101 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
102 System_Limit: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
103 .word TCT_System_Limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
104 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
105 Int_Level: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
106 .word TCD_Interrupt_Level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
107 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
108 Task_Shell: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
109 .word TCC_Task_Shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
110 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
111 HISR_Shell: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
112 .word TCT_HISR_Shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
113 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
114 Signal_Shell: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
115 .word TCC_Signal_Shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
116 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
117 Current_Thread: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
118 .word TCD_Current_Thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
119 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
120 Execute_HISR: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
121 .word TCD_Execute_HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
122 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
123 Execute_Task: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
124 .word TCD_Execute_Task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
125 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
126 Time_Slice: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
127 .word TMD_Time_Slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
128 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
129 Slice_State: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
130 .word TMD_Time_Slice_State | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
131 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
132 System_Stack: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
133 .word TCD_System_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
134 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
135 Int_Count: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
136 .word TCD_Interrupt_Count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
137 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
138 HISR_Tails: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
139 .word TCD_Active_HISR_Tails | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
140 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
141 HISR_Heads: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
142 .word TCD_Active_HISR_Heads | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
143 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
144 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
145 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
146 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
147 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
148 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
149 * TCT_Control_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
150 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
151 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
152 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
153 * This function enables and disables interrupts as specified by | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
154 * the caller. Interrupts disabled by this call are left disabled | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
155 * until the another call is made to enable them. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
156 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
157 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
158 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
159 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
160 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
161 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
162 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
163 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
164 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
165 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
166 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
167 * new_level New interrupt enable level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
168 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
169 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
170 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
171 * old_level Previous interrupt enable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
172 * level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
173 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
174 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
175 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
176 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
177 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
178 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
179 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
180 * C. Meredith 03-01-1994 Lockout interrupts while setting | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
181 * up the new level, resutling in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
182 * version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
183 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
184 * M. Trippi 02-03-1997 Masked the return value to only | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
185 * return the interrupt bits. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
186 * (SPR0252) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
187 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
188 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
189 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
190 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
191 @INT TCT_Control_Interrupts (INT new_level) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
192 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
193 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
194 .globl TCT_Control_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
195 TCT_Control_Interrupts: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
196 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
197 @INT old_level; Old interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
198 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
199 @ lock out all interrupts before any checking or changing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
200 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
201 @ Obtain the current interrupt lockout posture. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
202 @ old_level = TCD_Interrupt_Level; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
203 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
204 @ Setup new interrupt lockout posture. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
205 @ TCD_Interrupt_Level = new_level; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
206 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
207 @ renable interrupts for the specified lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
208 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
209 @ Return old interrupt lockout level. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
210 @ return(old_level); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
211 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
212 MRS r2,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
213 ORR r2,r2,#LOCKOUT @ Build lockout CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
214 MSR CPSR,r2 @ Lockout interrupts temporarily | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
215 LDR r1, Int_Level @ Pickup interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
216 LDR r3,[r1, #0] @ Pickup current interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
217 BIC r2,r2,#LOCK_MSK @ Clear lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
218 ORR r2,r2,r0 @ Build new CPSR with appropriate | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
219 @ interrupts locked out | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
220 STR r0,[r1,#0] @ Save current lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
221 MSR CPSR,r2 @ Setup new CPSR lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
222 AND r0,r3,#LOCK_MSK @ Return previous lockout (SPR0252) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
223 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
224 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
225 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
226 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
227 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
228 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
229 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
230 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
231 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
232 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
233 * TCT_Local_Control_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
234 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
235 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
236 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
237 * This function enables and disables interrupts as specified by | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
238 * the caller. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
239 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
240 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
241 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
242 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
243 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
244 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
245 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
246 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
247 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
248 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
249 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
250 * new_level New interrupt enable level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
251 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
252 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
253 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
254 * old_level Previous interrupt enable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
255 * level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
256 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
257 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
258 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
259 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
260 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
261 * C. Meredith 03-01-1994 Created initial version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
262 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
263 * M. Trippi 02-03-1997 Masked the return value to only | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
264 * return the interrupt bits. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
265 * (SPR0252) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
266 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
267 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
268 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
269 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
270 @INT TCT_Local_Control_Interrupts (INT new_level) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
271 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
272 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
273 .globl TCT_Local_Control_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
274 TCT_Local_Control_Interrupts: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
275 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
276 @INT old_level; Old interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
277 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
278 @ read in the old level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
279 @ old_level = current interrupt level of processor; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
280 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
281 MRS r2,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
282 MOV r3,r2 @ save the old level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
283 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
284 @ clear out the old level and set the new level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
285 @ current interrupt level of processor &= ~LOCKOUT; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
286 @ current interrupt level of processor |= new_level; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
287 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
288 BIC r2,r2,#LOCK_MSK @ Clear all current interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
289 ORR r2,r2,r0 @ Build new CPSR with new | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
290 @ interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
291 MSR CPSR,r2 @ Setup new CPSR interrupt bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
292 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
293 @ Return old interrupt lockout level. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
294 @ return(old_level); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
295 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
296 AND r0,r3,#LOCK_MSK @ Return previous lockout (SPR0252) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
297 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
298 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
299 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
300 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
301 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
302 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
303 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
304 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
305 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
306 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
307 * TCT_Restore_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
308 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
309 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
310 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
311 * This function restores interrupts to that specified in the global | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
312 * TCD_Interrupt_Level variable. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
313 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
314 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
315 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
316 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
317 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
318 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
319 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
320 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
321 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
322 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
323 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
324 * None. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
325 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
326 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
327 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
328 * None. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
329 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
330 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
331 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
332 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
333 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
334 * C. Meredith 03-01-1994 Created initial version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
335 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
336 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
337 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
338 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
339 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
340 @VOID TCT_Restore_Interrupts (VOID) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
341 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
342 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
343 .globl TCT_Restore_Interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
344 TCT_Restore_Interrupts: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
345 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
346 @ Lock out all interrupts before any checking or changing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
347 @ Obtain the current interrupt lockout posture. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
348 @ Reload the level base on the TCD_Interrupt_Level variable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
349 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
350 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
351 MOV r2,r1 @ save the CPSR value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
352 ORR r1,r1,#LOCKOUT @ Build lockout CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
353 MSR CPSR,r1 @ Lockout interrupts temporarily | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
354 BIC r2,r2,#LOCK_MSK @ Clear current interrupt levels | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
355 LDR r1,Int_Level @ Load address of TCD_Interrupt_Level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
356 LDR r0,[r1, #0] @ Pickup current interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
357 ORR r2,r2,r0 @ Build new CPSR with appropriate | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
358 @ interrupts locked out | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
359 MSR CPSR,r2 @ Setup new CPSR lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
360 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
361 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
362 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
363 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
364 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
365 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
366 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
367 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
368 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
369 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
370 * TCT_Build_Task_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
371 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
372 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
373 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
374 * This function builds an initial stack frame for a task. The | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
375 * initial stack contains information concerning initial values of | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
376 * registers and the task's point of entry. Furthermore, the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
377 * initial stack frame is in the same form as an interrupt stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
378 * frame. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
379 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
380 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
381 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
382 * TCC_Create_Task Create a new task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
383 * TCC_Reset_Task Reset the specified task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
384 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
385 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
386 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
387 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
388 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
389 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
390 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
391 * task Task control block pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
392 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
393 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
394 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
395 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
396 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
397 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
398 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
399 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
400 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
401 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
402 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
403 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
404 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
405 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
406 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
407 @VOID TCT_Build_Task_Stack(TC_TCB *task) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
408 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
409 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
410 .globl TCT_Build_Task_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
411 TCT_Build_Task_Stack: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
412 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
413 @ Pickup the stack base. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
414 @ REG_Stack_Base = (BYTE_PTR) task -> tc_stack_start; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
415 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
416 LDR r2,[r0,#0x24] @ Pickup the stack starting address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
417 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
418 @ Pickup the stack size. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
419 @ REG_Stack_Size = task -> tc_stack_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
420 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
421 LDR r1,[r0,#0x30] @ Pickup the stack size in bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
422 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
423 @ Calculate the stack ending address. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
424 @ REG_Stack_End = REG_Stack_Base + REG_Stack_Size - 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
425 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
426 ADD r3,r1,r2 @ Compute the beginning of stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
427 BIC r3,r3,#3 @ Insure word alignment | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
428 SUB r3,r3,#4 @ Reserve a word | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
429 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
430 @ Save the stack ending address. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
431 @ task -> tc_stack_end = REG_Stack_End; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
432 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
433 STR r3,[r0,#0x28] @ Save the stack ending address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
434 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
435 @ Reference the task shell. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
436 @ REG_Function_Ptr = (VOID *) TCC_Task_Shell; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
437 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
438 @ Build an initial stack. This initial stack frame facilitates an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
439 @ interrupt return to the TCC_Task_Shell function, which in turn | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
440 @ invokes the application task. The initial stack frame has the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
441 @ following format: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
442 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
443 @ (Lower Address) Stack Top -> 1 (Interrupt stack type) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
444 @ CPSR Saved CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
445 @ r0 Saved r0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
446 @ r1 Saved r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
447 @ r2 Saved r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
448 @ r3 Saved r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
449 @ r4 Saved r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
450 @ r5 Saved r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
451 @ r6 Saved r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
452 @ r7 Saved r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
453 @ r8 Saved r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
454 @ r9/sb Saved r9/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
455 @ r10/sl Saved r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
456 @ fp Saved fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
457 @ r12 Saved r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
458 @ r13 Saved r13 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
459 @ r14 Saved r14 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
460 @ (Higher Address) Stack Bottom-> r15 Saved r15 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
461 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
462 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
463 LDR r2, Task_Shell @ Pickup address of shell entry | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
464 STR r2,[r3], #-4 @ Store entry address on stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
465 MOV r2,#0 @ Clear value for initial registers | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
466 STR r2,[r3], #-4 @ Store initial r14 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
467 ADD r2,r3,#8 @ Compute initial r13 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
468 STR r2,[r3], #-4 @ Store initial r13 (Stack Bottom) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
469 STR r2,[r3], #-4 @ Store initial r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
470 STR r2,[r3], #-4 @ Store initial fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
471 LDR r2,[r0,#0x24] @ Pickup the stack starting address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
472 STR r2,[r3], #-4 @ Store initial r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
473 MOV r2,#0 @ Clear value for initial registers | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
474 STR r2,[r3], #-4 @ Store initial r9/sb | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
475 STR r2,[r3], #-4 @ Store initial r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
476 STR r2,[r3], #-4 @ Store initial r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
477 STR r2,[r3], #-4 @ Store initial r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
478 STR r2,[r3], #-4 @ Store initial r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
479 STR r2,[r3], #-4 @ Store initial r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
480 STR r2,[r3], #-4 @ Store initial r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
481 STR r2,[r3], #-4 @ Store initial r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
482 STR r2,[r3], #-4 @ Store initial r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
483 STR r2,[r3], #-4 @ Store initial r0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
484 MSR CPSR_f,r2 @ Clear the flags | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
485 MRS r2,CPSR @ Pickup the CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
486 BIC r2,r2,#LOCK_MSK @ Clear initial interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
487 STR r2,[r3], #-4 @ Store CPSR on the initial stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
488 MOV r2,#1 @ Build interrupt stack type (1) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
489 STR r2,[r3, #0] @ Store stack type on the top | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
490 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
491 @ Save the minimum amount of remaining stack memory. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
492 @ task -> tc_stack_minimum = REG_Stack_Size - 72; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
493 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
494 MOV r2,#72 @ Size of interrupt stack frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
495 SUB r1,r1,r2 @ Compute minimum available bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
496 STR r1,[r0, #0x34] @ Save in minimum stack area | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
497 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
498 @ Save the new stack pointer into the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
499 @ task -> tc_stack_pointer = (VOID *) Stack_Top; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
500 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
501 STR r3,[r0, #0x2C] @ Save stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
502 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
503 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
504 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
505 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
506 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
507 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
508 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
509 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
510 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
511 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
512 * TCT_Build_HISR_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
513 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
514 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
515 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
516 * This function builds an HISR stack frame that allows quick | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
517 * scheduling of the HISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
518 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
519 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
520 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
521 * TCC_Create_HISR Create HISR function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
522 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
523 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
524 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
525 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
526 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
527 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
528 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
529 * hisr HISR control block pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
530 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
531 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
532 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
533 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
534 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
535 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
536 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
537 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
538 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
539 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
540 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
541 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
542 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
543 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
544 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
545 @VOID TCT_Build_HISR_Stack(TC_HCB *hisr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
546 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
547 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
548 .globl TCT_Build_HISR_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
549 TCT_Build_HISR_Stack: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
550 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
551 @ Pickup the stack base. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
552 @ REG_Stack_Base = (BYTE_PTR) hisr -> tc_stack_start; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
553 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
554 LDR r2,[r0,#0x24] @ Pickup the stack starting address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
555 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
556 @ Pickup the stack size. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
557 @ REG_Stack_Size = hisr -> tc_stack_size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
558 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
559 LDR r1,[r0,#0x30] @ Pickup the stack size in bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
560 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
561 @ Calculate the stack ending address. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
562 @ REG_Stack_End = REG_Stack_Base + REG_Stack_Size; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
563 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
564 ADD r3,r1,r2 @ Compute the beginning of stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
565 BIC r3,r3,#3 @ Insure word alignment | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
566 SUB r3,r3,#4 @ Reserve a word | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
567 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
568 @ Save the stack ending address. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
569 @ hisr -> tc_stack_end = REG_Stack_End; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
570 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
571 STR r3,[r0,#0x28] @ Save the stack ending address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
572 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
573 @ Reference the HISR shell. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
574 @ REG_Function_Ptr = (VOID *) TCT_HISR_Shell; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
575 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
576 @ Build an initial stack. This initial stack frame facilitates an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
577 @ solicited return to the TCT_HISR_Shell function, which in turn | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
578 @ invokes the appropriate HISR. The initial HISR stack frame has the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
579 @ following format: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
580 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
581 @ (Lower Address) Stack Top -> 0 (Solicited stack type) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
582 @ !!FOR THUMB ONLY!! 0/0x20 Saved state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
583 @ r4 Saved r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
584 @ r5 Saved r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
585 @ r6 Saved r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
586 @ r7 Saved r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
587 @ r8 Saved r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
588 @ r9/sb Saved r9/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
589 @ r10/sl Saved r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
590 @ fp Saved fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
591 @ r12 Saved r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
592 @ (Higher Address) Stack Bottom-> r15 Saved r15 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
593 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
594 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
595 LDR r2,HISR_Shell @ Pickup address of shell entry | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
596 STR r2,[r3], #-4 @ Store entry address on stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
597 ADD r2,r3,#4 @ Compute initial r13 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
598 STR r2,[r3], #-4 @ Store initial r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
599 STR r2,[r3], #-4 @ Store initial fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
600 LDR r2,[r0,#0x24] @ Pickup the stack starting address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
601 STR r2,[r3], #-4 @ Store initial r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
602 MOV r2,#0 @ Clear value for initial registers | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
603 STR r2,[r3], #-4 @ Store initial r9/sb | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
604 STR r2,[r3], #-4 @ Store initial r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
605 STR r2,[r3], #-4 @ Store initial r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
606 STR r2,[r3], #-4 @ Store initial r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
607 STR r2,[r3], #-4 @ Store initial r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
608 STR r2,[r3], #-4 @ Store initial r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
609 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
610 STR r2,[r3], #-4 @ Store initial state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
611 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
612 STR r2,[r3, #0] @ Store solicited stack type on the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
613 @ top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
614 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
615 @ Save the minimum amount of remaining stack memory. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
616 @ hisr -> tc_stack_minimum = REG_Stack_Size - (ARM)44 or (THUMB)48; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
617 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
618 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
619 MOV r2,#48 @ Size of solicited stack frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
620 #else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
621 MOV r2,#44 @ Size of solicited stack frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
622 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
623 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
624 SUB r1,r1,r2 @ Compute minimum available bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
625 STR r1,[r0, #0x34] @ Save in minimum stack area | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
626 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
627 @ Save the new stack pointer into the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
628 @ hisr -> tc_stack_pointer = (VOID *) Stack_Top; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
629 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
630 STR r3,[r0, #0x2C] @ Save stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
631 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
632 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
633 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
634 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
635 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
636 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
637 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
638 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
639 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
640 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
641 * TCT_Build_Signal_Frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
642 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
643 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
644 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
645 * This function builds a frame on top of the task's stack to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
646 * cause the task's signal handler to execute the next time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
647 * the task is executed. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
648 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
649 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
650 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
651 * TCC_Send_Signals Send signals to a task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
652 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
653 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
654 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
655 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
656 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
657 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
658 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
659 * task Task control block pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
660 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
661 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
662 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
663 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
664 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
665 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
666 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
667 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
668 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
669 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
670 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
671 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
672 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
673 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
674 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
675 @VOID TCT_Build_Signal_Frame(TC_TCB *task) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
676 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
677 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
678 .globl TCT_Build_Signal_Frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
679 TCT_Build_Signal_Frame: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
680 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
681 @ Pickup the stack pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
682 @ REG_Stack_Ptr = (BYTE_PTR) task -> tc_stack_pointer; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
683 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
684 LDR r3,[r0,#0x2c] @ Pickup the current stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
685 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
686 @ Reference the Signal shell. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
687 @ REG_Function_Ptr = (VOID *) TCC_Signal_Shell; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
688 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
689 @ Build a signal stack. This signal stack frame facilitates an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
690 @ solicited return to the TCC_Signal_Shell function, which in turn | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
691 @ invokes the appropriate signal handler. The initial HISR stack frame | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
692 @ has the following format: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
693 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
694 @ (Lower Address) Stack Top -> 0 (Solicited stack type) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
695 @ !!FOR THUMB ONLY!! 0/0x20 Saved state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
696 @ r4 Saved r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
697 @ r5 Saved r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
698 @ r6 Saved r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
699 @ r7 Saved r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
700 @ r8 Saved r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
701 @ r9/sb Saved r9/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
702 @ r10/sl Saved r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
703 @ fp Saved fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
704 @ r12 Saved r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
705 @ (Higher Address) Stack Bottom-> r15 Saved r15 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
706 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
707 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
708 LDR r2,Signal_Shell @ Pickup address of shell entry | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
709 SUB r3,r3,#4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
710 STR r2,[r3], #-4 @ Store entry address on stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
711 ADD r2,r3,#4 @ Compute initial r13 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
712 STR r2,[r3], #-4 @ Store initial r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
713 STR r2,[r3], #-4 @ Store initial fp | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
714 LDR r2,[r0,#0x24] @ Pickup the stack starting address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
715 STR r2,[r3], #-4 @ Store initial r10/sl | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
716 MOV r2,#0 @ Clear value for initial registers | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
717 STR r2,[r3], #-4 @ Store initial r9/sb | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
718 STR r2,[r3], #-4 @ Store initial r8 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
719 STR r2,[r3], #-4 @ Store initial r7 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
720 STR r2,[r3], #-4 @ Store initial r6 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
721 STR r2,[r3], #-4 @ Store initial r5 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
722 STR r2,[r3], #-4 @ Store initial r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
723 #if 0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
724 MOV r1,#0x20 @ Get initial state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
725 STR r1,[r3], #-4 @ Store initial state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
726 #else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
727 STR r2,[r3], #-4 @ TCC_Signal_Shell is an ARM proc | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
728 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
729 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
730 STR r2,[r3, #0] @ Store solicited stack type on the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
731 @ top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
732 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
733 @ Save the new stack pointer into the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
734 @ task -> tc_stack_pointer = (VOID *) (REG_Stack_Ptr - REG_Stack_Size); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
735 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
736 STR r3,[r0, #0x2C] @ Save stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
737 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
738 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
739 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
740 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
741 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
742 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
743 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
744 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
745 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
746 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
747 * TCT_Check_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
748 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
749 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
750 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
751 * This function checks the current stack for overflow conditions. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
752 * Additionally, this function keeps track of the minimum amount | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
753 * of stack space for the calling thread and returns the current | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
754 * available stack space. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
755 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
756 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
757 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
758 * TCC_Send_Signals Send signals to a task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
759 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
760 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
761 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
762 * ERC_System_Error System error handler | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
763 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
764 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
765 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
766 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
767 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
768 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
769 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
770 * available bytes in stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
771 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
772 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
773 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
774 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
775 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
776 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
777 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
778 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
779 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
780 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
781 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
782 @UNSIGNED TCT_Check_Stack(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
783 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
784 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
785 .globl TCT_Check_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
786 TCT_Check_Stack: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
787 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
788 @TC_TCB *thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
789 @UNSIGNED remaining; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
790 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
791 @ Pickup the current task/HISR pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
792 @ thread = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
793 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
794 LDR r0,Current_Thread @ Pickup address of thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
795 LDR r0,[r0,#0] @ Pickup thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
796 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
797 @ Determine if there is a current thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
798 @ if (thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
799 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
800 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
801 CMP r0,#0 @ Determine if a thread is active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
802 MOV r3,#0 @ Default remaining value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
803 BEQ TCT_Skip_Stack_Check @ If NU_NULL, skip stack checking | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
804 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
805 @ Determine if the stack pointers are out of range. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
806 @ if ((thread -> tc_stack_pointer < thread -> tc_stack_start) || | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
807 @ (thread -> tc_stack_pointer > thread -> tc_stack_end)) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
808 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
809 LDR r2,[r0,#0x24] @ Pickup start of stack area | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
810 CMP r13,r2 @ Compare with current stack ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
811 BLT TCT_Stack_Range_Error @ If less, stack is out of range | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
812 LDR r1,[r0,#0x28] @ Pickup end of stack area | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
813 CMP r13,r1 @ Compare with current stack ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
814 BLE TCT_Stack_Range_Okay @ If less, stack range is okay | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
815 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
816 @ Stack overflow condition exits. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
817 @ ERC_System_Error(NU_STACK_OVERFLOW); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
818 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
819 TCT_Stack_Range_Error: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
820 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
821 STR r14,[r13, #4]! @ Store r14 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
822 MOV r0,#3 @ Build NU_STACK_OVERFLOW code | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
823 BL ERC_System_Error @ Call system error handler. Note: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
824 @ control is not returned! | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
825 @ Examine stack to find return | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
826 @ address of this routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
827 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
828 TCT_Stack_Range_Okay: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
829 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
830 @ Calculate the amount of available space on the stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
831 @ remaining = (BYTE_PTR) thread -> tc_stack_pointer - | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
832 @ (BYTE_PTR) thread -> tc_stack_start; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
833 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
834 SUB r3,r13,r2 @ Calculate remaining stack size | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
835 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
836 @ Determine if there is enough memory on the stack to save all of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
837 @ registers. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
838 @ if (remaining < 80) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
839 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
840 CMP r3,#80 @ Is there enough room for an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
841 @ interrupt frame? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
842 BCS TCT_No_Stack_Error @ If so, no stack overflow yet | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
843 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
844 @ Stack overflow condition is about to happen. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
845 @ ERC_System_Error(NU_STACK_OVERFLOW); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
846 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
847 STR r14,[r13, #4]! @ Store r14 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
848 MOV r0,#3 @ Build NU_STACK_OVERFLOW code | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
849 BL ERC_System_Error @ Call system error handler. Note: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
850 @ control is not returned! | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
851 @ Examine stack to find return | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
852 @ address of this routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
853 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
854 TCT_No_Stack_Error: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
855 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
856 @ Determine if this is a new minimum amount of stack space. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
857 @ if (remaining < thread -> tc_stack_minimum) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
858 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
859 LDR r2,[r0,#0x34] | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
860 CMP r3,r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
861 STRCC r3,[r0,#0x34] | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
862 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
863 @ Save the new stack minimum. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
864 @ thread -> tc_stack_minimum = remaining; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
865 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
866 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
867 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
868 @ Set the remaining bytes to 0. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
869 @ remaining = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
870 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
871 @ Return the remaining number of bytes on the stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
872 @ return(remaining); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
873 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
874 TCT_Skip_Stack_Check: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
875 MOV r0,r3 @ Return remaining bytes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
876 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
877 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
878 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
879 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
880 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
881 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
882 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
883 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
884 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
885 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
886 * TCT_Schedule | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
887 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
888 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
889 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
890 * This function waits for a thread to become ready. Once a thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
891 * is ready, this function initiates a transfer of control to that | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
892 * thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
893 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
894 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
895 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
896 * INC_Initialize Main initialization routine | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
897 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
898 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
899 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
900 * TCT_Control_To_Thread Transfer control to a thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
901 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
902 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
903 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
904 * TCD_Execute_Task Pointer to task to execute | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
905 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
906 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
907 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
908 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
909 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
910 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
911 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
912 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
913 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
914 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
915 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
916 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
917 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
918 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
919 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
920 @VOID TCT_Schedule(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
921 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
922 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
923 .globl TCT_Schedule | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
924 TCT_Schedule: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
925 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
926 @ Restore interrupts according to the value contained in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
927 @ TCD_Interrupt_Level. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
928 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
929 LDR r1,Int_Level @ Build address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
930 MRS r0,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
931 LDR r2,[r1, #0] @ Pickup current interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
932 BIC r0,r0,#LOCK_MSK @ Clear the interrupt lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
933 ORR r0,r0,r2 @ Build new interrupt lockout CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
934 MSR CPSR,r0 @ Setup new CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
935 LDR r2,Execute_HISR @ Pickup TCD_Execute_HISR address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
936 LDR r3,Execute_Task @ Pickup TCD_Execute_Task address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
937 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
938 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
939 @ Nucleus ProView Hook | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
940 @ We check if upon entering TCT_Schedule we already have a task to excute. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
941 @ if not, we start IDLE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
942 LDR r0,[r2, #0] @ Pickup highest priority HISR ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
943 CMP r0,#0 @ Is there a HISR active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
944 BNE TCT_Schedule_Thread @ Found an HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
945 LDR r0,[r3, #0] @ Pickup highest priority Task ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
946 CMP r0,#0 @ Is there a task active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
947 BNE TCT_Schedule_Thread @ If not, start IDLE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
948 STR r2,[r13, #-4]! @ Save r2 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
949 STR r3,[r13, #-4]! @ Save r3 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
950 BL _NU_Idle_Hook | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
951 LDR r3,[r13], #4 @ Recover r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
952 LDR r2,[r13], #4 @ Recover r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
953 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
954 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
955 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
956 @ Wait until a thread (task or HISR) is available to execute. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
957 @ do | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
958 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
959 TCT_Schedule_Loop: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
960 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
961 @ } while ((!TCD_Execute_HISR) && (!TCD_Execute_Task)); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
962 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
963 LDR r0,[r2, #0] @ Pickup highest priority HISR ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
964 CMP r0,#0 @ Is there a HISR active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
965 BNE TCT_Schedule_Thread @ Found an HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
966 LDR r0,[r3, #0] @ Pickup highest priority Task ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
967 CMP r0,#0 @ Is there a task active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
968 BEQ TCT_Schedule_Loop @ If not, continue the search | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
969 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
970 @ Yes, either a task or an HISR is ready to execute. Lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
971 @ interrupts while the thread is transferred to. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
972 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
973 TCT_Schedule_Thread: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
974 MRS r1,CPSR @ Pickup CPSR again | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
975 ORR r1,r1,#LOCKOUT @ Build interrupt lockout value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
976 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
977 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
978 @ Transfer control to the thread by falling through to the following | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
979 @ routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
980 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
981 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
982 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
983 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
984 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
985 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
986 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
987 * TCT_Control_To_Thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
988 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
989 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
990 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
991 * This function transfers control to the specified thread. Each | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
992 * time control is transferred to a thread, its scheduled counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
993 * is incremented. Additionally, time-slicing for task threads is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
994 * enabled in this routine. The TCD_Current_Thread pointer is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
995 * setup by this function. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
996 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
997 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
998 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
999 * TCT_Schedule Indirectly called | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1000 * TCT_Protect Protection task switch | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1001 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1002 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1003 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1004 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1005 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1006 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1007 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1008 * thread Thread control block pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1009 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1010 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1011 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1012 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1013 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1014 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1015 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1016 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1017 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1018 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1019 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1020 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1021 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1022 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1023 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1024 @VOID TCT_Control_To_Thread(TC_TCB *thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1025 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1026 TCT_Control_To_Thread: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1027 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1028 @ Setup the current thread pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1029 @ TCD_Current_Thread = (VOID *) thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1030 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1031 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1032 LDR r2,[r0, #0x1c] @ Pickup scheduled count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1033 STR r0,[r1, #0] @ Setup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1034 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1035 @ Increment the thread scheduled counter. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1036 @ thread -> tc_scheduled++; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1037 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1038 LDR r3,[r0, #0x20] @ Pickup time slice value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1039 ADD r2,r2,#1 @ Increment the scheduled count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1040 STR r2,[r0, #0x1c] @ Store new scheduled count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1041 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1042 @ Check for time slice option. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1043 @ if (thread -> tc_cur_time_slice) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1044 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1045 CMP r3,#0 @ Is there a time slice? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1046 BEQ TCT_No_Start_TS_1 @ If 0, there is no time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1047 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1048 @ Start a time slice. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1049 @ TMD_Time_Slice = thread -> tc_cur_time_slice; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1050 @ TMD_Time_Slice_State = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1051 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1052 LDR r2,Time_Slice @ Pickup address of TMD_Time_Slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1053 LDR r1,Slice_State @ Pickup address of | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1054 @ TMD_Time_Slice_State | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1055 STR r3,[r2, #0] @ Setup the time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1056 MOV r2,#0 @ Build active state flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1057 STR r2,[r1,#0] @ Set the active flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1058 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1059 TCT_No_Start_TS_1: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1060 #ifdef INCLUDE_PROVIEW | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1061 @ Nucleus ProView Hook | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1062 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1063 STR r0,[r13, #-4]! @ Save r0 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1064 BL _NU_Schedule_Task_Hook @ Branch to RTView | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1065 LDR r0,[r13], #4 @ Recover return address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1066 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1067 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1068 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1069 @ Pickup the stack pointer and resume the thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1070 @ REG_Stack_Ptr = thread -> tc_stack_pointer; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1071 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1072 LDR r13,[r0, #0x2c] @ Switch to thread's stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1073 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1074 @ Pop off the saved information associated with the thread. After we | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1075 @ determine which type of stack is present. A 1 on the top of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1076 @ stack indicates an interrupt stack, while a 0 on the top of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1077 @ stack indicates a solicited type of stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1078 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1079 @ Remember that the interrupt level that is restored must represent | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1080 @ the interrupt level in TCD_Interrupt_Level. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1081 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1082 LDR r1,[r13], #4 @ Pop off the stack type | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1083 CMP r1,#1 @ See if it is an interrupt stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1084 BEQ TCT_Interrupt_Resume @ If so, an interrupt resume of | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1085 @ thread is required | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1086 LDR r1, Int_Level @ Pickup address of interrupt | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1087 @ lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1088 MRS r0,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1089 BIC r0,r0,#LOCK_MSK @ Clear lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1090 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1091 BIC r0,r0,#0x80000000 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1092 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1093 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1094 LDR r2,[r1, #0] @ Pickup interrupt lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1095 ORR r0,r0,r2 @ Build new interrupt lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1096 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1097 LDR r2,[r13], #4 @ Pop off the state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1098 ORR r0,r0,r2 @ Set appropriate state | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1099 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1100 MSR SPSR,r0 @ Place it into the SPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1101 LDMIA r13!,{r4-r12,r15}^ @ A solicited return is required. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1102 @ This type of return only | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1103 @ recovers r4-r13 & r15 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1104 TCT_Interrupt_Resume: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1105 LDR r0,[r13], #4 @ Pop off the CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1106 LDR r1,Int_Level @ Pickup address of interrupt | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1107 @ lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1108 BIC r0,r0,#LOCK_MSK @ Clear lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1109 LDR r2,[r1, #0] @ Pickup interrupt lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1110 ORR r0,r0,r2 @ Build new interrupt lockout mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1111 MSR SPSR,r0 @ Place it into the SPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1112 LDMIA r13,{r0-r15}^ @ Recover all registers and resume | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1113 @ at point of interrupt | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1114 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1115 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1116 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1117 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1118 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1119 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1120 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1121 * TCT_Control_To_System | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1122 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1123 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1124 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1125 * This function returns control from a thread to the system. Note | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1126 * that this service is called in a solicited manner, i.e. it is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1127 * not called from an interrupt thread. Registers required by the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1128 * compiler to be preserved across function boundaries are saved by | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1129 * this routine. Note that this is usually a sub-set of the total | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1130 * number of available registers. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1131 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1132 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1133 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1134 * Other Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1135 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1136 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1137 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1138 * TCT_Schedule Schedule the next thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1139 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1140 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1141 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1142 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1143 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1144 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1145 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1146 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1147 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1148 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1149 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1150 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1151 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1152 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1153 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1154 * C. Meredith 03-01-1994 Corrected problem in time-slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1155 * reset logic, resulting in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1156 * version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1157 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1158 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1159 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1160 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1161 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1162 @VOID TCT_Control_To_System(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1163 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1164 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1165 .globl TCT_Control_To_System | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1166 TCT_Control_To_System: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1167 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1168 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1169 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1170 MRS r0,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1171 ORR r0,r0,#LOCKOUT @ Build interrupt lockout value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1172 MSR CPSR,r0 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1173 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1174 @ Save a minimal context of the thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1175 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1176 STMDB r13!,{r4-r12,r14} @ Save minimal context of thread on | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1177 @ the current stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1178 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1179 MOV r2,r14 @ Determine what state the caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1180 MOV r2,r2,LSL #31 @ was in and build an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1181 MOV r2,r2,LSR #26 @ appropriate state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1182 STR r2,[r13, #-4]! @ Place it on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1183 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1184 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1185 MOV r2,#0 @ Build solicited stack type value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1186 @ and NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1187 STR r2,[r13, #-4]! @ Place it on the top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1188 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1189 @ Setup a pointer to the thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1190 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1191 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1192 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1193 LDR r0,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1194 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1195 @ Clear the current thread control block pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1196 @ TCD_Current_Thread = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1197 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1198 LDR r3,Slice_State @ Pickup time slice state address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1199 STR r2,[r1, #0] @ Set current thread pointer to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1200 @ NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1201 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1202 @ Check to see if a time slice is active. If so, copy the original time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1203 @ slice into the current time slice field of the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1204 @ if (TMD_Time_Slice_State == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1205 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1206 LDR r1,[r3, #0] @ Pickup time slice state flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1207 CMP r1,#0 @ Compare with active value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1208 BNE TCT_No_Stop_TS_1 @ If non-active, don't disable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1209 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1210 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1211 @ Insure that the next time the task runs it gets a fresh time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1212 @ slice. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1213 @ REG_Thread_Ptr -> tc_cur_time_slice = REG_Thread_Ptr -> tc_time_slice; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1214 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1215 LDR r1,[r0, #0x40] @ Pickup original time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1216 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1217 @ Clear any active time slice by setting the state to NOT_ACTIVE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1218 @ TMD_Time_Slice_State = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1219 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1220 MOV r2,#1 @ Build disable value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1221 STR r2,[r3, #0] @ Disable time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1222 STR r1,[r0, #0x20] @ Reset current time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1223 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1224 TCT_No_Stop_TS_1: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1225 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1226 @ Save off the current stack pointer in the control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1227 @ REG_Thread_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1228 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1229 STR r13,[r0, #0x2c] @ Save the thread's stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1230 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1231 @ Clear the task's current protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1232 @ (REG_Thread_Ptr -> tc_current_protect) -> tc_tcb_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1233 @ REG_Thread_Ptr -> tc_current_protect = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1234 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1235 LDR r1,[r0, #0x38] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1236 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1237 STR r2,[r0, #0x38] @ Clear the protect pointer field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1238 STR r2,[r1, #0] @ Release the actual protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1239 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1240 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1241 @ REG_Stack_Ptr = TCD_System_Stack; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1242 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1243 LDR r1, System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1244 LDR r2, System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1245 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1246 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1247 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1248 @ Finished, return to the scheduling loop. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1249 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1250 B TCT_Schedule @ Return to scheduling loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1251 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1252 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1253 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1254 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1255 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1256 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1257 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1258 * TCT_Signal_Exit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1259 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1260 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1261 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1262 * This function exits from a signal handler. The primary purpose | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1263 * of this function is to clear the scheduler protection and switch | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1264 * the stack pointer back to the normal task's stack pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1265 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1266 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1267 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1268 * TCC_Signal_Shell Signal handling shell func | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1269 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1270 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1271 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1272 * TCT_Schedule Scheduler | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1273 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1274 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1275 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1276 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1277 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1278 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1279 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1280 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1281 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1282 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1283 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1284 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1285 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1286 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1287 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1288 * C. Meredith 03-01-1994 Corrected problem in time-slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1289 * reset logic, resulting in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1290 * version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1291 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1292 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1293 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1294 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1295 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1296 @VOID TCT_Signal_Exit(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1297 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1298 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1299 .globl TCT_Signal_Exit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1300 TCT_Signal_Exit: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1301 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1302 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1303 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1304 MRS r3,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1305 ORR r3,r3,#LOCKOUT @ Build lockout value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1306 MSR CPSR,r3 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1307 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1308 @ Setup a pointer to the thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1309 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1310 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1311 LDR r1,Current_Thread @ Pickup address of thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1312 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1313 LDR r0,[r1,#0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1314 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1315 @ Clear the current thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1316 @ TCD_Current_Thread = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1317 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1318 LDR r3,Slice_State @ Pickup time slice state address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1319 STR r2,[r1, #0] @ Clear current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1320 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1321 @ Check to see if a time slice is active. If so, copy the original time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1322 @ slice into the current time slice field of the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1323 @ if (TMD_Time_Slice_State == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1324 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1325 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1326 LDR r1,[r3, #0] @ Pickup time slice state flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1327 CMP r1,#0 @ Compare with active value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1328 BNE TCT_No_Stop_TS_2 @ If non-active, don't disable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1329 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1330 @ Insure that the next time the task runs it gets a fresh time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1331 @ slice. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1332 @ REG_Thread_Ptr -> tc_cur_time_slice = REG_Thread_Ptr -> tc_time_slice; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1333 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1334 LDR r1,[r0, #0x40] @ Pickup original time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1335 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1336 @ Clear any active time slice by setting the state to NOT_ACTIVE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1337 @ TMD_Time_Slice_State = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1338 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1339 MOV r2,#1 @ Build disable value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1340 STR r2,[r3, #0] @ Disable time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1341 STR r1,[r0, #0x20] @ Reset current time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1342 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1343 TCT_No_Stop_TS_2: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1344 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1345 @ Switch back to the saved stack. The saved stack pointer was saved | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1346 @ before the signal frame was built. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1347 @ REG_Thread_Ptr -> tc_stack_pointer = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1348 @ REG_Thread_Ptr -> tc_saved_stack_ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1349 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1350 LDR r1,[r0, #0x3c] @ Pickup saved stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1351 STR r1,[r0, #0x2c] @ Place in current stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1352 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1353 @ Clear the task's current protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1354 @ (REG_Thread_Ptr -> tc_current_protect) -> tc_tcb_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1355 @ REG_Thread_Ptr -> tc_current_protect = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1356 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1357 LDR r1,[r0, #0x38] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1358 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1359 STR r2,[r0, #0x38] @ Clear the protect pointer field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1360 STR r2,[r1, #0] @ Release the actual protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1361 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1362 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1363 @ REG_Stack_Ptr = (BYTE_PTR) TCD_System_Stack; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1364 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1365 LDR r1, System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1366 LDR r2, System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1367 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1368 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1369 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1370 @ Finished, return to the scheduling loop. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1371 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1372 B TCT_Schedule @ Return to scheduling loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1373 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1374 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1375 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1376 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1377 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1378 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1379 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1380 * TCT_Current_Thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1381 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1382 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1383 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1384 * This function returns the current thread pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1385 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1386 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1387 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1388 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1389 * System Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1390 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1391 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1392 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1393 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1394 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1395 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1396 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1397 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1398 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1399 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1400 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1401 * Pointer to current thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1402 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1403 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1404 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1405 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1406 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1407 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1408 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1409 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1410 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1411 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1412 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1413 @VOID *TCT_Current_Thread(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1414 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1415 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1416 .globl TCT_Current_Thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1417 TCT_Current_Thread: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1418 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1419 @ Return the current thread pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1420 @ return(TCD_Current_Thread); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1421 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1422 LDR r0, Current_Thread @ Pickup address of thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1423 LDR r0,[r0, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1424 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1425 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1426 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1427 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1428 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1429 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1430 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1431 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1432 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1433 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1434 * TCT_Set_Execute_Task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1435 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1436 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1437 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1438 * This function sets the current task to execute variable under | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1439 * protection against interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1440 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1441 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1442 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1443 * TCC Scheduling Routines | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1444 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1445 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1446 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1447 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1448 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1449 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1450 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1451 * task Pointer to task control block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1452 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1453 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1454 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1455 * TCD_Execute_Task Modified variable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1456 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1457 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1458 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1459 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1460 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1461 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1462 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1463 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1464 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1465 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1466 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1467 @VOID TCT_Set_Execute_Task(TC_TCB *task) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1468 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1469 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1470 .globl TCT_Set_Execute_Task | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1471 TCT_Set_Execute_Task: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1472 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1473 @ Now setup the TCD_Execute_Task pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1474 @ TCD_Execute_Task = task; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1475 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1476 LDR r1, Execute_Task @ Pickup execute task ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1477 STR r0,[r1,#0] @ Setup new task to execute | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1478 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1479 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1480 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1481 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1482 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1483 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1484 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1485 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1486 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1487 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1488 * TCT_Protect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1489 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1490 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1491 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1492 * This function protects against multiple thread access. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1493 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1494 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1495 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1496 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1497 * System Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1498 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1499 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1500 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1501 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1502 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1503 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1504 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1505 * protect Pointer to protection block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1506 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1507 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1508 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1509 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1510 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1511 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1512 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1513 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1514 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1515 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1516 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1517 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1518 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1519 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1520 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1521 @VOID TCT_Protect(TC_PROTECT *protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1522 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1523 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1524 .globl TCT_Protect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1525 TCT_Protect: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1526 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1527 @ Determine if the caller is in a task or HISR thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1528 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1529 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1530 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1531 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1532 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1533 CMP r3,#0 @ Check to see if it is non-NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1534 BEQ TCT_Skip_Protect @ If NULL, skip protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1535 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1536 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1537 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1538 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1539 ORR r1,r1,#LOCKOUT @ Place lockout value in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1540 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1541 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1542 @ Wait until the protect structure is available. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1543 @ while (protect -> tc_tcb_pointer != NU_NULL) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1544 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1545 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1546 TCT_Protect_Loop: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1547 LDR r1,[r0, #0] @ Pickup protection owner field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1548 CMP r1,#0 @ Is there any protection? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1549 BEQ TCT_Protect_Available @ If NU_NULL, no current protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1550 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1551 @ Protection structure is not available. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1552 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1553 @ Indicate that another thread is waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1554 @ protect -> tc_thread_waiting = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1555 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1556 MOV r2,#1 @ Build thread waiting flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1557 STR r2,[r0, #4] @ Set waiting field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1558 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1559 @ Directly schedule the thread waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1560 @ TCT_Schedule_Protected(protect -> tc_tcb_pointer); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1561 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1562 STR r0,[r13, #-4]! @ Save r0 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1563 STR r14,[r13, #-4]! @ Save r14 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1564 MOV r0,r3 @ Place current thread into r0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1565 BL TCT_Schedule_Protected @ Call routine to schedule the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1566 @ owner of the thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1567 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1568 LDR r14,[r13], #4 @ Recover saved r14 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1569 LDR r0,[r13], #4 @ Recover saved r0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1570 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1571 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1572 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1573 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1574 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1575 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1576 ORR r1,r1,#LOCKOUT @ Place lockout value in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1577 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1578 B TCT_Protect_Loop @ Examine protect flags again | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1579 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1580 TCT_Protect_Available: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1581 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1582 @ Protection structure is available. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1583 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1584 @ Indicate that this thread owns the protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1585 @ protect -> tc_tcb_pointer = TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1586 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1587 STR r3,[r0, #0] @ Indicate calling thread owns this | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1588 @ protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1589 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1590 @ Clear the thread waiting flag. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1591 @ protect -> tc_thread_waiting = 0; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1592 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1593 MOV r2,#0 @ Clear value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1594 STR r2,[r0, #4] @ Clear the thread waiting flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1595 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1596 @ Save the protection pointer in the thread's control block. Note | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1597 @ that both task and HISR threads share the same control block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1598 @ format. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1599 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1600 @ REG_Thread_Ptr -> tc_current_protect = protect; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1601 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1602 STR r0,[r3, #0x38] @ Setup current protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1603 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1604 @ Restore interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1605 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1606 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1607 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1608 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1609 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1610 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1611 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1612 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1613 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1614 TCT_Skip_Protect: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1615 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1616 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1617 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1618 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1619 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1620 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1621 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1622 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1623 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1624 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1625 * TCT_Unprotect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1626 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1627 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1628 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1629 * This function releases protection of the currently active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1630 * thread. If the caller is not an active thread, then this | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1631 * request is ignored. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1632 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1633 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1634 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1635 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1636 * System Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1637 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1638 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1639 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1640 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1641 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1642 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1643 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1644 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1645 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1646 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1647 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1648 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1649 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1650 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1651 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1652 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1653 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1654 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1655 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1656 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1657 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1658 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1659 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1660 @VOID TCT_Unprotect(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1661 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1662 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1663 .globl TCT_Unprotect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1664 TCT_Unprotect: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1665 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1666 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1667 @ Determine if the caller is in a task or HISR thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1668 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1669 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1670 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1671 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1672 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1673 CMP r3,#0 @ Check to see if it is non-NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1674 BEQ TCT_Skip_Unprotect @ If NULL, skip unprotection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1675 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1676 @ Setup a thread control block pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1677 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1678 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1679 @ Determine if there is a currently active protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1680 @ if (REG_Thread_Ptr -> tc_current_protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1681 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1682 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1683 LDR r0,[r3, #0x38] @ Pickup current protect field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1684 CMP r0,#0 @ Is there a protection in force? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1685 BEQ TCT_Skip_Unprotect @ If not, nothing is protected | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1686 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1687 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1688 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1689 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1690 ORR r1,r1,#LOCKOUT @ Place lockout value in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1691 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1692 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1693 @ Yes, this thread still has this protection structure. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1694 @ REG_Protect_Ptr = REG_Thread_Ptr -> tc_current_protect; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1695 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1696 @ Is there a higher priority thread waiting for the protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1697 @ structure? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1698 @ if (REG_Protect_Ptr -> tc_thread_waiting) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1699 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1700 LDR r2,[r0, #4] @ Pickup thread waiting flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1701 CMP r2,#0 @ Are there any threads waiting? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1702 BEQ TCT_Not_Waiting_Unpr @ If not, just release protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1703 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1704 @ Transfer control to the system. Note that this | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1705 @ automatically clears the current protection and it returns | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1706 @ to the caller of this routine instead of this routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1707 @ TCT_Control_To_System(); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1708 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1709 B TCT_Control_To_System @ Return control to the system | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1710 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1711 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1712 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1713 TCT_Not_Waiting_Unpr: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1714 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1715 @ Clear the protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1716 @ REG_Thread_Ptr -> tc_current_protect = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1717 @ REG_Protect_Ptr -> tc_tcb_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1718 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1719 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1720 STR r2,[r0, #0] @ Release the protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1721 STR r2,[r3, #0x38] @ Clear protection pointer in the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1722 @ control block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1723 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1724 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1725 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1726 TCT_Not_Protected: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1727 @ Restore interrupts again. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1728 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1729 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1730 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1731 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1732 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1733 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1734 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1735 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1736 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1737 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1738 TCT_Skip_Unprotect: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1739 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1740 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1741 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1742 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1743 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1744 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1745 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1746 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1747 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1748 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1749 * TCT_Unprotect_Specific | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1750 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1751 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1752 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1753 * This function releases a specific protection structure. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1754 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1755 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1756 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1757 * Application | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1758 * System Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1759 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1760 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1761 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1762 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1763 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1764 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1765 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1766 * protect Pointer to protection block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1767 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1768 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1769 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1770 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1771 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1772 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1773 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1774 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1775 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1776 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1777 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1778 * C. Meredith 03-01-1994 Corrected problem in time-slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1779 * reset logic, corrected bug | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1780 * using protect ptr, resulting | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1781 * in version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1782 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1783 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1784 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1785 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1786 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1787 @VOID Specific(TC_PROTECT *protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1788 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1789 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1790 .globl TCT_Unprotect_Specific | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1791 TCT_Unprotect_Specific: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1792 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1793 @ Determine if the caller is in a task or HISR thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1794 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1795 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1796 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1797 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1798 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1799 CMP r3,#0 @ Check to see if it is non-NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1800 BEQ TCT_Skip_Unprot_Spec @ If NULL, skip unprotect specific | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1801 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1802 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1803 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1804 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1805 ORR r1,r1,#LOCKOUT @ Place lockout value in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1806 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1807 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1808 @ Clear the protection pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1809 @ protect -> tc_tcb_pointer = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1810 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1811 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1812 STR r2,[r0, #0] @ Clear protection ownership | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1813 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1814 @ Determine if a thread is waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1815 @ if (protect -> tc_thread_waiting) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1816 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1817 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1818 LDR r1,[r0, #4] @ Pickup the waiting field | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1819 CMP r1,#0 @ Is there another thread waiting? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1820 BEQ TCT_Not_Waiting_Unspec @ No, restore interrupts and return | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1821 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1822 @ A higher-priority thread is waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1823 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1824 @ Save a minimal context of the thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1825 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1826 STMDB r13!,{r4-r12,r14} @ Save minimal context of thread on | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1827 @ the current stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1828 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1829 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1830 MOV r2,r14 @ Determine what state the caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1831 MOV r2,r2,LSL #31 @ was in and build an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1832 MOV r2,r2,LSR #26 @ appropriate state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1833 STR r2,[r13, #-4]! @ Place it on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1834 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1835 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1836 MOV r2,#0 @ Build solicited stack type value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1837 @ and NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1838 STR r2,[r13, #-4]! @ Place it on the top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1839 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1840 @ Setup a pointer to the thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1841 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1842 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1843 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1844 LDR r0,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1845 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1846 @ Clear the current thread control block pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1847 @ TCD_Current_Thread = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1848 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1849 LDR r3,Slice_State @ Pickup time slice state address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1850 STR r2,[r1, #0] @ Set current thread pointer to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1851 @ NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1852 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1853 @ Check to see if a time slice is active. If so, copy the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1854 @ original time slice into the current time slice field of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1855 @ thread's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1856 @ if (TMD_Time_Slice_State == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1857 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1858 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1859 LDR r1,[r3, #0] @ Pickup time slice state flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1860 CMP r1,#0 @ Compare with active value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1861 BNE TCT_No_Stop_TS_3 @ If non-active, don't disable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1862 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1863 @ Insure that the next time the task runs it gets a fresh time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1864 @ slice. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1865 @ REG_Thread_Ptr -> tc_cur_time_slice = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1866 @ REG_Thread_Ptr -> tc_time_slice; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1867 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1868 LDR r1,[r0, #0x40] @ Pickup original time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1869 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1870 @ Clear any active time slice by setting the state to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1871 @ NOT_ACTIVE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1872 @ TMD_Time_Slice_State = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1873 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1874 MOV r2,#1 @ Build disable value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1875 STR r2,[r3, #0] @ Disable time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1876 STR r1,[r0, #0x20] @ Reset current time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1877 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1878 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1879 TCT_No_Stop_TS_3: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1880 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1881 @ Save off the current stack pointer in the control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1882 @ REG_Thread_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1883 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1884 STR r13,[r0, #0x2c] @ Save the thread's stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1885 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1886 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1887 @ REG_Stack_Ptr = TCD_System_Stack; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1888 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1889 LDR r1,System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1890 LDR r2,System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1891 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1892 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1893 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1894 @ Finished, return to the scheduling loop. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1895 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1896 B TCT_Schedule @ Return to scheduling loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1897 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1898 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1899 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1900 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1901 TCT_Not_Waiting_Unspec: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1902 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1903 @ No higher-priority thread is waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1904 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1905 @ Restore interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1906 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1907 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1908 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1909 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1910 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1911 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1912 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1913 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1914 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1915 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1916 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1917 TCT_Skip_Unprot_Spec: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1918 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1919 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1920 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1921 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1922 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1923 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1924 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1925 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1926 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1927 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1928 * TCT_Set_Current_Protect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1929 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1930 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1931 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1932 * This function sets the current protection field of the current | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1933 * thread's control block to the specified protection pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1934 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1935 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1936 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1937 * TCC_Resume_Task Resume task function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1938 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1939 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1940 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1941 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1942 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1943 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1944 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1945 * protect Pointer to protection block | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1946 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1947 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1948 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1949 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1950 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1951 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1952 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1953 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1954 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1955 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1956 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1957 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1958 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1959 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1960 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1961 @VOID TCT_Set_Current_Protect(TC_PROTECT *protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1962 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1963 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1964 .globl TCT_Set_Current_Protect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1965 TCT_Set_Current_Protect: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1966 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1967 @ Determine if the caller is in a task or HISR thread. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1968 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1969 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1970 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1971 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1972 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1973 CMP r3,#0 @ Check to see if a thread is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1974 @ active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1975 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1976 @ Point at the current thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1977 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1978 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1979 @ Modify the current protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1980 @ REG_Thread_Ptr -> tc_current_protect = protect; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1981 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1982 STRNE r0,[r3, #0x38] @ Setup new protection | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1983 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1984 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1985 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1986 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1987 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1988 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1989 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1990 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1991 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1992 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1993 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1994 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1995 * TCT_Protect_Switch | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1996 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1997 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1998 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
1999 * This function waits until a specific task no longer has any | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2000 * protection associated with it. This is necessary since task's | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2001 * cannot be suspended or terminated unless they have released all | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2002 * of their protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2003 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2004 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2005 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2006 * System Components | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2007 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2008 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2009 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2010 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2011 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2012 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2013 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2014 * thread Pointer to thread control blk | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2015 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2016 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2017 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2018 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2019 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2020 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2021 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2022 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2023 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2024 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2025 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2026 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2027 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2028 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2029 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2030 @VOID TCT_Protect_Switch(VOID *thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2031 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2032 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2033 .globl TCT_Protect_Switch | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2034 TCT_Protect_Switch: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2035 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2036 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2037 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2038 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2039 ORR r1,r1,#LOCKOUT @ Place lockout value in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2040 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2041 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2042 @ REG_Thread_Ptr = (TC_TCB *) thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2043 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2044 @ Wait until the specified task has no protection associated with it. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2045 @ while (REG_Thread_Ptr -> tc_current_protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2046 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2047 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2048 LDR r1,[r0, #0x38] @ Pickup protection of specified | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2049 @ thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2050 CMP r1,#0 @ Does the specified thread have | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2051 @ an active protection? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2052 BEQ TCT_Switch_Done @ If not, protect switch is done | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2053 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2054 @ Let the task run again in an attempt to clear its protection. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2055 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2056 @ Indicate that a higher priority thread is waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2057 @ (REG_Thread_Ptr -> tc_current_protect) -> tc_thread_waiting = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2058 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2059 MOV r2,#1 @ Build waiting flag value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2060 STR r2,[r1, #4] @ Set waiting flag of the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2061 @ protection owned by the other | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2062 @ thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2063 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2064 @ Directly schedule the thread waiting. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2065 @ TCT_Schedule_Protected((REG_Thread_Ptr -> tc_current_protect) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2066 @ -> tc_tcb_pointer); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2067 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2068 LDR r2,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2069 STR r0,[r13, #-4]! @ Save r0 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2070 STR r14,[r13, #-4]! @ Save r14 on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2071 MOV r1,r0 @ Move new thread into r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2072 LDR r0,[r2, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2073 BL TCT_Schedule_Protected @ Call routine to schedule the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2074 @ owner of the thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2075 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2076 LDR r14,[r13], #4 @ Recover saved r14 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2077 LDR r0,[r13], #4 @ Recover saved r0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2078 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2079 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2080 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2081 B TCT_Protect_Switch @ Branch to top of routine and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2082 @ start over | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2083 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2084 TCT_Switch_Done: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2085 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2086 @ Restore interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2087 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2088 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2089 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2090 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2091 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2092 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2093 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2094 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2095 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2096 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2097 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2098 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2099 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2100 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2101 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2102 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2103 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2104 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2105 * TCT_Schedule_Protected | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2106 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2107 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2108 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2109 * This function saves the minimal context of the thread and then | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2110 * directly schedules the thread that has protection over the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2111 * the thread that called this routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2112 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2113 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2114 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2115 * TCT_Protect | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2116 * TCT_Protect_Switch | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2117 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2118 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2119 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2120 * TCT_Control_To_Thread Transfer control to protected | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2121 * thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2122 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2123 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2124 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2125 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2126 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2127 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2128 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2129 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2130 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2131 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2132 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2133 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2134 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2135 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2136 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2137 * C. Meredith 03-01-1994 Corrected problem in time-slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2138 * reset logic, resulting in | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2139 * version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2140 * D. Lamie 03-18-1994 Verified version 1.1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2141 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2142 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2143 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2144 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2145 @VOID TCT_Schedule_Protected(VOID *thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2146 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2147 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2148 .globl TCT_Schedule_Protected | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2149 TCT_Schedule_Protected: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2150 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2151 @ Interrupts are already locked out by the caller. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2152 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2153 @ Save minimal context required by the system. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2154 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2155 STMDB r13!,{r4-r12,r14} @ Save minimal context of thread on | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2156 @ the current stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2157 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2158 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2159 MOV r2,r14 @ Determine what state the caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2160 MOV r2,r2,LSL #31 @ was in and build an | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2161 MOV r2,r2,LSR #26 @ appropriate state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2162 STR r2,[r13, #-4]! @ Place it on the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2163 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2164 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2165 MOV r2,#0 @ Build solicited stack type value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2166 @ and NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2167 STR r2,[r13, #-4]! @ Place it on the top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2168 MOV r4,r1 @ Save thread to schedule | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2169 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2170 @ Setup a pointer to the thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2171 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2172 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2173 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2174 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2175 @ Clear the current thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2176 @ TCD_Current_Thread = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2177 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2178 LDR r3,Slice_State @ Pickup time slice state address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2179 STR r2,[r1, #0] @ Set current thread pointer to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2180 @ NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2181 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2182 @ Check to see if a time slice is active. If so, copy the original time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2183 @ slice into the current time slice field of the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2184 @ if (TMD_Time_Slice_State == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2185 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2186 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2187 LDR r1,[r3, #0] @ Pickup time slice state flag | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2188 CMP r1,#0 @ Compare with active value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2189 BNE TCT_No_Stop_TS_4 @ If non-active, don't disable | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2190 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2191 @ Insure that the next time the task runs it gets a fresh time | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2192 @ slice. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2193 @ REG_Thread_Ptr -> tc_cur_time_slice = REG_Thread_Ptr -> tc_time_slice; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2194 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2195 LDR r1,[r0, #0x40] @ Pickup original time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2196 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2197 @ Clear any active time slice by setting the state to NOT_ACTIVE. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2198 @ TMD_Time_Slice_State = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2199 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2200 MOV r2,#1 @ Build disable value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2201 STR r2,[r3, #0] @ Disable time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2202 STR r1,[r0, #0x20] @ Reset current time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2203 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2204 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2205 TCT_No_Stop_TS_4: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2206 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2207 @ Save off the current stack pointer in the control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2208 @ REG_Thread_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2209 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2210 STR r13,[r0, #0x2c] @ Save the thread's stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2211 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2212 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2213 @ TCD_System_Stack = (VOID *) REG_Stack_Ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2214 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2215 LDR r1,System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2216 LDR r2,System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2217 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2218 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2219 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2220 @ Transfer control to the specified thread directly. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2221 @ TCT_Control_To_Thread(thread); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2222 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2223 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2224 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2225 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2226 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2227 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2228 MOV r0,r4 @ Indicate thread to schedule | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2229 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2230 ORR r1,r1,#LOCKOUT @ Build lockout value again | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2231 MSR CPSR,r1 @ Lockout interrupts again | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2232 B TCT_Control_To_Thread @ Schedule the thread indirectly | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2233 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2234 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2235 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2236 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2237 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2238 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2239 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2240 * TCT_Interrupt_Context_Save | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2241 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2242 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2243 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2244 * This function saves the interrupted thread's context. Nested | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2245 * interrupts are also supported. If a task or HISR thread was | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2246 * interrupted, the stack pointer is switched to the system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2247 * after the context is saved. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2248 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2249 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2250 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2251 * Application ISRs Assembly language ISRs | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2252 * INT_Interrupt_Shell Interrupt handler shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2253 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2254 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2255 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2256 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2257 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2258 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2259 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2260 * vector Interrupt's vector number | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2261 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2262 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2263 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2264 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2265 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2266 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2267 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2268 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2269 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2270 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2271 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2272 * D. Driscoll 01-04-2002 Released version 1.13.3. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2273 * Updated to handle nested / | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2274 * prioritized IRQs | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2275 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2276 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2277 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2278 @VOID TCT_Interrupt_Context_Save(INT vector) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2279 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2280 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2281 .globl TCT_Interrupt_Context_Save | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2282 TCT_Interrupt_Context_Save: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2283 @ Determine if this is a nested interrupt. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2284 LDR r1,Int_Count @ Pickup address of interrupt count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2285 LDR r2,[r1, #0] @ Pickup interrupt counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2286 ADD r2,r2,#1 @ Add 1 to interrupt counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2287 STR r2,[r1, #0] @ Store new interrupt counter value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2288 CMP r2,#1 @ Is it nested? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2289 BEQ TCT_Not_Nested_Save @ No | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2290 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2291 @ Nested interrupt. Save complete context on the current stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2292 TCT_Nested_Save: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2293 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2294 /* No longer needed in the FreeCalypso version, as we can use r0 instead. */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2295 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2296 @ 1. Save another register on the exception stack so we have enough to work with | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2297 STMDB r13!,{r5} | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2298 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2299 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2300 @ 2. Save the necessary exception registers into r1-r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2301 MOV r1,r13 @ Put the exception r13 into r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2302 MOV r2,r14 @ Move the return address for the caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2303 @ of this function into r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2304 MRS r3,spsr @ Put the exception spsr into r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2305 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2306 @ 3. Adjust the exception stack pointer for future exceptions | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2307 ADD r13,r13,#20 @ r13 reset to pre-interrupt value | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2308 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2309 @ 4. Switch CPU modes to save context on system stack | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2310 MRS r0,CPSR @ Pickup the current CPSR | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2311 BIC r0,r0,#MODE_MASK @ Clear the mode bits | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2312 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2313 ORR r0,r0,#SUP_MODE @ Change to supervisor mode (SVD) | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2314 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2315 MSR CPSR,r0 @ Switch modes (IRQ->SVC) | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2316 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2317 @ 5. Store the SVC r13 into r5 so the r13 can be saved as is. | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2318 @ FreeCalyspo: using r0 instead | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2319 MOV r0,r13 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2320 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2321 @ 6. Save the exception return address on the stack (r15). | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2322 STMDB r0!,{r4} | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2323 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2324 @ 7. Save r5-r14 on stack (used to be r6-r14) | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2325 STMDB r0!,{r5-r14} | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2326 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2327 @ 8. Switch back to using r13 now that the original r13 has been saved. | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2328 MOV r13,r0 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2329 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2330 /* no longer relevant */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2331 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2332 @ 9. Get r5 and exception enable registers off of exception stack and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2333 @ save r5 (stored in r4) back to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2334 LDMIA r1!,{r4-r5} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2335 STMDB r13!,{r4} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2336 MOV r4,r5 @ Put exception enable value into r4 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2337 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2338 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2339 @ 10. Get the rest of the registers off the exception stack and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2340 @ save them onto the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2341 LDMIA r1!,{r5-r8,r11} @ Get r0-r4 off exception stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2342 STMDB r13!,{r5-r8,r11} @ Put r0-r4 on system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2343 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2344 /* no longer relevant */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2345 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2346 @ 11. Store the exception enable value back on the exception stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2347 STMDB r1,{r4} | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2348 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2349 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2350 @ 12. Save the SPSR on the system stack (CPSR) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2351 STMDB r13!,{r3} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2352 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2353 /* TI's approach to interrupt handling does not support re-enabling here */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2354 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2355 @ 13. Re-enable interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2356 MRS r1,CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2357 BIC r1,r1,#(IRQ_BIT_OR_FIQ_BIT) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2358 MSR CPSR,r1 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2359 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2360 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2361 BX r2 @ Return to calling ISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2362 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2363 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2364 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2365 TCT_Not_Nested_Save: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2366 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2367 @ Determine if a thread was interrupted. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2368 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2369 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2370 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2371 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2372 LDR r1,[r1, #0] @ Pickup the current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2373 CMP r1,#0 @ Is it NU_NULL? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2374 BEQ TCT_Idle_Context_Save @ If no, no real save is necessary | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2375 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2376 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2377 @ Yes, a thread was interrupted. Save complete context on the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2378 @ thread's stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2379 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2380 /* No longer needed in the FreeCalypso version, as we can use r0 instead. */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2381 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2382 @ 1. Save another register on the exception stack so we have enough to work with | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2383 STMDB r13!,{r5} | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2384 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2385 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2386 @ 2. Save the necessary exception registers into r1-r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2387 MOV r1,r13 @ Put the exception r13 into r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2388 MOV r2,r14 @ Move the return address for the caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2389 @ of this function into r2 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2390 MRS r3,spsr @ Put the exception spsr into r3 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2391 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2392 @ 3. Adjust the exception stack pointer for future exceptions | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2393 ADD r13,r13,#20 @ r13 reset to pre-interrupt value | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2394 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2395 @ 4. Switch CPU modes to save context on system stack | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2396 MRS r0,CPSR @ Pickup the current CPSR | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2397 BIC r0,r0,#MODE_MASK @ Clear the mode bits | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2398 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2399 ORR r0,r0,#SUP_MODE @ Change to supervisor mode (SVD) | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2400 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2401 MSR CPSR,r0 @ Switch modes (IRQ->SVC) | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2402 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2403 @ 5. Store the SVC r13 into r5 so the r13 can be saved as is. | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2404 @ FreeCalyspo: using r0 instead | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2405 MOV r0,r13 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2406 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2407 @ 6. Save the exception return address on the stack (r15). | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2408 STMDB r0!,{r4} | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2409 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2410 @ 7. Save r5-r14 on stack (used to be r6-r14) | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2411 STMDB r0!,{r5-r14} | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2412 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2413 @ 8. Switch back to using r13 now that the original r13 has been saved. | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2414 MOV r13,r0 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2415 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2416 /* no longer relevant */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2417 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2418 @ 9. Get r5 and exception enable registers off of exception stack and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2419 @ save r5 (stored in r4) back to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2420 LDMIA r1!,{r4-r5} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2421 STMDB r13!,{r4} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2422 MOV r4,r5 @ Put exception enable value into r4 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2423 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2424 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2425 @ 10. Get the rest of the registers off the exception stack and | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2426 @ save them onto the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2427 LDMIA r1!,{r5-r8,r11} @ Get r0-r4 off exception stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2428 STMDB r13!,{r5-r8,r11} @ Put r0-r4 on system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2429 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2430 /* no longer relevant */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2431 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2432 @ 11. Store the exception enable value back on the exception stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2433 STMDB r1,{r4} | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2434 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2435 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2436 @ 12. Save the SPSR on the system stack (CPSR) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2437 STMDB r13!,{r3} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2438 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2439 @ 13. Save stack type to the task stack (1=interrupt stack) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2440 MOV r1,#1 @ Interrupt stack type | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2441 STMDB r13!,{r1} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2442 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2443 @ Save the thread's stack pointer in the control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2444 @ REG_Thread_Ptr = (TC_TCB *) TCD_Current_Thread | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2445 @ REG_Thread_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2446 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2447 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2448 LDR r3,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2449 STR r13,[r3, #TC_STACK_POINTER] @ Save stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2450 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2451 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2452 @ REG_Stack_Ptr = TCD_System_Stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2453 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2454 LDR r1,System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2455 LDR r3,System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2456 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2457 LDR r10,[r3, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2458 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2459 /* TI's approach to interrupt handling does not support re-enabling here */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2460 #if 0 | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2461 @ Re-enable interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2462 MRS r1,CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2463 BIC r1,r1,#(IRQ_BIT_OR_FIQ_BIT) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2464 MSR CPSR,r1 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2465 #endif | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2466 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2467 @ Return to caller ISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2468 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2469 BX r2 @ Return to caller ISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2470 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2471 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2472 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2473 TCT_Idle_Context_Save: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2474 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2475 MOV r2,r14 @ Save r14 in r2 | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2476 @ LDR r3,[r13] @ Get exception enable value from stack | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2477 ADD r13,r13,#20 @ Adjust exception r13 for future interrupts | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2478 @ STR r3,[r13] @ Put exception enable value back on stack | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2479 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2480 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2481 BIC r1,r1,#MODE_MASK @ Clear the current mode | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2482 @ BIC r1,r1,#(IRQ_BIT_OR_FIQ_BIT) @ Re-enable interrupts | 
| 
79
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2483 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2484 ORR r1,r1,#SUP_MODE @ Prepare to switch to supervisor | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2485 @ mode (SVC) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2486 MSR CPSR,r1 @ Switch to supervisor mode (SVC) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2487 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2488 BX r2 @ Return to caller ISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2489 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2490 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2491 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2492 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2493 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2494 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2495 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2496 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2497 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2498 * TCT_Interrupt_Context_Restore | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2499 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2500 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2501 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2502 * This function restores the interrupt context if a nested | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2503 * interrupt condition is present. Otherwise, this routine | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2504 * transfers control to the scheduling function. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2505 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2506 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2507 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2508 * Application ISRs Assembly language ISRs | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2509 * INT_Interrupt_Shell Interrupt handler shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2510 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2511 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2512 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2513 * TCT_Schedule Thread scheduling function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2514 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2515 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2516 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2517 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2518 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2519 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2520 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2521 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2522 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2523 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2524 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2525 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2526 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2527 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2528 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2529 * D. Driscoll 01-04-2002 Released version 1.13.3. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2530 * Updated to handle nested / | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2531 * prioritized IRQs | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2532 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2533 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2534 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2535 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2536 @VOID TCT_Interrupt_Context_Restore(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2537 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2538 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2539 .globl TCT_Interrupt_Context_Restore | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2540 TCT_Interrupt_Context_Restore: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2541 @ It is assumed that anything pushed on the stack by ISRs has been | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2542 @ removed upon entry into this routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2543 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2544 @ Decrement and check for nested interrupt conditions. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2545 @ if (--TCD_Interrupt_Count) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2546 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2547 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2548 LDR r1,Int_Count @ Pickup address of interrupt count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2549 LDR r2,[r1, #0] @ Pickup interrupt counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2550 SUB r2,r2,#1 @ Decrement interrupt counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2551 STR r2,[r1, #0] @ Store interrupt counter | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2552 CMP r2,#0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2553 BEQ TCT_Not_Nested_Restore | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2554 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2555 @ Restore previous context. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2556 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2557 LDR r1,[r13], #4 @ Pickup the saved CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2558 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2559 MSR SPSR,r1 @ Place into saved SPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2560 LDMIA r13,{r0-r15}^ @ Return to the point of interrupt | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2561 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2562 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2563 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2564 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2565 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2566 TCT_Not_Nested_Restore: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2567 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2568 @ Determine if a thread is active. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2569 @ if (TCD_Current_Thread) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2570 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2571 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2572 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2573 LDR r0,[r1, #0] @ Pickup current thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2574 CMP r0,#0 @ Determine if a thread is active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2575 BEQ TCT_Idle_Context_Restore @ If not, idle system restore | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2576 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2577 @ Clear the current thread pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2578 @ TCD_Current_Thread = NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2579 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2580 MOV r2,#0 @ Build NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2581 STR r2,[r1, #0] @ Set current thread ptr to NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2582 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2583 @ Determine if a time slice is active. If so, the remaining | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2584 @ time left on the time slice must be saved in the task's | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2585 @ control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2586 @ if (TMD_Time_Slice_State == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2587 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2588 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2589 LDR r3,Slice_State @ Pickup time slice state address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2590 LDR r1,[r3, #0] @ Pickup time slice state | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2591 CMP r1,#0 @ Determine if time slice active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2592 BNE TCT_Idle_Context_Restore @ If not, skip time slice reset | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2593 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2594 @ Pickup the remaining portion of the time slice and save it | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2595 @ in the task's control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2596 @ REG_Thread_Ptr -> tc_cur_time_slice = TMD_Time_Slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2597 @ TMD_Time_Slice_State = 1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2598 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2599 LDR r2,Time_Slice @ Pickup address of time slice left | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2600 MOV r1,#1 @ Build disable time slice value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2601 LDR r2,[r2, #0] @ Pickup remaining time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2602 STR r1,[r3, #0] @ Disable time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2603 STR r2,[r0, #TC_CUR_TIME_SLICE] @ Store remaining time slice | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2604 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2605 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2606 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2607 TCT_Idle_Context_Restore: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2608 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2609 @ Reset the system stack pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2610 LDR r1,System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2611 LDR r2,System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2612 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2613 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2614 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2615 @ Return to scheduler. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2616 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2617 B TCT_Schedule @ Return to scheduling loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2618 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2619 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2620 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2621 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2622 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2623 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2624 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2625 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2626 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2627 * TCT_Activate_HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2628 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2629 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2630 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2631 * This function activates the specified HISR. If the HISR is | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2632 * already activated, the HISR's activation count is simply | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2633 * incremented. Otherwise, the HISR is placed on the appropriate | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2634 * HISR priority list in preparation for execution. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2635 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2636 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2637 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2638 * Application LISRs | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2639 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2640 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2641 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2642 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2643 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2644 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2645 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2646 * hisr Pointer to HISR to activate | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2647 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2648 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2649 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2650 * NU_SUCCESS Successful completion | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2651 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2652 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2653 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2654 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2655 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2656 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2657 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2658 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2659 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2660 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2661 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2662 @STATUS TCT_Activate_HISR(TC_HCB *hisr) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2663 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2664 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2665 .globl TCT_Activate_HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2666 TCT_Activate_HISR: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2667 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2668 @INT priority; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2669 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2670 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2671 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2672 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2673 STR r4,[r13, #-4]! @ Save r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2674 MRS r4,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2675 ORR r1,r4,#LOCKOUT @ Build interrupt lockout value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2676 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2677 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2678 @ Determine if the HISR is already active. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2679 @ if (hisr -> tc_activation_count) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2680 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2681 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2682 LDR r1,[r0,#0x40] @ Pickup current activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2683 CMP r1,#0 @ Is it the first activation? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2684 BEQ TCT_First_Activate @ Yes, place it on the correct list | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2685 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2686 @ Increment the activation count. Make sure that it does not go | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2687 @ to zero. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2688 @ hisr -> tc_activation_count++; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2689 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2690 ADDS r1,r1,#1 @ Increment the activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2691 STR r1,[r0,#0x40] @ Store new activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2692 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2693 @ if (hisr -> tc_activation_count == 0) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2694 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2695 @ hisr -> tc_activation_count = 0xFFFFFFFFUL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2696 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2697 MVNEQ r1,#0 @ If counter rolled-over reset | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2698 STREQ r1,[r0,#0x40] @ Store all ones count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2699 B TCT_Activate_Done @ Finished with activation | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2700 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2701 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2702 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2703 TCT_First_Activate: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2704 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2705 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2706 @ Set the activation count to 1. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2707 @ hisr -> tc_activation_count = 1; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2708 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2709 MOV r1,#1 @ Initial activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2710 STR r1,[r0,#0x40] @ Store initial activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2711 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2712 @ Pickup the HISR's priority. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2713 @ priority = hisr -> tc_priority; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2714 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2715 @ Determine if there is something in the given priority list. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2716 @ if (TCD_Active_HISR_Tails[priority]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2717 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2718 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2719 LDRB r1,[r0,#0x1a] @ Pickup priority of HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2720 LDR r2,HISR_Tails @ Pickup tail pointer base | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2721 LDR r3,[r2,r1,LSL #2] @ Pickup tail pointer for priority | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2722 CMP r3,#0 @ Is this first HISR at priority? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2723 BEQ TCT_First_HISR @ No, append to end of HISR list | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2724 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2725 @ Something is already on this list. Add after the tail. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2726 @ (TCD_Active_HISR_Tails[priority]) -> tc_active_next = hisr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2727 @ TCD_Active_HISR_Tails[priority] = hisr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2728 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2729 STR r0,[r3,#0x3c] @ Setup the active next pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2730 STR r0,[r2,r1,LSL #2] @ Setup the tail pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2731 B TCT_Activate_Done @ Finished with activate processing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2732 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2733 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2734 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2735 TCT_First_HISR: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2736 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2737 @ Nothing is on this list. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2738 @ TCD_Active_HISR_Heads[priority] = hisr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2739 @ TCD_Active_HISR_Tails[priority] = hisr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2740 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2741 LDR r3,HISR_Heads @ Pickup address of head pointers | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2742 STR r0,[r2,r1,LSL #2] @ Set tail pointer to this HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2743 STR r0,[r3,r1,LSL #2] @ Set head pointer to this HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2744 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2745 @ Determine the highest priority HISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2746 @ if (TCD_Active_HISR_Heads[0]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2747 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[0]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2748 @ else if (TCD_Active_HISR_Heads[1]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2749 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[1]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2750 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2751 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[2]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2752 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2753 LDR r1,[r3,#0] @ Pickup priority 0 head pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2754 LDR r0,Execute_HISR @ Build address to execute HISR ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2755 CMP r1,#0 @ Is priority 0 active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2756 LDREQ r1,[r3,#4] @ If not, pickup priority 1 head | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2757 CMPEQ r1,#0 @ Is priority 1 active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2758 LDREQ r1,[r3,#8] @ Else, must be priority 2 active | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2759 STR r1,[r0,#0] @ Store which ever priority is the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2760 @ active one | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2761 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2762 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2763 TCT_Activate_Done: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2764 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2765 MSR CPSR,r4 @ Restore interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2766 LDR r4,[r13], #4 @ Restore corrupted r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2767 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2768 @ return(NU_SUCCESS); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2769 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2770 MOV r0,#0 @ Always return NU_SUCCESS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2771 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2772 BX r14 @ Return to caller | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2773 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2774 @} | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2775 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2776 /* | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2777 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2778 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2779 * FUNCTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2780 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2781 * TCT_HISR_Shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2782 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2783 * DESCRIPTION | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2784 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2785 * This function is the execution shell of each and every HISR. If | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2786 * the HISR has completed its processing, this shell routine exits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2787 * back to the system. Otherwise, it sequentially calls the HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2788 * routine until the activation count goes to zero. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2789 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2790 * CALLED BY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2791 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2792 * HISR Scheduling | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2793 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2794 * CALLS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2795 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2796 * hisr -> tc_entry Actual entry function of HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2797 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2798 * INPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2799 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2800 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2801 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2802 * OUTPUTS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2803 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2804 * None | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2805 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2806 * HISTORY | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2807 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2808 * NAME DATE REMARKS | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2809 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2810 * W. Lamie 02-15-1994 Created initial version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2811 * D. Lamie 02-15-1994 Verified version 1.0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2812 * | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2813 ************************************************************************ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2814 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2815 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2816 @VOID TCT_HISR_Shell(void) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2817 @{ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2818 .globl TCT_HISR_Shell | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2819 TCT_HISR_Shell: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2820 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2821 @ Point at the HISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2822 @ REG_HISR_Ptr = (TC_HCB *) TCD_Current_Thread; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2823 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2824 LDR r0,Current_Thread @ Build address of thread pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2825 LDR r5,[r0, #0] @ Pickup control block pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2826 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2827 @ do | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2828 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2829 TCT_HISR_Loop: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2830 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2831 @ Call the HISR's entry routine. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2832 @ (*(REG_HISR_Ptr -> tc_entry)) (); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2833 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2834 /* old TMS470 code: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2835 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2836 .if THUMB = 0 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2837 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2838 MOV r14,r15 ; Setup return value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2839 LDR r15,[r5,#44h] ; Call HISR entry function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2840 .else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2841 LDR r4,[r5,#44h] ; Get HISR entry function | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2842 TST r4,#1 ; See if calling Thumb or ARM | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2843 BNE Thumbsec | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2844 MOV r14,r15 ; Setup return value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2845 BX r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2846 B ARMCODE | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2847 Thumbsec: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2848 ADD r14, r15, #1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2849 BX r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2850 .state16 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2851 ThumbAfterHisr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2852 MOV r1, r15 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2853 BX r1 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2854 .state32 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2855 .endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2856 */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2857 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2858 /* new code for the GNU style of ARM/Thumb interworking */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2859 ldr r4, [r5, #TC_HISR_ENTRY] | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2860 mov lr, pc | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2861 bx r4 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2862 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2863 @ Lockout interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2864 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2865 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2866 ORR r1,r1,#LOCKOUT @ Build interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2867 MSR CPSR,r1 @ Lockout interrupts | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2868 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2869 @ On return, decrement the activation count and check to see if | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2870 @ it is 0. Once it reaches 0, the HISR should be made inactive. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2871 @ REG_HISR_Ptr -> tc_activation_count--; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2872 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2873 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2874 LDR r0,[r5, #0x40] @ Pickup current activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2875 SUBS r0,r0,#1 @ Subtract and set condition codes | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2876 STR r0,[r5, #0x40] @ Store new activation count | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2877 BEQ TCT_HISR_Finished @ Finished processing HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2878 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2879 @ Restore interrupts. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2880 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2881 LDR r2,Int_Level @ Pickup address of interrupt level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2882 MRS r1,CPSR @ Pickup current CPSR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2883 LDR r3,[r2, #0] @ Pickup interrupt lockout level | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2884 BIC r1,r1,#LOCK_MSK @ Clear lockout bits | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2885 ORR r1,r1,r3 @ Build new interrupt lockout | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2886 MSR CPSR,r1 @ Setup CPSR appropriately | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2887 B TCT_HISR_Loop @ Return to HISR loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2888 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2889 @ while (REG_HISR_Ptr -> tc_activation_count); | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2890 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2891 TCT_HISR_Finished: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2892 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2893 @ At this point, the HISR needs to be made inactive. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2894 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2895 @ Determine if this is the only HISR on the given priority list. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2896 @ if (REG_HISR_Ptr == TCD_Active_HISR_Tails[REG_HISR_Ptr -> tc_priority]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2897 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2898 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2899 LDR r14,HISR_Tails @ Pickup tail pointers address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2900 LDRB r3,[r5,#0x1a] @ Pickup priority | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2901 LDR r6,[r14,r3,LSL #2] @ Pickup this priority tail pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2902 LDR r2,Execute_HISR @ Build address to execute HISR ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2903 MOV r12,#0 @ Clear r12 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2904 LDR r1,HISR_Heads @ Pickup head pointers address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2905 CMP r6,r5 @ Is this priority tail the same as | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2906 @ the current HISR? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2907 BNE TCT_More_HISRs @ If not, more HISRs at this | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2908 @ priority | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2909 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2910 @ The only HISR on the list. Clean up the list and check for the | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2911 @ highest priority HISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2912 @ TCD_Active_HISR_Heads[REG_HISR_Ptr -> tc_priority] = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2913 @ TCD_Active_HISR_Tails[REG_HISR_Ptr -> tc_priority] = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2914 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2915 STR r12,[r1,r3,LSL #2] @ Set head pointer to NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2916 STR r12,[r14,r3,LSL #2] @ Set tail pointer to NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2917 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2918 @ Determine the highest priority HISR. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2919 @ if (TCD_Active_HISR_Heads[0]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2920 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[0]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2921 @ else if (TCD_Active_HISR_Heads[1]) | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2922 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[1]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2923 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2924 @ TCD_Execute_HISR = TCD_Active_HISR_Heads[2]; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2925 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2926 LDR r3,[r1,#0] @ Pickup priority 0 head pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2927 CMP r3,#0 @ Is there an HISR active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2928 LDREQ r3,[r1,#4] @ If not, pickup priority 1 pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2929 CMPEQ r3,#0 @ Is there an HISR active? | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2930 LDREQ r3,[r1,#8] @ If not, pickup priority 2 pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2931 STR r3,[r2,#0] @ Setup execute HISR pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2932 B TCT_HISR_Exit @ Exit HISR processing | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2933 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2934 @ else | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2935 @ { | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2936 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2937 TCT_More_HISRs: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2938 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2939 @ Move the head pointer to the next HISR in the list. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2940 @ TCD_Active_HISR_Heads[REG_HISR_Ptr -> tc_priority] = | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2941 @ REG_HISR_Ptr -> tc_active_next; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2942 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2943 @ Also set the TCD_Execute_HISR pointer. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2944 @ TCD_Execute_HISR = REG_HISR_Ptr -> tc_active_next; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2945 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2946 LDR r14,[r5,#0x3c] @ Pickup next HISR to activate | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2947 STR r14,[r1,r3,LSL #2] @ Setup new head pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2948 STR r14,[r2, #0] @ Setup execute HISR pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2949 @ } | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2950 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2951 TCT_HISR_Exit: | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2952 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2953 @ Build fake return to the top of this loop. The next time the HISR | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2954 @ is activated, it will return to the top of this function. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2955 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2956 LDR r14,HISR_Shell @ Pickup address of shell entry | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2957 STMDB r13!,{r4-r12,r14} @ Save minimal context of thread on | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2958 @ the current stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2959 MOV r2,#0 @ Build solicited stack type value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2960 @ and NU_NULL value | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2961 #if 1 /* was .if THUMB */ | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2962 STR r2,[r13, #-4]! @ Save state mask | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2963 #endif | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2964 STR r2,[r13, #-4]! @ Place it on the top of the stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2965 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2966 @ Clear the current thread control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2967 @ TCD_Current_Thread = NU_NULL; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2968 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2969 LDR r1,Current_Thread @ Pickup current thread ptr address | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2970 STR r2,[r1, #0] @ Set current thread pointer to | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2971 @ NU_NULL | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2972 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2973 @ Save off the current stack pointer in the control block. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2974 @ REG_HISR_Ptr -> tc_stack_pointer = (VOID *) REG_Stack_Ptr; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2975 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2976 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2977 STR r13,[r5, #0x2c] @ Save the thread's stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2978 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2979 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2980 @ Switch to the system stack. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2981 @ REG_Stack_Ptr = (BYTE_PTR) TCD_System_Stack; | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2982 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2983 LDR r1,System_Stack @ Pickup address of stack pointer | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2984 LDR r2,System_Limit @ Pickup address of stack limit ptr | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2985 LDR r13,[r1, #0] @ Switch to system stack | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2986 LDR r10,[r2, #0] @ Setup system stack limit | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2987 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2988 @ Transfer control to the main scheduling loop. | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2989 | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2990 B TCT_Schedule @ Return to main scheduling loop | 
| 
 
947b1f473960
beginning of nuc-fw
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents:  
diff
changeset
 | 
2991 @} | 
| 
132
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2992 | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2993 /* FreeCalypso addition, used by riviera/rvf/rvf_task.c: */ | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2994 .globl INT_Check_IRQ_Mask | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2995 INT_Check_IRQ_Mask: | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2996 MRS r0,CPSR | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2997 BX lr | 
| 
 
2c5160a9d652
nuc-fw: switched from nucdemo to Riviera, got some serial output
 
Michael Spacefalcon <msokolov@ivan.Harhan.ORG> 
parents: 
79 
diff
changeset
 | 
2998 | 
