comparison L1/cfile/l1_isr_glue.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children bf52986ae7f2
comparison
equal deleted inserted replaced
-1:000000000000 0:75a11d740a02
1 /*
2 * This module contains the LISR and HISR glue functions for L1
3 * which used to be in the dl1_com module in the Leonardo version.
4 * The LoCosto source from which we got our L1 code no longer has a
5 * dl1_com.c module, and the ISR glue functions in question have been
6 * moved into csw-system/init_common/init.c - an incredibly messy C
7 * module that is mostly devoted to LoCosto BSP initialization.
8 *
9 * The present C code has been extracted from LoCosto's init.c,
10 * guided by the disassembly of dl1_com.obj from the Leonardo version.
11 */
12
13 #include "config.h"
14 #include "sys_types.h"
15 #include "../../riviera/rv/general.h"
16 #include "../../nucleus/nucleus.h"
17
18 /* Include Files */
19 #include <ctype.h>
20 #include <stdarg.h>
21 #include <stdlib.h>
22 #include <string.h>
23
24 #include "l1_types.h"
25 #include "l1_confg.h"
26 #include "l1_const.h"
27
28 #if TESTMODE
29 #include "l1tm_defty.h"
30 #endif // TESTMODE
31
32 #if (AUDIO_TASK == 1)
33 #include "l1audio_const.h"
34 #include "l1audio_cust.h"
35 #include "l1audio_defty.h"
36 #endif // AUDIO_TASK
37
38 #if (L1_GTT == 1)
39 #include "l1gtt_const.h"
40 #include "l1gtt_defty.h"
41 #endif
42
43 #if (L1_MP3 == 1)
44 #include "l1mp3_defty.h"
45 #endif
46
47 #if (L1_MIDI == 1)
48 #include "l1midi_defty.h"
49 #endif
50
51 #if (L1_AAC == 1)
52 #include "l1aac_defty.h"
53 #endif
54 #if (L1_DYN_DSP_DWNLD == 1)
55 #include "l1_dyn_dwl_defty.h"
56 #endif
57
58 #if (TRACE_TYPE == 4)
59 #include "l1_defty.h"
60 #endif
61
62 #include "../../bsp/armio.h"
63 #include "../../bsp/timer.h"
64
65 #include "../../bsp/iq.h"
66 #include "../../bsp/mem.h"
67 #include "../../bsp/clkm.h"
68 #include "../../bsp/inth.h"
69
70 /*
71 * The function that sets up the HISRs has an assert() macro call in it.
72 * The Leonardo version was built with the TMS470 compiler's C library
73 * version of assert() in it, which is not very useful. Here I am
74 * pulling in some GPF/VSI headers so we get the more useful GPF/VSI
75 * version of assert() instead.
76 */
77 #include "../../gpf/inc/typedefs.h"
78 #include "../../gpf/inc/vsi.h"
79 #include "../../gpf/inc/cust_os.h"
80
81 /*
82 * Timing monitor
83 */
84 #if (TRACE_TYPE == 4)
85 extern T_L1A_L1S_COM l1a_l1s_com;
86 extern T_L1S_GLOBAL l1s;
87 UNSIGNED max_cpu, fn_max_cpu;
88 unsigned short layer_1_sync_end_time;
89 unsigned short max_cpu_flag;
90 #if (DSP >= 38)
91 // DSP CPU load measurement trace variables
92 UWORD32 dsp_max_cpu_load_trace_array[4];
93 UWORD32 dsp_max_cpu_load_idle_frame;
94 unsigned short l1_dsp_cpu_load_trace_flag;
95 #endif
96 #endif
97
98 #define STACK_SECTION __attribute__ ((section ("int.ram")))
99
100 #if (L1_EXT_AUDIO_MGT == 1)
101 NU_HISR EXT_AUDIO_MGT_hisr;
102 char FAR ext_audio_mgt_hisr_stack[500] STACK_SECTION;
103 extern void Cust_ext_audio_mgt_hisr(void);
104 #endif
105
106 #if ( (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) ) // equivalent to an API_HISR flag
107 extern void api_hisr(void);
108 char FAR API_HISR_stack[0x400] STACK_SECTION;
109 NU_HISR apiHISR;
110 #endif // (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_DYN_DSP_DWNLD == 1)
111
112 #if (FF_L1_IT_DSP_USF == 1) || (FF_L1_IT_DSP_DTX == 1)
113 char FAR API_MODEM_HISR_stack[0x400] STACK_SECTION; // stack size to be tuned
114 NU_HISR api_modemHISR;
115 #endif // FF_L1_IT_DSP_USF
116
117 /*
118 * HISR stack and semaphore needed by L1
119 */
120 #if (OP_L1_STANDALONE == 0)
121 #define LAYER_1_SYNC_STACK_SIZE 4000 /* matching Leonardo version */
122 unsigned char layer_1_sync_stack[LAYER_1_SYNC_STACK_SIZE] STACK_SECTION;
123 #else
124 #if TESTMODE
125 char FAR layer_1_sync_stack[2600 /*3600*/]; // Frame interrupt task stack for EVA3
126 #else
127 char FAR layer_1_sync_stack[1600 /* 2600 */]; // Frame interrupt task stack for EVA3
128 #endif
129 #endif /* OP_L1_STANDALONE */
130
131 NU_HISR layer_1_sync_HISR; // Frame interrupt task stack for EVA3
132
133 /* forward declaration */
134 void layer_1_sync_HISR_entry (void);
135
136 /*
137 * l1_create_HISR
138 *
139 * Create L1 HISR. This function is called from l1_pei.
140 *
141 * Apparently this function was originally called l1_create_ISR(),
142 * as that is how it appears in the Leonardo dl1_com.obj module.
143 * The LoCosto version originally had an l1_create_ISR() wrapper
144 * that simply calls l1_create_HISR(), but I plan on changing
145 * l1_pei to call l1_create_HISR() instead. -- Space Falcon
146 */
147 void l1_create_HISR (void)
148 {
149 STATUS status;
150
151 #if (OP_L1_STANDALONE == 0)
152 // Fill the entire stack with the pattern 0xFE
153 memset (layer_1_sync_stack, 0xFE, LAYER_1_SYNC_STACK_SIZE);
154 #endif
155
156 status = NU_Create_HISR (&layer_1_sync_HISR,
157 "L1_HISR",
158 layer_1_sync_HISR_entry,
159 #if (OP_L1_STANDALONE == 0)
160 1,
161 layer_1_sync_stack,
162 LAYER_1_SYNC_STACK_SIZE);
163 #else
164 1,
165 layer_1_sync_stack,
166 sizeof(layer_1_sync_stack));
167 #endif
168
169 #if (L1_EXT_AUDIO_MGT)
170 // Create HISR for Ext MIDI activity
171 //==================================
172 status += NU_Create_HISR(&EXT_AUDIO_MGT_hisr,
173 "H_EXT_AUDIO_MGT",
174 Cust_ext_audio_mgt_hisr,
175 2,
176 ext_audio_mgt_hisr_stack,
177 sizeof(ext_audio_mgt_hisr_stack));
178 #endif
179
180 #if ( (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1) ) // equivalent to an API_HISR flag
181 status += NU_Create_HISR(&apiHISR,
182 "API_HISR",
183 api_hisr,
184 2,
185 API_HISR_stack,
186 sizeof(API_HISR_stack));
187 #endif // (L1_MP3 == 1) || (L1_MIDI == 1) || (L1_AAC == 1) || (L1_DYN_DSP_DWNLD == 1)
188
189 #if (FF_L1_IT_DSP_USF == 1) || (FF_L1_IT_DSP_DTX == 1) // equivalent to an API_MODEM_HISR flag
190 // Create HISR for USF DSP interrupt !!!!. This HISR needs
191 // to have the highest priority since the USF status needs
192 // to be known before the next block starts.
193 //========================================================
194 status += NU_Create_HISR(&api_modemHISR,
195 "MODEM",
196 api_modem_hisr,
197 1,
198 API_MODEM_HISR_stack,
199 sizeof(API_MODEM_HISR_stack));
200 #endif
201
202 assert (status == 0);
203 }
204
205 /*
206 * The versions of TP_FrameIntHandler() and layer_1_sync_HISR_entry()
207 * in the Leonardo dl1_com.obj module contain CPU load measurement
208 * code, but in the LoCosto version of L1 which we are using this
209 * functionality has been moved into L1S proper, i.e., inside the
210 * hisr() function.
211 */
212
213 /*-------------------------------------------------------*/
214 /* TP_FrameIntHandler() Low Interrupt service routine */
215 /*-------------------------------------------------------*/
216 /* Parameters : */
217 /* Return : */
218 /* Functionality : activate Hisr on each frame interrupt*/
219 /*-------------------------------------------------------*/
220 void TP_FrameIntHandler(void)
221 {
222
223 #if (OP_L1_STANDALONE == 1)
224
225 #if (TRACE_TYPE==1)
226 if (trace_info.current_config->l1_dyn_trace & 1<<L1_DYN_TRACE_L1S_CPU_LOAD)
227 {
228 TM_ResetTimer (2, 0xFFFF, 1, 0);
229 TM_StartTimer (2);
230 }
231 #endif
232
233 #if (TRACE_TYPE==6)
234 TM_ResetTimer (2, 0xFFFF, 1, 0);
235 TM_StartTimer (2);
236 #endif
237
238 #if (TRACE_TYPE==7) /* CPU_LOAD */
239 l1_cpu_load_start();
240 #endif
241
242 #else
243
244 #if (TRACE_TYPE == 4) && (TI_NUC_MONITOR != 1) && (WCP_PROF == 1)
245 TM_ResetTimer (2, TIMER_RESET_VALUE, 1, 0);
246 TM_StartTimer (2);
247 #endif
248
249 #if (TI_NUC_MONITOR == 1)
250 /* Copy LISR buffer in Log buffer each end of HISR */
251 ti_nuc_monitor_tdma_action();
252 #endif
253
254 #if WCP_PROF == 1
255 prf_LogFNSwitch(l1s.actual_time.fn_mod42432);
256 #endif
257
258 #endif /* OP_L1_STANDALONE */
259
260 NU_Activate_HISR(&layer_1_sync_HISR); /* Activate HISR interrupt */
261
262 #if (OP_L1_STANDALONE == 0)
263 #if (WCP_PROF == 1)
264 #if (PRF_CALIBRATION == 1)
265 NU_Activate_HISR(&prf_CalibrationHISR);
266 #endif
267 #endif
268 #endif
269
270 }
271
272 /*
273 * layer_1_sync_HISR_entry
274 *
275 * HISR associated to layer 1 sync.
276 */
277
278 void layer_1_sync_HISR_entry (void)
279 {
280 // Call Synchronous Layer1
281 hisr();
282 }