FreeCalypso > hg > fc-magnetite
comparison src/cs/layer1/cfile/l1_init.c @ 69:50a15a54801e
src/cs/layer1: import from tcs211-l1-reconst project
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 01 Oct 2016 23:45:38 +0000 |
parents | |
children | 11e279107681 |
comparison
equal
deleted
inserted
replaced
68:838717193e09 | 69:50a15a54801e |
---|---|
1 /************ Revision Controle System Header ************* | |
2 * GSM Layer 1 software | |
3 * L1_INIT.C | |
4 * | |
5 * Filename l1_init.c | |
6 * Copyright 2003 (C) Texas Instruments | |
7 * | |
8 ************* Revision Controle System Header *************/ | |
9 | |
10 #define L1_INIT_C | |
11 | |
12 #include "l1_confg.h" | |
13 | |
14 #define W_A_DSP_PR20037 1 /* FreeCalypso */ | |
15 | |
16 #if (CODE_VERSION == SIMULATION) | |
17 #include <string.h> | |
18 #include "l1_types.h" | |
19 #include "sys_types.h" | |
20 #include "l1_const.h" | |
21 #include "l1_time.h" | |
22 #include "l1_signa.h" | |
23 | |
24 #if TESTMODE | |
25 #include "l1tm_defty.h" | |
26 #endif | |
27 #if (AUDIO_TASK == 1) | |
28 #include "l1audio_const.h" | |
29 #include "l1audio_cust.h" | |
30 #include "l1audio_defty.h" | |
31 #endif | |
32 #if (L1_GTT == 1) | |
33 #include "l1gtt_const.h" | |
34 #include "l1gtt_defty.h" | |
35 #endif | |
36 | |
37 #if (L1_MP3 == 1) | |
38 #include "l1mp3_defty.h" | |
39 #endif | |
40 | |
41 #if (L1_MIDI == 1) | |
42 #include "l1midi_defty.h" | |
43 #endif | |
44 //ADDED FOR AAC | |
45 #if (L1_AAC == 1) | |
46 #include "l1aac_defty.h" | |
47 #endif | |
48 #if (L1_DYN_DSP_DWNLD == 1) | |
49 #include "l1_dyn_dwl_proto.h" | |
50 #endif | |
51 | |
52 #include "l1_defty.h" | |
53 #include "cust_os.h" | |
54 #include "l1_msgty.h" | |
55 #include "l1_varex.h" | |
56 #include "l1_proto.h" | |
57 #include "l1_mftab.h" | |
58 #include "l1_tabs.h" | |
59 #include "l1_ver.h" | |
60 #include "ulpd.h" | |
61 | |
62 #include "l1_proto.h" | |
63 | |
64 #if L1_GPRS | |
65 #include "l1p_cons.h" | |
66 #include "l1p_msgt.h" | |
67 #include "l1p_deft.h" | |
68 #include "l1p_vare.h" | |
69 #include "l1p_tabs.h" | |
70 #include "l1p_macr.h" | |
71 #include "l1p_ver.h" | |
72 #endif | |
73 | |
74 #if TESTMODE | |
75 #include "l1tm_ver.h" | |
76 #endif | |
77 | |
78 #include <stdio.h> | |
79 #include "sim_cfg.h" | |
80 #include "sim_cons.h" | |
81 #include "sim_def.h" | |
82 #include "sim_var.h" | |
83 | |
84 #else // NO SIMULATION | |
85 | |
86 #include <string.h> | |
87 #include "tm_defs.h" | |
88 #include "l1_types.h" | |
89 #include "sys_types.h" | |
90 #include "leadapi.h" | |
91 #include "l1_const.h" | |
92 #include "l1_macro.h" | |
93 #include "l1_time.h" | |
94 #include "l1_signa.h" | |
95 #if (AUDIO_TASK == 1) | |
96 #include "l1audio_const.h" | |
97 #include "l1audio_cust.h" | |
98 #include "l1audio_defty.h" | |
99 #endif | |
100 | |
101 | |
102 #include "spi_drv.h" | |
103 #include "abb.h" | |
104 #if (ANLG_FAM != 11) | |
105 #include "abb_core_inth.h" | |
106 #endif | |
107 | |
108 #if TESTMODE | |
109 #include "l1tm_defty.h" | |
110 #endif | |
111 | |
112 #if (L1_GTT == 1) | |
113 #include "l1gtt_const.h" | |
114 #include "l1gtt_defty.h" | |
115 #endif | |
116 | |
117 #if (L1_MP3 == 1) | |
118 #include "l1mp3_defty.h" | |
119 #endif | |
120 | |
121 #if (L1_MIDI == 1) | |
122 #include "l1midi_defty.h" | |
123 #endif | |
124 //ADDED FOR AAC | |
125 #if (L1_AAC == 1) | |
126 #include "l1aac_defty.h" | |
127 #endif | |
128 #if (L1_DYN_DSP_DWNLD == 1) | |
129 #include "l1_dyn_dwl_proto.h" | |
130 #endif | |
131 | |
132 #include "l1_defty.h" | |
133 #include "cust_os.h" | |
134 #include "l1_msgty.h" | |
135 #include "l1_varex.h" | |
136 #include "l1_proto.h" | |
137 #include "l1_mftab.h" | |
138 #include "l1_tabs.h" | |
139 #include "l1_ver.h" | |
140 #include "tpudrv.h" | |
141 | |
142 #if (CHIPSET == 12) || (CHIPSET == 15) | |
143 #include "sys_inth.h" | |
144 #else | |
145 #include "mem.h" | |
146 #include "inth.h" | |
147 #include "dma.h" | |
148 #include "iq.h" | |
149 #endif | |
150 | |
151 #include "clkm.h" | |
152 #include "rhea_arm.h" | |
153 #include "ulpd.h" | |
154 | |
155 #include "l1_proto.h" | |
156 | |
157 #if L1_GPRS | |
158 #include "l1p_cons.h" | |
159 #include "l1p_msgt.h" | |
160 #include "l1p_deft.h" | |
161 #include "l1p_vare.h" | |
162 #include "l1p_tabs.h" | |
163 #include "l1p_macr.h" | |
164 #include "l1p_ver.h" | |
165 #endif | |
166 | |
167 #if TESTMODE | |
168 #include "l1tm_ver.h" | |
169 #endif | |
170 | |
171 #endif // NOT SIMULATION | |
172 | |
173 | |
174 | |
175 #if (RF_FAM == 61) | |
176 #if (DRP_FW_EXT==0) | |
177 #include "drp_drive.h" | |
178 #include "drp_api.h" | |
179 #include "l1_rf61.h" | |
180 #include "apc.h" | |
181 #else | |
182 #include "l1_rf61.h" | |
183 #include "l1_drp_inc.h" | |
184 #endif | |
185 #endif | |
186 | |
187 | |
188 #if (RF_FAM == 60) | |
189 #include "drp_drive.h" | |
190 #include "drp_api.h" | |
191 #include "l1_rf60.h" | |
192 #endif | |
193 | |
194 #if (TRACE_TYPE == 1)||(TRACE_TYPE == 4) | |
195 #include "l1_trace.h" | |
196 #endif | |
197 | |
198 #include <string.h> | |
199 #include <stdio.h> | |
200 | |
201 #if (ANLG_FAM == 11) | |
202 #include "bspTwl3029_I2c.h" | |
203 #include "bspTwl3029_Aud_Map.h" | |
204 #include "bspTwl3029_Madc.h" | |
205 #endif | |
206 | |
207 #if (RF_FAM == 61) | |
208 //OMAPS148175 | |
209 #include "l1_drp_if.h" | |
210 #include "drp_main.h" | |
211 #endif | |
212 | |
213 #if (ANLG_FAM == 11) | |
214 #if (L1_MADC_ON == 1) | |
215 extern BspTwl3029_MadcResults l1_madc_results; | |
216 extern void l1a_madc_callback(void); | |
217 #if(OP_L1_STANDALONE == 1 || L1_NAVC == 1 )//NAVC | |
218 extern UWORD32 Cust_navc_ctrl_status(UWORD8 d_navc_start_stop_read);//NAVC | |
219 #endif | |
220 #endif | |
221 | |
222 #if (AUDIO_DEBUG == 1) | |
223 extern UWORD8 audio_reg_read_status; | |
224 #endif | |
225 | |
226 #endif | |
227 | |
228 #if (AUDIO_TASK == 1) | |
229 /**************************************/ | |
230 /* External audio prototypes */ | |
231 /**************************************/ | |
232 extern void l1audio_initialize_var (void); | |
233 #endif | |
234 | |
235 extern void l1audio_dsp_init (void); | |
236 extern void initialize_wait_loop(void); | |
237 | |
238 #if (L1_GPRS) | |
239 // external functions from GPRS implementation | |
240 void initialize_l1pvar(void); | |
241 void l1pa_reset_cr_freq_list(void); | |
242 #endif // L1_GPRS | |
243 #if ((OP_L1_STANDALONE == 1) && ((DSP == 38)|| (DSP == 39))&& (CODE_VERSION != SIMULATION)) | |
244 extern void l1_api_dump(void); | |
245 #endif | |
246 | |
247 #if (TRACE_TYPE==3) | |
248 void reset_stats(); | |
249 #endif // TRACE_TYPE | |
250 | |
251 #if (L1_GTT == 1) | |
252 extern void l1gtt_initialize_var(void); | |
253 #endif | |
254 | |
255 #if (L1_MP3 == 1) | |
256 extern void l1mp3_initialize_var(void); | |
257 #endif | |
258 | |
259 #if (L1_MIDI == 1) | |
260 extern void l1midi_initialize_var(void); | |
261 #endif | |
262 //ADDED FOR AAC | |
263 #if (L1_AAC == 1) | |
264 extern void l1aac_initialize_var(void); | |
265 #endif | |
266 | |
267 #if ((TRACE_TYPE==1) || (TRACE_TYPE==2) || (TRACE_TYPE==3) || (TRACE_TYPE==4) || (TRACE_TYPE==7)) | |
268 extern void L1_trace_string(char *s); | |
269 #endif | |
270 | |
271 #if (RF_FAM == 60 || RF_FAM == 61) | |
272 extern const UWORD8 drp_ref_sw[] ; | |
273 extern T_DRP_REGS_STR *drp_regs; | |
274 extern T_DRP_SRM_API* drp_srm_api; | |
275 | |
276 extern T_DRP_SW_DATA drp_sw_data_calib; | |
277 extern T_DRP_SW_DATA drp_sw_data_init; | |
278 | |
279 #endif | |
280 | |
281 /*-------------------------------------------------------*/ | |
282 /* l1_dsp_init() */ | |
283 /*-------------------------------------------------------*/ | |
284 /* Parameters : */ | |
285 /* Return : */ | |
286 /* Functionality : */ | |
287 /*-------------------------------------------------------*/ | |
288 void l1_dsp_init(void) | |
289 { | |
290 //int i;-OMAPS90550- new | |
291 #if (CODE_VERSION == SIMULATION) | |
292 // L1S <-> DSP communication... | |
293 //==================================================== | |
294 l1s_dsp_com.dsp_ndb_ptr = &(buf.ndb); | |
295 l1s_dsp_com.dsp_db_r_ptr = &(buf.mcu_rd[0]); | |
296 l1s_dsp_com.dsp_db_w_ptr = &(buf.mcu_wr[0]); | |
297 l1s_dsp_com.dsp_param_ptr = &(buf.param); | |
298 l1s_dsp_com.dsp_w_page = 0; | |
299 l1s_dsp_com.dsp_r_page = 0; | |
300 l1s_dsp_com.dsp_r_page_used = 0; | |
301 | |
302 #if (L1_GPRS) | |
303 l1ps_dsp_com.pdsp_ndb_ptr = &(buf.ndb_gprs); | |
304 l1ps_dsp_com.pdsp_db_r_ptr = &(buf.mcu_rd_gprs[0]); | |
305 l1ps_dsp_com.pdsp_db_w_ptr = &(buf.mcu_wr_gprs[0]); | |
306 l1ps_dsp_com.pdsp_param_ptr = &(buf.param_gprs); | |
307 #endif | |
308 | |
309 // Reset DSP page bit and DSP enable bit... | |
310 //==================================================== | |
311 l1s_tpu_com.reg_cmd->dsp_enb_bit = OFF; | |
312 l1s_tpu_com.reg_cmd->dsp_pag_bit = 0; | |
313 | |
314 // Set EOTD bit if required | |
315 //==================================================== | |
316 #if (L1_EOTD ==1) | |
317 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= B_EOTD; | |
318 #endif | |
319 | |
320 | |
321 #else // NO SIMULATION | |
322 | |
323 // L1S <-> DSP communication... | |
324 //==================================================== | |
325 l1s_dsp_com.dsp_ndb_ptr = (T_NDB_MCU_DSP *) NDB_ADR; | |
326 l1s_dsp_com.dsp_db_r_ptr = (T_DB_DSP_TO_MCU *) DB_R_PAGE_0; | |
327 l1s_dsp_com.dsp_db_w_ptr = (T_DB_MCU_TO_DSP *) DB_W_PAGE_0; | |
328 l1s_dsp_com.dsp_param_ptr = (T_PARAM_MCU_DSP *) PARAM_ADR; | |
329 l1s_dsp_com.dsp_w_page = 0; | |
330 l1s_dsp_com.dsp_r_page = 0; | |
331 l1s_dsp_com.dsp_r_page_used = 0; | |
332 | |
333 #if (DSP == 38) || (DSP == 39) | |
334 l1s_dsp_com.dsp_db_common_w_ptr = (T_DB_COMMON_MCU_TO_DSP *)DB_COMMON_W_PAGE_0; | |
335 #endif | |
336 | |
337 /* DSP CPU load measurement */ | |
338 #if (DSP == 38) || (DSP == 39) | |
339 l1s_dsp_com.dsp_cpu_load_db_w_ptr = (T_DB_MCU_TO_DSP_CPU_LOAD *)DSP_CPU_LOAD_DB_W_PAGE_0; | |
340 (*((volatile UWORD16 *)(DSP_CPU_LOAD_MCU_W_CTRL))) = (API)0x0001; // enable DSP CPU load measurement | |
341 #endif | |
342 | |
343 #if (L1_GPRS) | |
344 l1ps_dsp_com.pdsp_ndb_ptr = (T_NDB_MCU_DSP_GPRS *) NDB_ADR_GPRS; | |
345 l1ps_dsp_com.pdsp_db_r_ptr = (T_DB_DSP_TO_MCU_GPRS *) DB_R_PAGE_0_GPRS; | |
346 l1ps_dsp_com.pdsp_db_w_ptr = (T_DB_MCU_TO_DSP_GPRS *) DB_W_PAGE_0_GPRS; | |
347 l1ps_dsp_com.pdsp_param_ptr = (T_PARAM_MCU_DSP_GPRS *) PARAM_ADR_GPRS; | |
348 #endif | |
349 | |
350 #if (DSP_DEBUG_TRACE_ENABLE == 1) | |
351 l1s_dsp_com.dsp_db2_current_r_ptr = (T_DB2_DSP_TO_MCU *) DB2_R_PAGE_0; | |
352 l1s_dsp_com.dsp_db2_other_r_ptr = (T_DB2_DSP_TO_MCU *) DB2_R_PAGE_1; | |
353 #endif | |
354 | |
355 // Reset DSP page bit and DSP enable bit... | |
356 //==================================================== | |
357 | |
358 (*(volatile UWORD16 *)l1s_tpu_com.reg_cmd) &= ~TPU_CTRL_D_ENBL; | |
359 | |
360 #if (DSP >= 33) | |
361 l1s_dsp_com.dsp_ndb_ptr->d_dsp_page = l1s_dsp_com.dsp_w_page; | |
362 #else | |
363 l1s_dsp_com.dsp_param_ptr->d_dsp_page = l1s_dsp_com.dsp_w_page; | |
364 #endif | |
365 | |
366 // NDB init : Reset buffers and set flags... | |
367 //==================================================== | |
368 l1s_dsp_com.dsp_ndb_ptr->d_fb_mode = FB_MODE_1; | |
369 l1s_dsp_com.dsp_ndb_ptr->d_fb_det = FALSE; // D_FB_DET =0 | |
370 l1s_dsp_com.dsp_ndb_ptr->a_cd[0] = (1<<B_FIRE1); // B_FIRE1 =1, B_FIRE0 =0 , BLUD =0 | |
371 l1s_dsp_com.dsp_ndb_ptr->a_dd_0[0] = 0; // BLUD = 0 | |
372 l1s_dsp_com.dsp_ndb_ptr->a_dd_0[2] = 0xffff; // NERR = 0xffff | |
373 l1s_dsp_com.dsp_ndb_ptr->a_dd_1[0] = 0; // BLUD = 0 | |
374 l1s_dsp_com.dsp_ndb_ptr->a_dd_1[2] = 0xffff; // NERR = 0xffff | |
375 l1s_dsp_com.dsp_ndb_ptr->a_du_0[0] = 0; // BLUD = 0 | |
376 l1s_dsp_com.dsp_ndb_ptr->a_du_0[2] = 0xffff; // NERR = 0xffff | |
377 l1s_dsp_com.dsp_ndb_ptr->a_du_1[0] = 0; // BLUD = 0 | |
378 l1s_dsp_com.dsp_ndb_ptr->a_du_1[2] = 0xffff; // NERR = 0xffff | |
379 l1s_dsp_com.dsp_ndb_ptr->a_fd[0] = (1<<B_FIRE1); // B_FIRE1 =1, B_FIRE0 =0 , BLUD =0 | |
380 l1s_dsp_com.dsp_ndb_ptr->a_fd[2] = 0xffff; // NERR = 0xffff | |
381 l1s_dsp_com.dsp_ndb_ptr->d_a5mode = 0; | |
382 | |
383 #if ((ANLG_FAM == 1) || (ANLG_FAM == 2) || (ANLG_FAM == 3) || (ANLG_FAM == 11)) | |
384 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode = 0x0800; // Analog base band selected = Nausica, Iota, Syren (bit 11) | |
385 #endif | |
386 | |
387 #if ((ANLG_FAM == 1) || (ANLG_FAM == 2) || (ANLG_FAM == 3)) | |
388 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= (((l1_config.params.guard_bits - 4) & 0x000F) << 7); //Bit 7..10: guard bits | |
389 #endif | |
390 #if (ANLG_FAM == 11) | |
391 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= (((l1_config.params.guard_bits) & 0x000F) << 7); //Bit 7..10: guard bits | |
392 #endif | |
393 | |
394 #if (DSP == 32) | |
395 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= 0x2; | |
396 #endif // OP_WCP | |
397 | |
398 l1s_dsp_com.dsp_ndb_ptr->a_sch26[0] = (1<<B_SCH_CRC);// B_SCH_CRC =1, BLUD =0 | |
399 l1audio_dsp_init(); | |
400 | |
401 #if IDS | |
402 l1s_dsp_com.dsp_ndb_ptr->d_ra_conf = 0; // IDS | |
403 l1s_dsp_com.dsp_ndb_ptr->d_ra_act = 0; // IDS | |
404 l1s_dsp_com.dsp_ndb_ptr->d_ra_test = 0; // IDS | |
405 l1s_dsp_com.dsp_ndb_ptr->d_ra_statu = 0; // IDS | |
406 l1s_dsp_com.dsp_ndb_ptr->d_ra_statd = 0; // IDS | |
407 l1s_dsp_com.dsp_ndb_ptr->d_fax = 0; // IDS | |
408 #endif | |
409 | |
410 #if(RF_FAM != 61) | |
411 // interrupt rif TX on FIFO <= threshold with threshold = 0 | |
412 l1s_dsp_com.dsp_ndb_ptr->d_spcx_rif = 0x179; | |
413 #else | |
414 // l1s_dsp_com.dsp_ndb_ptr->d_spcx_rif = 0x179; TBD put hte replacement here... Danny | |
415 | |
416 #endif | |
417 | |
418 #if (DSP >= 33) | |
419 // Initialize V42b variables | |
420 l1s_dsp_com.dsp_ndb_ptr->d_v42b_nego0 = 0; | |
421 l1s_dsp_com.dsp_ndb_ptr->d_v42b_nego1 = 0; | |
422 l1s_dsp_com.dsp_ndb_ptr->d_v42b_control = 0; | |
423 l1s_dsp_com.dsp_ndb_ptr->d_v42b_ratio_ind = 0; | |
424 l1s_dsp_com.dsp_ndb_ptr->d_mcu_control = 0; | |
425 l1s_dsp_com.dsp_ndb_ptr->d_mcu_control_sema = 0; | |
426 | |
427 #if !(W_A_DSP_SR_BGD) | |
428 // Initialize background control variable to No background. Background tasks can be launch in GPRS | |
429 // as in GSM. | |
430 l1s_dsp_com.dsp_ndb_ptr->d_max_background = 0; | |
431 #endif | |
432 | |
433 #if (L1_GPRS) | |
434 #if (DSP == 36) || (DSP == 37) | |
435 // Initialize GEA module | |
436 l1ps_dsp_com.pdsp_ndb_ptr->d_gea_mode = 0; | |
437 #endif | |
438 #endif | |
439 | |
440 #else | |
441 #if (L1_GPRS) | |
442 // Initialize background control variable to No background | |
443 l1ps_dsp_com.pdsp_ndb_ptr->d_max_background = 0; | |
444 #endif | |
445 #endif | |
446 | |
447 #if (L1_GPRS) | |
448 l1ps_dsp_com.pdsp_ndb_ptr->d_sched_mode_gprs = GSM_SCHEDULER; | |
449 | |
450 // Initialize the poll response buffer to "no poll request" | |
451 l1ps_dsp_com.pdsp_ndb_ptr->a_pu_gprs[0][0] = CS_NONE_TYPE; | |
452 #else // L1_GPRS | |
453 #if (DSP >= 31) | |
454 l1s_dsp_com.dsp_ndb_ptr->d_sched_mode_gprs_ovly = GSM_SCHEDULER; | |
455 #endif | |
456 #endif // L1_GPRS | |
457 | |
458 // Set EOTD bit if required | |
459 //============================================= | |
460 #if (L1_EOTD ==1) | |
461 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= B_EOTD; | |
462 #endif // L1_EOTD | |
463 | |
464 #if (DSP == 33) | |
465 #if DCO_ALGO | |
466 // Set DCO bit | |
467 if (l1_config.params.dco_enabled == TRUE) | |
468 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= B_DCO_ON; | |
469 #endif | |
470 #endif | |
471 | |
472 // DCO algo in case of DSP 17/32 | |
473 #if (DCO_ALGO == 1) | |
474 #if ((DSP == 17)||(DSP == 32)) | |
475 l1s_dsp_com.dsp_ndb_ptr->d_tch_mode |= B_DCO_ON; | |
476 #endif // DSP | |
477 #endif // DCO_ALGO | |
478 | |
479 #if (DSP >= 34) | |
480 l1s_dsp_com.dsp_ndb_ptr->a_amr_config[0] = 0; | |
481 l1s_dsp_com.dsp_ndb_ptr->a_amr_config[1] = 0; | |
482 l1s_dsp_com.dsp_ndb_ptr->a_amr_config[2] = 0; | |
483 l1s_dsp_com.dsp_ndb_ptr->a_amr_config[3] = 0; | |
484 #endif | |
485 | |
486 #if (DSP >= 35) | |
487 l1s_dsp_com.dsp_ndb_ptr->d_thr_onset_afs = 400; // thresh detection ONSET AFS | |
488 l1s_dsp_com.dsp_ndb_ptr->d_thr_sid_first_afs = 150; // thresh detection SID_FIRST AFS | |
489 l1s_dsp_com.dsp_ndb_ptr->d_thr_ratscch_afs = 450; // thresh detection RATSCCH AFS | |
490 l1s_dsp_com.dsp_ndb_ptr->d_thr_update_afs = 300; // thresh detection SID_UPDATE AFS | |
491 l1s_dsp_com.dsp_ndb_ptr->d_thr_onset_ahs = 200; // thresh detection ONSET AHS | |
492 l1s_dsp_com.dsp_ndb_ptr->d_thr_sid_ahs = 150; // thresh detection SID frames AHS | |
493 l1s_dsp_com.dsp_ndb_ptr->d_thr_ratscch_marker = 500; // thresh detection RATSCCH MARKER | |
494 l1s_dsp_com.dsp_ndb_ptr->d_thr_sp_dgr = 3; // thresh detection SPEECH DEGRADED/NO_DATA | |
495 l1s_dsp_com.dsp_ndb_ptr->d_thr_soft_bits = 0; // thresh detection SPEECH DEGRADED/NO_DATA | |
496 #endif | |
497 | |
498 #if ((DSP >= 36) && (AMR_THRESHOLDS_WORKAROUND == 1)) | |
499 // init of the afs thresholds parameters | |
500 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[0]=0; | |
501 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[1]=0; | |
502 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[2]=0; | |
503 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[3]=0; | |
504 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[4]=0; | |
505 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[5]=0; | |
506 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[6]=0; | |
507 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_afs[7]=1500; | |
508 | |
509 // init of the ahs thresholds parameters | |
510 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[0]=1500; | |
511 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[1]=1500; | |
512 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[2]=1500; | |
513 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[3]=1500; | |
514 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[4]=1500; | |
515 l1s_dsp_com.dsp_ndb_ptr->a_d_macc_thr_ahs[5]=1500; | |
516 #endif | |
517 | |
518 // init of of the threshold for USF detection | |
519 #if 1 /* match TCS211 object */ | |
520 l1s_dsp_com.dsp_ndb_ptr->d_thr_usf_detect = 2140; | |
521 #elif (L1_FALSE_USF_DETECTION == 1) | |
522 l1s_dsp_com.dsp_ndb_ptr->d_thr_usf_detect = 2300; | |
523 #else | |
524 l1s_dsp_com.dsp_ndb_ptr->d_thr_usf_detect = 0; | |
525 #endif | |
526 | |
527 #if (CHIPSET == 12) || (CHIPSET == 15) | |
528 #if (DSP >= 35) | |
529 l1s_dsp_com.dsp_ndb_ptr->d_cport_init = 0; | |
530 #endif | |
531 #endif | |
532 | |
533 #if ((CHIPSET == 15) || (CHIPSET == 12) || (CHIPSET == 4) || ((CHIPSET == 10) && (OP_WCP == 1))) // Calypso+ or Perseus2 or locosto | |
534 #if (DSP == 36) || (DSP == 37) || (DSP == 38) || (DSP == 39) | |
535 // Note: for locosto there is only one MCSI port | |
536 l1s_dsp_com.dsp_ndb_ptr->d_mcsi_select = MCSI_PORT1; | |
537 #endif | |
538 | |
539 #if(DSP == 36) || (DSP == 37) | |
540 l1s_dsp_com.dsp_ndb_ptr->d_vol_ul_level = 0x1000; | |
541 l1s_dsp_com.dsp_ndb_ptr->d_vol_dl_level = 0x1000; | |
542 l1s_dsp_com.dsp_ndb_ptr->d_vol_speed = 0x68; | |
543 l1s_dsp_com.dsp_ndb_ptr->d_sidetone_level = 0; | |
544 #endif | |
545 #endif // ((CHIPSET == 15) || (CHIPSET == 12) || (CHIPSET == 4) || ((CHIPSET == 10) && (OP_WCP == 1))) | |
546 | |
547 // DB Init DB : Reset all pages, set TX power and reset SCH buffer... | |
548 //==================================================== | |
549 l1s_reset_db_mcu_to_dsp((T_DB_MCU_TO_DSP *) DB_W_PAGE_0); | |
550 l1s_reset_db_mcu_to_dsp((T_DB_MCU_TO_DSP *) DB_W_PAGE_1); | |
551 l1s_reset_db_dsp_to_mcu((T_DB_DSP_TO_MCU *) DB_R_PAGE_0); | |
552 l1s_reset_db_dsp_to_mcu((T_DB_DSP_TO_MCU *) DB_R_PAGE_1); | |
553 #if (DSP == 38) || (DSP == 39) | |
554 l1s_reset_db_common_mcu_to_dsp((T_DB_COMMON_MCU_TO_DSP *) DB_COMMON_W_PAGE_0); | |
555 l1s_reset_db_common_mcu_to_dsp((T_DB_COMMON_MCU_TO_DSP *) DB_COMMON_W_PAGE_1); | |
556 #endif | |
557 | |
558 #endif // NO_SIMULATION | |
559 | |
560 #if ((DSP==17)||(DSP == 32)) | |
561 // init the DC offset values | |
562 l1s_dsp_com.dsp_ndb_ptr->d_dco_type = 0x0000; // Tide off | |
563 l1s_dsp_com.dsp_ndb_ptr->p_start_IQ = 0x0000; | |
564 l1s_dsp_com.dsp_ndb_ptr->d_level_off = 0x0000; | |
565 l1s_dsp_com.dsp_ndb_ptr->d_dco_dbg = 0x0000; | |
566 l1s_dsp_com.dsp_ndb_ptr->d_tide_resa = 0x0000; | |
567 #endif | |
568 | |
569 //Initialize DSP DCO | |
570 #if (((DSP == 38) || (DSP == 39)) && (RF_FAM == 61)) | |
571 l1s_dsp_com.dsp_ndb_ptr->d_dco_samples_per_symbol = C_DCO_SAMPLES_PER_SYMBOL; | |
572 l1s_dsp_com.dsp_ndb_ptr->d_dco_fcw = C_DCO_FCW; | |
573 | |
574 // APCDEL1 will be initialized on rach only .... | |
575 l1s_dsp_com.dsp_ndb_ptr->d_apcdel1 = l1_config.params.apcdel1; | |
576 l1s_dsp_com.dsp_ndb_ptr->d_apcdel2 = l1_config.params.apcdel2; | |
577 // APCCTRL2 alone initialize on the next TDMA frame possible | |
578 l1ddsp_apc_load_apcctrl2(l1_config.params.apcctrl2); | |
579 | |
580 l1dapc_init_ramp_tables(); | |
581 | |
582 #if ((FF_REPEATED_SACCH == 1) || (FF_REPEATED_DL_FACCH == 1 )) | |
583 | |
584 /* Chase combining feature flag Initialise */ | |
585 l1s_dsp_com.dsp_ndb_ptr->d_chase_comb_ctrl |= 0x0001; | |
586 #endif /* FF_REPEATED_SACCH or FF_REPEATED_DL_FACCH */ | |
587 | |
588 #endif // DSP == 38 | |
589 | |
590 // Intialize the AFC | |
591 #if (DSP == 38) || (DSP == 39) | |
592 #if (CODE_VERSION != SIMULATION) | |
593 l1s_dsp_com.dsp_ndb_ptr->d_drp_afc_add_api = C_DRP_DCXO_XTAL_DSP_ADDRESS; | |
594 #endif | |
595 | |
596 #if (L1_DRP_IQ_SCALING == 1) | |
597 l1s_dsp_com.dsp_ndb_ptr->d_dsp_iq_scaling_factor = 1; | |
598 #else | |
599 l1s_dsp_com.dsp_ndb_ptr->d_dsp_iq_scaling_factor = 0; | |
600 #endif | |
601 #endif | |
602 | |
603 } | |
604 | |
605 /*-------------------------------------------------------*/ | |
606 /* l1_tpu_init() */ | |
607 /*-------------------------------------------------------*/ | |
608 /* Parameters : */ | |
609 /* Return : */ | |
610 /* Functionality : */ | |
611 /*-------------------------------------------------------*/ | |
612 void l1_tpu_init(void) | |
613 { | |
614 #if (CODE_VERSION == SIMULATION) | |
615 // L1S -> TPU communication... | |
616 //============================= | |
617 l1s_tpu_com.tpu_w_page = 0; | |
618 l1s_tpu_com.tpu_page_ptr = &(tpu.buf[l1s_tpu_com.tpu_w_page].line[0]); | |
619 l1s_tpu_com.reg_cmd = (T_reg_cmd*) &(hw.reg_cmd); | |
620 l1s_tpu_com.reg_com_int = &(hw.reg_com_int); | |
621 l1s_tpu_com.offset = &(hw.offset); | |
622 | |
623 // Reset TPU. | |
624 //============================= | |
625 *(l1s_tpu_com.offset) = 0; | |
626 *(l1s_tpu_com.reg_com_int) = 0; | |
627 l1s_tpu_com.reg_cmd->tpu_idle_bit = OFF; | |
628 l1s_tpu_com.reg_cmd->tpu_enb_bit = OFF; | |
629 l1s_tpu_com.reg_cmd->tpu_stat_bit = OFF; | |
630 l1s_tpu_com.reg_cmd->tpu_reset_bit = OFF; | |
631 l1s_tpu_com.reg_cmd->tpu_pag_bit = 0; | |
632 | |
633 // Init. OFFSET and SYNC registers | |
634 //================================ | |
635 l1s_tpu_com.reg_cmd->tpu_reset_bit = ON; // bit TPU_RESET active | |
636 l1dmacro_synchro(IMM, 0); // OFFSET=SYNCHRO=0 without any AT | |
637 l1dtpu_end_scenario(); // Close TPU scenario | |
638 | |
639 #else | |
640 // bit TPU_RESET set | |
641 // OFFSET and SYNCHRO initialized at 0 | |
642 // TSP_ACT bits reset | |
643 // Sleep added and TPU_ENABLE set... | |
644 l1dmacro_init_hw(); | |
645 | |
646 l1s_tpu_com.reg_cmd = (UWORD16 *) TPU_CTRL; | |
647 #endif | |
648 } | |
649 | |
650 void l1_tpu_init_light(void) | |
651 { | |
652 #if (CODE_VERSION == SIMULATION) | |
653 // L1S -> TPU communication... | |
654 //============================= | |
655 l1s_tpu_com.tpu_w_page = 0; | |
656 l1s_tpu_com.tpu_page_ptr = &(tpu.buf[l1s_tpu_com.tpu_w_page].line[0]); | |
657 l1s_tpu_com.reg_cmd = (T_reg_cmd*) &(hw.reg_cmd); | |
658 l1s_tpu_com.reg_com_int = &(hw.reg_com_int); | |
659 l1s_tpu_com.offset = &(hw.offset); | |
660 | |
661 // Reset TPU. | |
662 //============================= | |
663 *(l1s_tpu_com.offset) = 0; | |
664 *(l1s_tpu_com.reg_com_int) = 0; | |
665 l1s_tpu_com.reg_cmd->tpu_idle_bit = OFF; | |
666 l1s_tpu_com.reg_cmd->tpu_enb_bit = OFF; | |
667 l1s_tpu_com.reg_cmd->tpu_stat_bit = OFF; | |
668 l1s_tpu_com.reg_cmd->tpu_reset_bit = OFF; | |
669 l1s_tpu_com.reg_cmd->tpu_pag_bit = 0; | |
670 | |
671 // Init. OFFSET and SYNC registers | |
672 //================================ | |
673 l1s_tpu_com.reg_cmd->tpu_reset_bit = ON; // bit TPU_RESET active | |
674 l1dmacro_synchro(IMM, 0); // OFFSET=SYNCHRO=0 without any AT | |
675 l1dtpu_end_scenario(); // Close TPU scenario | |
676 | |
677 #else | |
678 // bit TPU_RESET set | |
679 // OFFSET and SYNCHRO initialized at 0 | |
680 // TSP_ACT bits reset | |
681 // Sleep added and TPU_ENABLE set... | |
682 l1dmacro_init_hw_light(); | |
683 | |
684 l1s_tpu_com.reg_cmd = (UWORD16 *) TPU_CTRL; | |
685 #endif | |
686 } | |
687 | |
688 /*-------------------------------------------------------*/ | |
689 /* l1_abb_power_on() */ | |
690 /*-------------------------------------------------------*/ | |
691 /* Parameters : */ | |
692 /* Return : */ | |
693 /* Functionality : */ | |
694 /* Initialize the global structure for spi communication */ | |
695 /* with ABB. */ | |
696 /* Set up ABB connection (CLK 13M free) */ | |
697 /* Aknowledge the ABB status register */ | |
698 /* Configure ABB modules */ | |
699 /* Program the ramp parameters into the NDB */ | |
700 /* Load in the NDB registers' value to be programmed in */ | |
701 /* ABB at first communication it */ | |
702 /*-------------------------------------------------------*/ | |
703 | |
704 //Locosto This funciton would change drastically due to Triton introduction and instead of SPI we have i2c | |
705 void l1_abb_power_on(void) | |
706 { | |
707 #if (CODE_VERSION != SIMULATION) | |
708 #if (CHIPSET != 15) | |
709 T_SPI_DEV *Abb; | |
710 T_SPI_DEV init_spi_device; | |
711 UWORD16 Abb_Status; | |
712 T_NDB_MCU_DSP * dsp_ndb_ptr; | |
713 | |
714 Abb = &init_spi_device; /* Pointer initialization to device communication structure */ | |
715 Abb->PrescVal = SPI_CLOCK_DIV_1; /* ABB transmission parameters initialization */ | |
716 Abb->DataTrLength = SPI_WNB_15; | |
717 Abb->DevAddLength = 5; | |
718 Abb->DevId = ABB; | |
719 Abb->ClkEdge = SPI_CLK_EDG_RISE; | |
720 Abb->TspEnLevel = SPI_NTSPEN_NEG_LEV; | |
721 Abb->TspEnForm = SPI_NTSPEN_LEV_TRIG; | |
722 | |
723 SPI_InitDev(Abb); /* Initialize the spi to work with ABB */ | |
724 | |
725 ABB_free_13M(); /* Set up Abb connection (CLK 13M free).*/ | |
726 Abb_Status = ABB_Read_Status(); /* Aknowledge the Abb status register. */ | |
727 | |
728 /*------------------------------------------------------------------*/ | |
729 /* Add here SW to manage Abb VRPCSTS status register informations */ | |
730 /*------------------------------------------------------------------*/ | |
731 | |
732 ABB_Read_Register_on_page(PAGE0,ITSTATREG); /* Aknowledge the interrupt status register */ | |
733 /* to clear any pending interrupt */ | |
734 | |
735 ABB_on(AFC | MADC, l1a_l1s_com.recovery_flag); | |
736 | |
737 // ADC init: Configuration of the channels to be converted and enable the ADC Interrupt | |
738 ABB_Conf_ADC(ALL,EOC_INTENA); | |
739 | |
740 //in case of reset due to a recovery process do not create the HISR | |
741 if (l1a_l1s_com.recovery_flag == FALSE) | |
742 { | |
743 Create_ABB_HISR(); | |
744 } | |
745 | |
746 // Load RAMP up/down in NDB memory... | |
747 dsp_ndb_ptr = (T_NDB_MCU_DSP *) NDB_ADR; | |
748 | |
749 if (l1_config.tx_pwr_code == 0) | |
750 { | |
751 Cust_get_ramp_tab(dsp_ndb_ptr->a_ramp, | |
752 0 /* not used */, | |
753 0 /* not used */, | |
754 1 /* arbitrary value for arfcn*/); | |
755 } | |
756 else | |
757 { | |
758 Cust_get_ramp_tab(dsp_ndb_ptr->a_ramp, | |
759 5 /* arbitrary value working in any case */, | |
760 5 /* arbitrary value working in any case */, | |
761 1 /* arbitrary value for arfcn*/); | |
762 } | |
763 #endif | |
764 | |
765 | |
766 #if (ANLG_FAM == 1) | |
767 // Omega registers values will be programmed at 1st DSP communication interrupt | |
768 | |
769 dsp_ndb_ptr->d_debug1 = l1_config.params.debug1; // Enable f_tx delay of 400000 cyc DEBUG | |
770 dsp_ndb_ptr->d_afcctladd = l1_config.params.afcctladd; // Value at reset | |
771 dsp_ndb_ptr->d_vbuctrl = l1_config.params.vbuctrl; // Uplink gain amp 0dB, Sidetone gain to mute | |
772 dsp_ndb_ptr->d_vbdctrl = l1_config.params.vbdctrl; // Downlink gain amp 0dB, Volume control 0 dB | |
773 dsp_ndb_ptr->d_bbctrl = l1_config.params.bbctrl; // value at reset | |
774 dsp_ndb_ptr->d_apcoff = l1_config.params.apcoff; // value at reset | |
775 dsp_ndb_ptr->d_bulioff = l1_config.params.bulioff; // value at reset | |
776 dsp_ndb_ptr->d_bulqoff = l1_config.params.bulqoff; // value at reset | |
777 dsp_ndb_ptr->d_dai_onoff = l1_config.params.dai_onoff; // value at reset | |
778 dsp_ndb_ptr->d_auxdac = l1_config.params.auxdac; // value at reset | |
779 dsp_ndb_ptr->d_vbctrl = l1_config.params.vbctrl; // VULSWITCH=0, VDLAUX=1, VDLEAR=1. | |
780 | |
781 // APCDEL1 will be initialized on rach only .... | |
782 dsp_ndb_ptr->d_apcdel1 =l1_config.params.apcdel1; | |
783 | |
784 #if (DSP >= 33) | |
785 // To increase the robustness the IOTA register are reseted to 0 | |
786 // if OMEGA, NAUSICA is used | |
787 dsp_ndb_ptr->d_bulgcal = 0x0000; | |
788 dsp_ndb_ptr->d_vbctrl2 = 0x0000; | |
789 dsp_ndb_ptr->d_apcdel2 = 0x0000; | |
790 #endif | |
791 #endif | |
792 #if (ANLG_FAM == 2) | |
793 // Iota registers values will be programmed at 1st DSP communication interrupt | |
794 | |
795 dsp_ndb_ptr->d_debug1 = l1_config.params.debug1; // Enable f_tx delay of 400000 cyc DEBUG | |
796 dsp_ndb_ptr->d_afcctladd = l1_config.params.afcctladd; // Value at reset | |
797 dsp_ndb_ptr->d_vbuctrl = l1_config.params.vbuctrl; // Uplink gain amp 0dB, Sidetone gain to mute | |
798 dsp_ndb_ptr->d_vbdctrl = l1_config.params.vbdctrl; // Downlink gain amp 0dB, Volume control 0 dB | |
799 dsp_ndb_ptr->d_bbctrl = l1_config.params.bbctrl; // value at reset | |
800 dsp_ndb_ptr->d_bulgcal = l1_config.params.bulgcal; // value at reset | |
801 dsp_ndb_ptr->d_apcoff = l1_config.params.apcoff; // value at reset | |
802 dsp_ndb_ptr->d_bulioff = l1_config.params.bulioff; // value at reset | |
803 dsp_ndb_ptr->d_bulqoff = l1_config.params.bulqoff; // value at reset | |
804 dsp_ndb_ptr->d_dai_onoff = l1_config.params.dai_onoff; // value at reset | |
805 dsp_ndb_ptr->d_auxdac = l1_config.params.auxdac; // value at reset | |
806 dsp_ndb_ptr->d_vbctrl1 = l1_config.params.vbctrl1; // VULSWITCH=0, VDLAUX=1, VDLEAR=1. | |
807 dsp_ndb_ptr->d_vbctrl2 = l1_config.params.vbctrl2; // MICBIASEL=0, VDLHSO=0, MICAUX=0 | |
808 | |
809 // APCDEL1 will be initialized on rach only .... | |
810 dsp_ndb_ptr->d_apcdel1 =l1_config.params.apcdel1; | |
811 dsp_ndb_ptr->d_apcdel2 = l1_config.params.apcdel2; | |
812 #endif | |
813 #if (ANLG_FAM == 3) | |
814 // Syren registers values will be programmed at 1st DSP communication interrupt | |
815 | |
816 dsp_ndb_ptr->d_debug1 = l1_config.params.debug1; // Enable f_tx delay of 400000 cyc DEBUG | |
817 dsp_ndb_ptr->d_afcctladd = l1_config.params.afcctladd; // Value at reset | |
818 dsp_ndb_ptr->d_vbuctrl = l1_config.params.vbuctrl; // Uplink gain amp 0dB, Sidetone gain to mute | |
819 dsp_ndb_ptr->d_vbdctrl = l1_config.params.vbdctrl; // Downlink gain amp 0dB, Volume control 0 dB | |
820 dsp_ndb_ptr->d_bbctrl = l1_config.params.bbctrl; // value at reset | |
821 dsp_ndb_ptr->d_bulgcal = l1_config.params.bulgcal; // value at reset | |
822 dsp_ndb_ptr->d_apcoff = l1_config.params.apcoff; // value at reset | |
823 dsp_ndb_ptr->d_bulioff = l1_config.params.bulioff; // value at reset | |
824 dsp_ndb_ptr->d_bulqoff = l1_config.params.bulqoff; // value at reset | |
825 dsp_ndb_ptr->d_dai_onoff = l1_config.params.dai_onoff; // value at reset | |
826 dsp_ndb_ptr->d_auxdac = l1_config.params.auxdac; // value at reset | |
827 dsp_ndb_ptr->d_vbctrl1 = l1_config.params.vbctrl1; // VULSWITCH=0 | |
828 dsp_ndb_ptr->d_vbctrl2 = l1_config.params.vbctrl2; // MICBIASEL=0, VDLHSO=0, MICAUX=0 | |
829 | |
830 // APCDEL1 will be initialized on rach only .... | |
831 dsp_ndb_ptr->d_apcdel1 = l1_config.params.apcdel1; | |
832 dsp_ndb_ptr->d_apcdel2 = l1_config.params.apcdel2; | |
833 | |
834 // Additional registers management brought by SYREN | |
835 dsp_ndb_ptr->d_vbpop = l1_config.params.vbpop; // HSOAUTO enabled only | |
836 dsp_ndb_ptr->d_vau_delay_init = l1_config.params.vau_delay_init; // vaud_init_delay init 2 frames | |
837 dsp_ndb_ptr->d_vaud_cfg = l1_config.params.vaud_cfg; // Init to zero | |
838 dsp_ndb_ptr->d_vauo_onoff = l1_config.params.vauo_onoff; // Init to zero | |
839 #if ((L1_AUDIO_MCU_ONOFF == 1)&&(OP_L1_STANDALONE == 1)&&(CHIPSET == 12)) | |
840 ABB_Write_Register_on_page(PAGE1, VAUOCTRL, 0x0015A); | |
841 #endif // E Sample testing of audio on off | |
842 dsp_ndb_ptr->d_vaus_vol = l1_config.params.vaus_vol; // Init to zero | |
843 dsp_ndb_ptr->d_vaud_pll = l1_config.params.vaud_pll; // Init to zero | |
844 dsp_ndb_ptr->d_togbr2 = 0; // TOGBR2 initial value handled by the DSP (this value doesn't nake any sense) | |
845 | |
846 #endif | |
847 | |
848 #if (ANLG_FAM == 11) | |
849 // The following settings need to be done only in L1 StandALoen as PSP would | |
850 // do in the case of full PS Build... | |
851 | |
852 //Set the CTRL3 register | |
853 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL3_OFFSET, | |
854 l1_config.params.ctrl3,NULL); | |
855 | |
856 #if (OP_L1_STANDALONE == 1) | |
857 // THESE REGISTERS ARE INITIALIZED IN STANDALONE AND PS BUILDS FOR AUDIO PATH | |
858 | |
859 // ************ START REG INIT FOR PS build/STANDALONE ************* | |
860 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_TOGB_OFFSET, | |
861 0x15,NULL); | |
862 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_VULGAIN_OFFSET, | |
863 l1_config.params.vulgain,NULL); | |
864 //Set the VDLGAIN register | |
865 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_VDLGAIN_OFFSET, | |
866 l1_config.params.vdlgain,NULL); | |
867 //Set the SIDETONE register | |
868 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_SIDETONE_OFFSET, | |
869 l1_config.params.sidetone,NULL); | |
870 //Set the CTRL1 register | |
871 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL1_OFFSET, | |
872 l1_config.params.ctrl1,NULL); | |
873 //Set the CTRL2 register | |
874 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL2_OFFSET, | |
875 l1_config.params.ctrl2,NULL); | |
876 | |
877 //Set the CTRL4 register | |
878 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL4_OFFSET, | |
879 l1_config.params.ctrl4,NULL); | |
880 //Set the CTRL5 register | |
881 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL5_OFFSET, | |
882 l1_config.params.ctrl5,NULL); | |
883 //Set the CTRL6 register | |
884 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_CTRL6_OFFSET, | |
885 l1_config.params.ctrl6,NULL); | |
886 //Set the POPAUTO register | |
887 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_POPAUTO_OFFSET, | |
888 l1_config.params.popauto,NULL); | |
889 | |
890 // ************ END REG INIT FOR PS build/STANDALONE **************** | |
891 | |
892 | |
893 | |
894 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN1_OFFSET, | |
895 l1_config.params.outen1,NULL); | |
896 //Set the OUTEN2 register | |
897 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN2_OFFSET, | |
898 l1_config.params.outen2,NULL); | |
899 //Set the OUTEN3 register | |
900 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN3_OFFSET, | |
901 l1_config.params.outen3,NULL); | |
902 | |
903 | |
904 | |
905 //Set the AUDLGAIN register | |
906 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_AUDLGAIN_OFFSET, | |
907 l1_config.params.aulga,NULL); | |
908 //Set the AUDRGAIN register | |
909 BspTwl3029_I2c_WriteSingle(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_AUDRGAIN_OFFSET, | |
910 l1_config.params.aurga,NULL); | |
911 #endif | |
912 | |
913 | |
914 #if (OP_L1_STANDALONE == 1) | |
915 #if (L1_MADC_ON == 1) | |
916 //MADC Real time initialization for all the 11 ADCs | |
917 bspTwl3029_Madc_enableRt( NULL, 0x7ff, l1a_madc_callback, &l1_madc_results); | |
918 #endif | |
919 #endif | |
920 | |
921 #endif | |
922 #endif //CODE_VERSION != SIMULATION | |
923 } | |
924 | |
925 /*-------------------------------------------------------*/ | |
926 /* l1_pwr_mgt_init() */ | |
927 /*-------------------------------------------------------*/ | |
928 /* Parameters : */ | |
929 /* ------------- */ | |
930 /* Return : */ | |
931 /* ------------- */ | |
932 /* Description : */ | |
933 /* ------------- */ | |
934 /* This routine is used to initialize the gauging */ | |
935 /* related variables. */ | |
936 /*-------------------------------------------------------*/ | |
937 void l1_pwr_mgt_init(void) | |
938 { | |
939 | |
940 //++++++++++++++++++++++++++++++++++++++++++ | |
941 // Power management variables | |
942 //++++++++++++++++++++++++++++++++++++++++++ | |
943 | |
944 // flags for wake-up .... | |
945 l1s.pw_mgr.Os_ticks_required = FALSE; | |
946 l1s.pw_mgr.frame_adjust = FALSE; | |
947 #if 0 /* not present in TCS211 */ | |
948 l1s.pw_mgr.wakeup_time = 0; | |
949 #endif | |
950 | |
951 // variables for sleep .... | |
952 l1s.pw_mgr.sleep_duration = 0; | |
953 l1s.pw_mgr.sleep_performed = DO_NOT_SLEEP; | |
954 l1s.pw_mgr.modules_status = 0; // all clocks ON | |
955 l1s.pw_mgr.paging_scheduled = FALSE; | |
956 | |
957 #if 0 /* not present in TCS211 */ | |
958 // variable for afc bypass mode | |
959 l1s.pw_mgr.afc_bypass_mode = AFC_BYPASS_MODE; | |
960 #endif | |
961 | |
962 // 32 Khz gauging .... | |
963 l1s.pw_mgr.gaug_count = 0; | |
964 l1s.pw_mgr.enough_gaug = FALSE; | |
965 //Nina modify to save power, not forbid deep sleep, only force gauging in next paging | |
966 #if 0 /* not present in TCS211 */ | |
967 l1s.force_gauging_next_paging_due_to_CCHR = 0; | |
968 #endif | |
969 l1s.pw_mgr.gauging_task = INACTIVE; | |
970 | |
971 // GAUGING duration | |
972 #if (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12) || (CHIPSET == 15) | |
973 if (l1_config.dpll <8 ) | |
974 l1s.pw_mgr.gaug_duration = 9; // 9 frames (no more CTRL with DSP) | |
975 else // with a dpll >= 104Mhz the HF counter is too small: gauging limitation to 6 frames. | |
976 #if(CHIPSET == 15) | |
977 // Gauging duration could be reduced to 4 frames (from 5 frames) as fast paging (FF_L1_FAST_DECODING) is available | |
978 l1s.pw_mgr.gaug_duration = 4; // 4 frames | |
979 #else | |
980 l1s.pw_mgr.gaug_duration = 6; // 6 frames | |
981 #endif | |
982 #else | |
983 l1s.pw_mgr.gaug_duration = 11; // 1CTRL + 9 frames +1CTRL | |
984 #endif | |
985 | |
986 | |
987 //------------------------------------------------- | |
988 // INIT state: | |
989 // 32.768Khz is in the range [-500 ppm,+100 ppm] | |
990 // due to temperature variation. | |
991 // LF_100PPM = 32.7712768 Khz | |
992 // LF_500PPM = 32.751616 Khz | |
993 // | |
994 // ACQUIS STATE : | |
995 // 32.768Khz variations allowed from INIT value | |
996 // are [-50 ppm,+50ppm]. Same delta on ideal 32khz | |
997 // during 9 frames (gauging duration) represents 1348*T32. | |
998 // LF_50PPM = 32.7696384 Khz | |
999 // 1348/32.768 - 1348/32.7696384 = 0.002056632 ms | |
1000 // At 78 Mhz it means : 0.002056632ms/0.000012820513ms= 160 T | |
1001 // | |
1002 // UPDATE state : | |
1003 // allowed variations are [-6 ppm,+6ppm] jitter | |
1004 // LF_6PPM = 32.76819661 Khz | |
1005 // 1348/32.768 - 1348/32.76819661 = 0.00024691 ms | |
1006 // At 78 Mhz it means : 0.00024691 / 0.000012820513ms= 19 T | |
1007 // | |
1008 // 78 Mhz 65 Mhz 84.5 Mhz | |
1009 // =========================== | |
1010 // C_CLK_MIN 2380 1983 2578 | |
1011 // C_CLK_INIT_MIN 8721 29113 31293 | |
1012 // C_CLK_MAX 2381 1984 2580 | |
1013 // C_CLK_INIT_MAX 36823 41608 1662 | |
1014 // C_DELTA_HF_ACQUIS 160 130 173 | |
1015 // C_DELTA_HF_UPDATE 19 15 20 | |
1016 //------------------------------------------------- | |
1017 #if ((CHIPSET == 2) || (CHIPSET == 3) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 9)) | |
1018 l1s.pw_mgr.c_clk_min = C_CLK_MIN; | |
1019 l1s.pw_mgr.c_clk_init_min = C_CLK_INIT_MIN; | |
1020 l1s.pw_mgr.c_clk_max = C_CLK_MAX; | |
1021 l1s.pw_mgr.c_clk_init_max = C_CLK_INIT_MAX; | |
1022 l1s.pw_mgr.c_delta_hf_acquis = C_DELTA_HF_ACQUIS; | |
1023 l1s.pw_mgr.c_delta_hf_update = C_DELTA_HF_UPDATE; | |
1024 #elif ((CHIPSET == 4) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12) || (CHIPSET == 15)) | |
1025 // 78000/32.7712768 = 2380.13308 | |
1026 l1s.pw_mgr.c_clk_min = (UWORD32)((l1_config.dpll*MCUCLK)/LF_100PPM); | |
1027 // 0.13308*2^16 | |
1028 #if 0 /* LoCosto version */ | |
1029 l1s.pw_mgr.c_clk_init_min =(UWORD32) ((UWORD32)((UWORD32)(((UWORD32)(l1_config.dpll*MCUCLK))- | |
1030 (l1s.pw_mgr.c_clk_min*LF_100PPM))* | |
1031 65536)/LF_100PPM); //omaps00090550 | |
1032 #else /* TSM30 version */ | |
1033 l1s.pw_mgr.c_clk_init_min = (UWORD32)(((double)(l1_config.dpll*MCUCLK)- | |
1034 (double)(l1s.pw_mgr.c_clk_min*LF_100PPM))* | |
1035 65536)/LF_100PPM; | |
1036 #endif | |
1037 // 78000/32.751616 = 2381.561875 | |
1038 l1s.pw_mgr.c_clk_max = (UWORD32)((l1_config.dpll*MCUCLK)/LF_500PPM); //omaps00090550 | |
1039 // 0.561875*2^16 | |
1040 #if 0 /* LoCosto version */ | |
1041 l1s.pw_mgr.c_clk_init_max =(UWORD32)((UWORD32)(((double)(l1_config.dpll*MCUCLK)- | |
1042 (double)(l1s.pw_mgr.c_clk_max*LF_500PPM))* | |
1043 65536)/LF_500PPM);//omaps00090550 | |
1044 #else /* TSM30 version */ | |
1045 l1s.pw_mgr.c_clk_init_max =(UWORD32)(((double)(l1_config.dpll*MCUCLK)- | |
1046 (double)(l1s.pw_mgr.c_clk_max*LF_500PPM))* | |
1047 65536)/LF_500PPM; | |
1048 #endif | |
1049 // remember hf is expressed in nbr of clock in hz (ex 65Mhz,104Mhz) | |
1050 l1s.pw_mgr.c_delta_hf_acquis =(UWORD32) (((GAUG_IN_32T/LF)-(GAUG_IN_32T/LF_50PPM))*(l1_config.dpll*MCUCLK));//omaps00090550 | |
1051 l1s.pw_mgr.c_delta_hf_update =(UWORD32)( ((GAUG_IN_32T/LF)-(GAUG_IN_32T/LF_6PPM ))*(l1_config.dpll*MCUCLK));//omaps00090550 | |
1052 #endif | |
1053 | |
1054 } /* l1_pwr_mgt_init() */ | |
1055 | |
1056 /*-------------------------------------------------------*/ | |
1057 /* l1_initialize_var() */ | |
1058 /*-------------------------------------------------------*/ | |
1059 /* Parameters : */ | |
1060 /* ------------- */ | |
1061 /* Return : */ | |
1062 /* ------------- */ | |
1063 /* Description : */ | |
1064 /* ------------- */ | |
1065 /* This routine is used to initialize the l1a, l1s and */ | |
1066 /* l1a_l1s_com global structures. */ | |
1067 /*-------------------------------------------------------*/ | |
1068 void l1_initialize_var(void) | |
1069 { | |
1070 UWORD32 i; | |
1071 UWORD8 task_id; | |
1072 | |
1073 //++++++++++++++++++++++++++++++++++++++++++ | |
1074 // Power management variables | |
1075 //++++++++++++++++++++++++++++++++++++++++++ | |
1076 l1_pwr_mgt_init(); | |
1077 | |
1078 //++++++++++++++++++++++++++++++++++++++++++ | |
1079 // Reset "l1s" structure. | |
1080 //++++++++++++++++++++++++++++++++++++++++++ | |
1081 | |
1082 // time counter used for debug and by L3 scenario... | |
1083 l1s.debug_time = 0; | |
1084 | |
1085 // L1S tasks management... | |
1086 //----------------------------------------- | |
1087 for(task_id=0; task_id<NBR_DL_L1S_TASKS; task_id++) | |
1088 { | |
1089 if (!((task_id == ADC_CSMODE0) && (l1a_l1s_com.recovery_flag != FALSE))) | |
1090 { | |
1091 l1s.task_status[task_id].new_status = NOT_PENDING; | |
1092 l1s.task_status[task_id].current_status = INACTIVE; | |
1093 } | |
1094 } | |
1095 l1s.frame_count = 0; | |
1096 l1s.forbid_meas = 0; | |
1097 #if L1_GPRS | |
1098 #if 0 /* not present in TCS211 */ | |
1099 l1s.tcr_prog_done=0; | |
1100 #endif | |
1101 #endif | |
1102 #if (AUDIO_DEBUG == 1) | |
1103 audio_reg_read_status=0; | |
1104 #endif | |
1105 // MFTAB management variables... | |
1106 //----------------------------------------- | |
1107 l1s.afrm = 0; | |
1108 l1s_clear_mftab(l1s.mftab.frmlst); | |
1109 | |
1110 // Controle parameters... (miscellaneous) | |
1111 //----------------------------------------- | |
1112 #if (RF_FAM != 61) | |
1113 l1s.afc = ((WORD16)l1_config.params.eeprom_afc>>3); //F13.3 -> F16.0 | |
1114 #endif | |
1115 #if (RF_FAM == 61) | |
1116 l1s.afc = ((WORD16)l1_config.params.eeprom_afc>>2); //F13.3 -> F14.0 | |
1117 #endif | |
1118 | |
1119 | |
1120 l1s.afc_frame_count = 0; | |
1121 | |
1122 #if (TOA_ALGO == 2) | |
1123 l1s.toa_var.toa_shift = ISH_INVALID; | |
1124 l1s.toa_var.toa_snr_mask = 0; | |
1125 l1s.toa_var.toa_frames_counter = 0; | |
1126 l1s.toa_var.toa_accumul_counter = 0; | |
1127 l1s.toa_var.toa_accumul_value = 0; | |
1128 l1s.toa_var.toa_update_fn = 0; | |
1129 l1s.toa_var.toa_update_flag = FALSE; | |
1130 #else | |
1131 l1s.toa_shift = ISH_INVALID; | |
1132 l1s.toa_snr_mask = 0; | |
1133 #if L1_GPRS | |
1134 l1s.toa_period_count = 0; | |
1135 l1s.toa_update = FALSE; | |
1136 #endif | |
1137 #endif | |
1138 | |
1139 #if (L1_GPRS == 1) | |
1140 #if 0 /* not present in TCS211 */ | |
1141 l1s.algo_change_synchro_active = FALSE; | |
1142 #endif | |
1143 #endif | |
1144 | |
1145 #if (L1_RF_KBD_FIX == 1) | |
1146 l1s.total_kbd_on_time = 5000; | |
1147 l1s.correction_ratio = 1; | |
1148 #endif | |
1149 /* Initialising the repeated SACCH variables */ | |
1150 #if (FF_REPEATED_SACCH == 1 ) | |
1151 l1s.repeated_sacch.srr = 0;/* SACCH Repetiton Request */ | |
1152 l1s.repeated_sacch.sro = 0;/* SACCH Repetiton Order */ | |
1153 l1s.repeated_sacch.buffer_empty = TRUE; | |
1154 #endif /* FF_REPEATED_SACCH ==1*/ | |
1155 | |
1156 #if (FF_REPEATED_DL_FACCH == 1) | |
1157 l1s.repeated_facch.pipeline[0].buffer_empty=l1s.repeated_facch.pipeline[1].buffer_empty=TRUE; | |
1158 l1s.repeated_facch.counter_candidate=0; | |
1159 l1s.repeated_facch.counter=1; | |
1160 #endif/* (FF_REPEATED_DL_FACCH == 1) */ | |
1161 | |
1162 // Init the spurious_fb_detected flag | |
1163 l1s.spurious_fb_detected = FALSE; | |
1164 | |
1165 // Flag registers for RF task controle... | |
1166 //----------------------------------------- | |
1167 l1s.tpu_ctrl_reg = 0; | |
1168 l1s.dsp_ctrl_reg = 0; | |
1169 | |
1170 // Serving... | |
1171 //============ | |
1172 | |
1173 // Serving frame number management. | |
1174 //--------------------------------- | |
1175 if (l1a_l1s_com.recovery_flag == FALSE) | |
1176 { | |
1177 l1s.actual_time.tc = 0; | |
1178 l1s.actual_time.fn = 0; | |
1179 l1s.actual_time.t1 = 0; | |
1180 l1s.actual_time.t2 = 0; | |
1181 l1s.actual_time.t3 = 0; | |
1182 l1s.actual_time.fn_in_report = 0; | |
1183 l1s.actual_time.fn_mod42432 = 0; | |
1184 | |
1185 l1s.next_time.tc = 0; | |
1186 l1s.next_time.fn = 0; | |
1187 l1s.next_time.t1 = 0; | |
1188 l1s.next_time.t2 = 0; | |
1189 l1s.next_time.t3 = 0; | |
1190 l1s.next_time.fn_in_report = 0; | |
1191 l1s.next_time.fn_mod42432 = 0; | |
1192 | |
1193 #if L1_GPRS | |
1194 l1s.actual_time.block_id = 0; | |
1195 l1s.next_time.block_id = 0; | |
1196 l1s.next_plus_time = l1s.next_time; | |
1197 l1s_increment_time(&(l1s.next_plus_time),1); | |
1198 l1s.ctrl_synch_before = FALSE; | |
1199 #if 0 /* not present in TCS211 */ | |
1200 l1s.next_gauging_scheduled_for_PNP= 0; | |
1201 #endif | |
1202 #endif | |
1203 } | |
1204 | |
1205 // TXPWR management. | |
1206 //------------------- | |
1207 l1s.reported_txpwr = 0; | |
1208 l1s.applied_txpwr = 0; | |
1209 | |
1210 // Last RXQUAL value. | |
1211 //------------------- | |
1212 l1s.rxqual = 0; | |
1213 | |
1214 // Hardware info. | |
1215 //--------------- | |
1216 l1s.tpu_offset = 0; | |
1217 l1s.tpu_offset_hw = 0; | |
1218 | |
1219 l1s.tpu_win = 0; | |
1220 | |
1221 // Initialize TXPWR info. | |
1222 l1s.last_used_txpwr = NO_TXPWR; | |
1223 | |
1224 #if (AMR == 1) | |
1225 // Reset DTX AMR status | |
1226 //--------------------- | |
1227 l1s.dtx_amr_dl_on=FALSE; | |
1228 #endif | |
1229 | |
1230 // Code version structure | |
1231 //------------------------- | |
1232 | |
1233 // DSP versions & checksum | |
1234 l1s.version.dsp_code_version = 0; | |
1235 l1s.version.dsp_patch_version = 0; | |
1236 l1s.version.dsp_checksum = 0; // checksum patch+code DSP | |
1237 | |
1238 l1s.version.mcu_tcs_program_release = PROGRAM_RELEASE_VERSION; | |
1239 l1s.version.mcu_tcs_internal = INTERNAL_VERSION; | |
1240 l1s.version.mcu_tcs_official = OFFICIAL_VERSION; | |
1241 | |
1242 #if TESTMODE | |
1243 l1s.version.mcu_tm_version = TESTMODEVERSION; | |
1244 #else | |
1245 l1s.version.mcu_tm_version = 0; | |
1246 #endif | |
1247 | |
1248 //++++++++++++++++++++++++++++++++++++++++++ | |
1249 // Reset "l1a" structure. | |
1250 //++++++++++++++++++++++++++++++++++++++++++ | |
1251 | |
1252 // Downlink tasks management... | |
1253 // Uplink tasks management... | |
1254 // Measurement tasks management... | |
1255 //----------------------------------------- | |
1256 | |
1257 if (l1a_l1s_com.recovery_flag == FALSE) | |
1258 { | |
1259 for(i=0; i<NBR_L1A_PROCESSES; i++) | |
1260 { | |
1261 l1a.l1a_en_meas[i] = 0; | |
1262 l1a.state[i] = 0; // RESET state. | |
1263 } | |
1264 } | |
1265 else | |
1266 { | |
1267 // L1A state for full list meas has to be maintained in case of recovery | |
1268 for(i=0; i<NBR_L1A_PROCESSES; i++) | |
1269 { | |
1270 if ((i != FULL_MEAS) && (i!= I_ADC)) | |
1271 { | |
1272 l1a.l1a_en_meas[i] = 0; | |
1273 l1a.state[i] = 0; // RESET state. | |
1274 } | |
1275 } | |
1276 } | |
1277 | |
1278 l1a.confirm_SignalCode = 0; | |
1279 | |
1280 // Flag for forward/delete message management. | |
1281 //--------------------------------------------- | |
1282 if (l1a_l1s_com.recovery_flag == FALSE) | |
1283 { | |
1284 l1a.l1_msg_forwarded = 0; | |
1285 } | |
1286 | |
1287 #if (L1_VOCODER_IF_CHANGE == 1) | |
1288 // Reset new vocoder interface L1A global variables: automatic disabling and vocoder enabling flag. | |
1289 l1a.vocoder_state.automatic_disable = FALSE; | |
1290 l1a.vocoder_state.enabled = FALSE; | |
1291 #endif // if L1_VOCODER_IF_CHANGE == 1 | |
1292 //++++++++++++++++++++++++++++++++++++++++++ | |
1293 // Reset "l1a_l1s_com" structure. | |
1294 //++++++++++++++++++++++++++++++++++++++++++ | |
1295 | |
1296 l1a_l1s_com.l1a_activity_flag = TRUE; | |
1297 l1a_l1s_com.time_to_next_l1s_task = 0; | |
1298 | |
1299 // Serving Cell... | |
1300 //================= | |
1301 | |
1302 // Serving Cell identity and information. | |
1303 //--------------------------------------- | |
1304 l1a_reset_cell_info(&(l1a_l1s_com.Scell_info)); | |
1305 | |
1306 l1a_l1s_com.Smeas_dedic.acc_sub = 0; | |
1307 l1a_l1s_com.Smeas_dedic.nbr_meas_sub = 0; | |
1308 l1a_l1s_com.Smeas_dedic.qual_acc_full = 0; | |
1309 l1a_l1s_com.Smeas_dedic.qual_acc_sub = 0; | |
1310 l1a_l1s_com.Smeas_dedic.qual_nbr_meas_full = 0; | |
1311 l1a_l1s_com.Smeas_dedic.qual_nbr_meas_sub = 0; | |
1312 l1a_l1s_com.Smeas_dedic.dtx_used = 0; | |
1313 | |
1314 #if REL99 | |
1315 #if FF_EMR | |
1316 // Serving Cell identity EMR information. | |
1317 //--------------------------------------- | |
1318 l1a_l1s_com.Smeas_dedic_emr.rxlev_val_acc = 0; | |
1319 l1a_l1s_com.Smeas_dedic_emr.rxlev_val_nbr_meas = 0; | |
1320 l1a_l1s_com.Smeas_dedic_emr.nbr_rcvd_blocks = 0; | |
1321 l1a_l1s_com.Smeas_dedic_emr.mean_bep_block_acc = 0; | |
1322 l1a_l1s_com.Smeas_dedic_emr.cv_bep_block_acc = 0; | |
1323 l1a_l1s_com.Smeas_dedic_emr.mean_bep_block_num = 0; | |
1324 l1a_l1s_com.Smeas_dedic_emr.cv_bep_block_num = 0; | |
1325 | |
1326 #endif | |
1327 #endif | |
1328 | |
1329 | |
1330 l1a_l1s_com.Scell_used_IL.input_level = l1_config.params.il_min; | |
1331 l1a_l1s_com.Scell_used_IL_d.input_level = l1_config.params.il_min; | |
1332 l1a_l1s_com.Scell_used_IL_dd.input_level = l1_config.params.il_min; | |
1333 | |
1334 l1a_l1s_com.Scell_used_IL.lna_off = FALSE; | |
1335 l1a_l1s_com.Scell_used_IL_d.lna_off = FALSE; | |
1336 l1a_l1s_com.Scell_used_IL_dd.lna_off = FALSE; | |
1337 | |
1338 // Synchro information. | |
1339 //--------------------------------------- | |
1340 l1a_l1s_com.tn_difference = 0; | |
1341 l1a_l1s_com.dl_tn = 0; | |
1342 #if L1_FF_WA_OMAPS00099442 | |
1343 l1a_l1s_com.change_tpu_offset_flag = FALSE; | |
1344 #endif | |
1345 | |
1346 #if L1_GPRS | |
1347 l1a_l1s_com.dsp_scheduler_mode = GSM_SCHEDULER; | |
1348 #endif | |
1349 | |
1350 // Idle parameters. | |
1351 //----------------- | |
1352 l1a_l1s_com.nbcchs.schedule_array_size=0; | |
1353 l1a_l1s_com.ebcchs.schedule_array_size=0; | |
1354 l1a_l1s_com.bcchn.current_list_size=0; | |
1355 l1a_l1s_com.nsync.current_list_size=0; | |
1356 | |
1357 #if (GSM_IDLE_RAM != 0) | |
1358 l1s.gsm_idle_ram_ctl.l1s_full_exec = TRUE; | |
1359 | |
1360 #if GSM_IDLE_RAM_DEBUG | |
1361 #if (CHIPSET == 10) && (OP_WCP == 1) | |
1362 l1s.gsm_idle_ram_ctl.TC_true_control=0; | |
1363 #endif // CHIPSET && OP_WCP | |
1364 #endif // GSM_IDLE_RAM_DEBUG | |
1365 #endif // GSM_IDLE_RAM | |
1366 | |
1367 #if (L1_12NEIGH ==1) | |
1368 for (i=0;i<NBR_NEIGHBOURS+1;i++) | |
1369 #else | |
1370 for (i=0;i<6;i++) | |
1371 #endif | |
1372 { | |
1373 l1a_l1s_com.nsync.list[i].status=NSYNC_FREE; | |
1374 } | |
1375 for (i=0;i<6;i++) | |
1376 { | |
1377 l1a_l1s_com.bcchn.list[i].status=NSYNC_FREE; | |
1378 } | |
1379 | |
1380 // EOTD variables | |
1381 #if (L1_EOTD==1) | |
1382 l1a_l1s_com.nsync.eotd_meas_session=FALSE; | |
1383 l1a_l1s_com.nsync.fn_sb_serv; | |
1384 l1a_l1s_com.nsync.ta_sb_serv; | |
1385 #endif | |
1386 | |
1387 // CBCH parameters. | |
1388 // ---------------- | |
1389 // nothing to reset. | |
1390 | |
1391 // Random Access information. | |
1392 // ---------------------------- | |
1393 // nothing to reset. | |
1394 | |
1395 // ADC management | |
1396 //--------------- | |
1397 if (l1a_l1s_com.recovery_flag == FALSE) | |
1398 l1a_l1s_com.adc_mode = ADC_DISABLED; | |
1399 | |
1400 // TXPWR management. | |
1401 //------------------- | |
1402 #if(L1_FF_MULTIBAND == 0) | |
1403 l1a_l1s_com.powerclass_band1 = 0; | |
1404 l1a_l1s_com.powerclass_band2 = 0; | |
1405 #else | |
1406 for( i = 0; i< (NB_MAX_SUPPORTED_BANDS); i++) | |
1407 { | |
1408 l1a_l1s_com.powerclass[i] = 0; | |
1409 } | |
1410 #endif | |
1411 | |
1412 // Dedicated parameters. | |
1413 //---------------------- | |
1414 l1a_l1s_com.dedic_set.aset = NULL; | |
1415 l1a_l1s_com.dedic_set.fset = NULL; | |
1416 l1a_l1s_com.dedic_set.SignalCode = 0; | |
1417 l1a_l1s_com.dedic_set.sync_tch = 0; | |
1418 l1a_l1s_com.dedic_set.reset_facch = FALSE; | |
1419 l1a_l1s_com.dedic_set.stop_tch = 0; | |
1420 #if (FF_L1_TCH_VOCODER_CONTROL) | |
1421 l1a_l1s_com.dedic_set.reset_sacch = FALSE; | |
1422 #if (L1_VOCODER_IF_CHANGE == 0) | |
1423 l1a_l1s_com.dedic_set.vocoder_on = TRUE; | |
1424 #if (W_A_DSP_PR20037 == 1) | |
1425 l1a_l1s_com.dedic_set.start_vocoder = TCH_VOCODER_ENABLE_REQ; | |
1426 #else // W_A_DSP_PR20037 == 0 | |
1427 l1a_l1s_com.dedic_set.start_vocoder = FALSE; | |
1428 #endif // W_A_DSP_PR20037 | |
1429 #else // L1_VOCODER_IF_CHANGE | |
1430 l1a_l1s_com.dedic_set.vocoder_on = FALSE; | |
1431 l1a_l1s_com.dedic_set.start_vocoder = TCH_VOCODER_RESET_COMMAND; | |
1432 #endif // L1_VOCODER_IF_CHANGE | |
1433 #endif // FF_L1_TCH_VOCODER_CONTROL | |
1434 | |
1435 l1a_l1s_com.dedic_set.radio_freq = 0; | |
1436 l1a_l1s_com.dedic_set.radio_freq_d = 0; | |
1437 l1a_l1s_com.dedic_set.radio_freq_dd = 0; | |
1438 #if ((REL99 == 1) && (FF_BHO == 1)) | |
1439 // blind handover params in dedic set | |
1440 // Initialize the handover type to default value that is Normal Handover. | |
1441 l1a_l1s_com.dedic_set.handover_type = 0; | |
1442 l1a_l1s_com.dedic_set.long_rem_handover_type = 0; | |
1443 l1a_l1s_com.dedic_set.bcch_carrier_of_nbr_cell = 0; | |
1444 l1a_l1s_com.dedic_set.fn_offset = 0; | |
1445 l1a_l1s_com.dedic_set.time_alignment = 0; | |
1446 #endif | |
1447 | |
1448 #if (L1_12NEIGH ==1) | |
1449 for (i=0;i<NBR_NEIGHBOURS+1;i++) | |
1450 #else | |
1451 for (i=0;i<6;i++) | |
1452 #endif | |
1453 { | |
1454 l1a_l1s_com.nsync.list[i].sb26_offset = 0; | |
1455 } | |
1456 | |
1457 l1a_l1s_com.dedic_set.pwrc = 0; | |
1458 l1a_l1s_com.dedic_set.handover_fail_mode = FALSE; | |
1459 #if (AMR == 1) | |
1460 l1a_l1s_com.dedic_set.sync_amr = FALSE; | |
1461 #endif | |
1462 | |
1463 // Handover parameters. | |
1464 //--------------------- | |
1465 // nothing to reset. | |
1466 | |
1467 // Neighbour Cells... | |
1468 //==================== | |
1469 | |
1470 // FULL list. | |
1471 //----------- | |
1472 l1a_reset_full_list(); | |
1473 | |
1474 // BA list. | |
1475 //--------- | |
1476 l1a_reset_ba_list(); | |
1477 l1a_l1s_com.ba_list.new_list_present = FALSE; | |
1478 | |
1479 #if L1_GPRS | |
1480 // Packet measurement: Reset of the frequency list. | |
1481 //------------------------------------------------- | |
1482 l1pa_reset_cr_freq_list(); | |
1483 #endif | |
1484 | |
1485 // L1S scheduler... | |
1486 //==================== | |
1487 | |
1488 // L1S tasks management... | |
1489 //----------------------------------------- | |
1490 { | |
1491 UWORD8 mem; | |
1492 mem = l1a_l1s_com.l1s_en_task[ADC_CSMODE0]; | |
1493 | |
1494 for(i=0; i<NBR_DL_L1S_TASKS; i++) | |
1495 { | |
1496 l1a_l1s_com.task_param[i] = SEMAPHORE_RESET; | |
1497 l1a_l1s_com.l1s_en_task[i] = TASK_DISABLED; | |
1498 } | |
1499 | |
1500 // in case of recovery do not change the ADC initialization | |
1501 if (l1a_l1s_com.recovery_flag != FALSE) | |
1502 l1a_l1s_com.l1s_en_task[ADC_CSMODE0] = mem; | |
1503 } | |
1504 | |
1505 // Measurement tasks management... | |
1506 //----------------------------------------- | |
1507 l1a_l1s_com.meas_param = 0; | |
1508 l1a_l1s_com.l1s_en_meas = 0; | |
1509 | |
1510 // L1 mode... | |
1511 //----------------------------------------- | |
1512 if (l1a_l1s_com.recovery_flag == FALSE) // do not restart from CS_MODE0 after a recovery | |
1513 l1a_l1s_com.mode = CS_MODE0; | |
1514 | |
1515 // Control algo variables. | |
1516 //----------------------------------------- | |
1517 l1a_l1s_com.fb_mode = 0; | |
1518 l1a_l1s_com.toa_reset = FALSE; | |
1519 | |
1520 #if(L1_FF_MULTIBAND == 0) | |
1521 for(i=0; i<=l1_config.std.nbmax_carrier; i++) | |
1522 #else | |
1523 for(i=0; i<= NBMAX_CARRIER; i++) | |
1524 #endif | |
1525 { | |
1526 l1a_l1s_com.last_input_level[i].input_level = l1_config.params.il_min; | |
1527 l1a_l1s_com.last_input_level[i].lna_off = FALSE; | |
1528 } | |
1529 | |
1530 #if FF_L1_IT_DSP_DTX | |
1531 // Fast DTX variables. | |
1532 //----------------------------------------- | |
1533 // Clear DTX interrupt condition | |
1534 l1a_apihisr_com.dtx.pending = FALSE; | |
1535 // Enable TX activity | |
1536 l1a_apihisr_com.dtx.tx_active = TRUE; | |
1537 // No DTX status awaited | |
1538 l1a_apihisr_com.dtx.dtx_status = DTX_AVAILABLE; | |
1539 // Fast DTX service latency timer | |
1540 l1a_apihisr_com.dtx.fast_dtx_ready_timer = 0; | |
1541 // Fast DTX service available | |
1542 l1a_apihisr_com.dtx.fast_dtx_ready = FALSE; | |
1543 #endif | |
1544 #if L1_RECOVERY | |
1545 l1s.recovery.frame_count = 0; | |
1546 #endif | |
1547 | |
1548 #if (AUDIO_TASK == 1) | |
1549 l1audio_initialize_var(); | |
1550 #endif | |
1551 | |
1552 #if (L1_GTT == 1) | |
1553 l1gtt_initialize_var(); | |
1554 #endif | |
1555 | |
1556 #if (L1_MP3 == 1) | |
1557 l1mp3_initialize_var(); | |
1558 #endif | |
1559 | |
1560 #if (L1_MIDI == 1) | |
1561 l1midi_initialize_var(); | |
1562 #endif | |
1563 //ADDED FOR AAC | |
1564 #if (L1_AAC == 1) | |
1565 l1aac_initialize_var(); | |
1566 #endif | |
1567 #if (L1_DYN_DSP_DWNLD == 1) | |
1568 l1_dyn_dwnld_initialize_var(); | |
1569 #endif | |
1570 #if (FF_L1_FAST_DECODING == 1) | |
1571 l1a_apihisr_com.fast_decoding.pending = FALSE; | |
1572 l1a_apihisr_com.fast_decoding.crc_error = FALSE; | |
1573 l1a_apihisr_com.fast_decoding.status = 0; | |
1574 l1a_apihisr_com.fast_decoding.deferred_control_req = FALSE; | |
1575 l1a_apihisr_com.fast_decoding.task = 0; | |
1576 l1a_apihisr_com.fast_decoding.burst_id = 0; | |
1577 l1a_apihisr_com.fast_decoding.contiguous_decoding = FALSE; | |
1578 #endif /* FF_L1_FAST_DECODING */ | |
1579 | |
1580 | |
1581 #if(L1_CHECK_COMPATIBLE == 1) | |
1582 l1a.vcr_wait = FALSE; | |
1583 l1a.stop_req = FALSE; | |
1584 l1a.vcr_msg_param = TRUE; | |
1585 l1a.vch_auto_disable = FALSE; | |
1586 | |
1587 #endif | |
1588 | |
1589 | |
1590 } | |
1591 | |
1592 | |
1593 /*---------------------------------------------------------*/ | |
1594 /* l1_dpll_init_var() */ | |
1595 /*---------------------------------------------------------*/ | |
1596 /* Parameters : None */ | |
1597 /* Return : None */ | |
1598 /* Functionality : Initialize L1 DPLL variable for gauging */ | |
1599 /* processing */ | |
1600 /*---------------------------------------------------------*/ | |
1601 void l1_dpll_init_var(void) { | |
1602 | |
1603 #if (CODE_VERSION != SIMULATION) | |
1604 // Init DPLL variable | |
1605 //=================== | |
1606 #if (CHIPSET == 2 || CHIPSET == 3 || CHIPSET == 5 || CHIPSET == 6 || CHIPSET == 9) | |
1607 l1_config.dpll=PLL; | |
1608 #elif ((CHIPSET == 4) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12) || (CHIPSET == 15)) | |
1609 { | |
1610 UWORD16 dpll_div; | |
1611 UWORD16 dpll_mul; | |
1612 #if (CHIPSET == 12) | |
1613 // not required for Locosto: There is NO CNTL_CLK_DSP in Locosto | |
1614 double dsp_div = CLKM_GET_DSP_DIV_VALUE; | |
1615 #endif | |
1616 | |
1617 dpll_div=DPLL_READ_DPLL_DIV; | |
1618 dpll_mul=DPLL_READ_DPLL_MUL; | |
1619 | |
1620 #if (CHIPSET == 12) | |
1621 // Not required for locsto due to the reason mentioned above. | |
1622 l1_config.dpll= ((double)(dpll_mul)/(double)(dpll_div+1))/(double)(dsp_div); | |
1623 #else | |
1624 l1_config.dpll= (double)(dpll_mul)/(double)(dpll_div+1); | |
1625 #endif | |
1626 } | |
1627 #endif | |
1628 #endif | |
1629 | |
1630 } /* l1_dpll_init_var() */ | |
1631 | |
1632 /*-------------------------------------------------------------*/ | |
1633 /* FUNCTION: l1_drp_wrapper_init */ | |
1634 | |
1635 /*-------------------------------------------------------------*/ | |
1636 | |
1637 #if(RF_FAM == 61) | |
1638 void l1_drp_wrapper_init (void) | |
1639 { | |
1640 l1ddsp_apc_load_apcctrl2(l1_config.params.apcctrl2); | |
1641 } | |
1642 #endif | |
1643 | |
1644 /*-------------------------------------------------------------*/ | |
1645 /* FUNCTION: l1_drp_init */ | |
1646 /* Params: Void */ | |
1647 /* | |
1648 Functionality: This function does the following | |
1649 1. Initialize Misc variables wrt DRP | |
1650 2a Copy the RAMP Tables into the DSP MCU API | |
1651 2b. Initialize other APIs wrt DCO | |
1652 3. Download Reference Software | |
1653 4. Call the function to : Start the REG_ON Script in the DRP | |
1654 */ | |
1655 /*-------------------------------------------------------------*/ | |
1656 | |
1657 #if (L1_DRP == 1) | |
1658 #if (DRP_FW_EXT==1) | |
1659 #pragma DATA_SECTION(l1_drp_int_mem, ".drp_ptr") | |
1660 void * l1_drp_int_mem; | |
1661 #pragma DATA_SECTION(l1_drp_ext_mem, ".drp_ptr") | |
1662 void *l1_drp_ext_mem; | |
1663 #endif | |
1664 void l1_drp_init() | |
1665 { | |
1666 //int i;- OMAPS90550-new | |
1667 #if (DRP_FW_EXT==1) | |
1668 uint32 size_int=0; | |
1669 uint32 size_ext=0; | |
1670 #endif | |
1671 #if (RF_FAM == 61) | |
1672 volatile UWORD16 *ptr_drp_init16; | |
1673 UWORD16 drp_maj_version; | |
1674 UWORD16 drp_min_version; | |
1675 | |
1676 //Initialize the following SRM_API, REG related address drp_srm_data = DRP_SRM_DATA_ADD, | |
1677 //drp_regs = DRP_REGS_BASE_ADD;, drp_srm_api = DRP_SRM_API_ADD | |
1678 | |
1679 drp_api_addr_init(); | |
1680 | |
1681 #if (DRP_FW_EXT==1) | |
1682 drp_maj_version = (drp_ref_sw_ver >> 8) & 0xFF; | |
1683 drp_min_version = (drp_ref_sw_ver & 0xFF); | |
1684 #endif | |
1685 | |
1686 //Initialize the following variables... TBD Danny | |
1687 //SRM_CW = 0x00000040, IRQ_CNT= 0x00000040 , TX_PTR_START_END_ADDR = 0X00200025, | |
1688 //RX_PTR_START_END_ADDR = 0X0000001F , 0XFFFE0806= 16 | |
1689 //The registers are 32 bit since its a RHEA peripheral has to be writtin in 16 bit writes | |
1690 // This is done by the DRP script download | |
1691 | |
1692 // The counter for # of DRP_DBB_RX_IRQs (in the wrapper) to be masked | |
1693 ptr_drp_init16 = (UWORD16 *) (DRP_DBB_RX_IRQ_MASK); | |
1694 (*ptr_drp_init16) = DRP_DBB_RX_IRQ_COUNT; | |
1695 | |
1696 #endif //RF_FAM == 61 | |
1697 l1s.boot_result=0; | |
1698 #if (DRP_FW_EXT==1) | |
1699 if(!((drp_min_version >= L1_DRP_COMPAT_MINOR_VER) && (drp_maj_version == L1_DRP_COMPAT_MAJOR_VER))) { | |
1700 l1s.boot_result = 1; | |
1701 return; | |
1702 } | |
1703 drp_get_memory_size(&size_int,&size_ext); | |
1704 /* FIXME FIXME ERROR handling for memory allocation failure */ | |
1705 if(size_int) | |
1706 { | |
1707 l1_drp_int_mem=os_alloc_sig(size_int); | |
1708 if(l1_drp_int_mem==NULL) | |
1709 { | |
1710 /*FIXME Error Handling Here */ | |
1711 l1s.boot_result = 1; | |
1712 return; | |
1713 } | |
1714 } | |
1715 if(size_ext) | |
1716 { | |
1717 l1_drp_ext_mem=os_alloc_sig(size_ext); | |
1718 | |
1719 if(l1_drp_ext_mem==NULL) | |
1720 { | |
1721 /*FIXME Error Handling Here */ | |
1722 l1s.boot_result = 1; | |
1723 return; | |
1724 } | |
1725 } | |
1726 | |
1727 // Populate pointers | |
1728 if(drpfw_init(&modem_func_jump_table,&modem_var_jump_table)) | |
1729 { | |
1730 // This condition should not be reached in phase 1 of DRP FW | |
1731 // Extraction. DRP and L1 software should always be compatible | |
1732 l1s.boot_result = 1; | |
1733 return; | |
1734 } | |
1735 | |
1736 ((T_DRP_ENV_INT_BLK *)l1_drp_int_mem)->g_pcb_config = RF_BAND_SYSTEM_INDEX; //OMAPS148175 | |
1737 | |
1738 #endif // DRP_FW_EXT==1 | |
1739 // This function would takes care of drp_ref_sw download till that is in place this would be a dummy function | |
1740 // Testing PLD_WriteRegister(0x0440, 0x165c); | |
1741 #if (RF_FAM == 60) // PLD board | |
1742 // for PLD board script downloading will happen through USP driver | |
1743 // load ref_sw_main | |
1744 // drp_ref_sw_upload(drp_ref_sw); | |
1745 drp_copy_ref_sw_to_drpsrm( (unsigned char *) drp_ref_sw); | |
1746 #elif (RF_FAM == 61) // Locosto based board | |
1747 // load ref_sw_main | |
1748 // drp_ref_sw_upload(drp_ref_sw); // TBD replace with DRP Copy function... | |
1749 drp_copy_ref_sw_to_drpsrm( (unsigned char *) drp_ref_sw); | |
1750 #endif | |
1751 | |
1752 #if (L1_DRP_DITHERING == 1) | |
1753 (*(volatile UINT8 *)CONF_MUX_VIEW8) = 0x01; | |
1754 (*(volatile UINT8 *)CONF_DEBUG_SEL_TST_8) = 0x07; | |
1755 (*(volatile UINT8 *)CONF_GPIO_17) = 0x02; | |
1756 (*(volatile UINT8 *)CONF_LOCOSTO_DEBUG) = 0x00; | |
1757 #endif | |
1758 | |
1759 } | |
1760 #endif // L1_DRP | |
1761 | |
1762 /*-------------------------------------------------------*/ | |
1763 /* l1_initialize() */ | |
1764 /*-------------------------------------------------------*/ | |
1765 /* Parameters : */ | |
1766 /* Return : */ | |
1767 /* Functionality : */ | |
1768 /*-------------------------------------------------------*/ | |
1769 void l1_initialize(T_MMI_L1_CONFIG *mmi_l1_config) | |
1770 { | |
1771 #if (TRACE_TYPE == 1) || (TRACE_TYPE == 4) || (TRACE_TYPE == 5) | |
1772 l1_trace_init(); | |
1773 #endif | |
1774 | |
1775 // this is not a recovery initialization . | |
1776 l1a_l1s_com.recovery_flag = FALSE; | |
1777 | |
1778 // initialize the ratio of the wait loop | |
1779 // must be initialized before using the wait_ARM_cycles() function !!! | |
1780 #if (CODE_VERSION != SIMULATION) | |
1781 initialize_wait_loop(); | |
1782 #endif | |
1783 | |
1784 // Init Layer 1 configuration | |
1785 //=========================== | |
1786 #if(L1_FF_MULTIBAND == 0) | |
1787 l1_config.std.id = mmi_l1_config->std; | |
1788 #endif | |
1789 | |
1790 l1_config.tx_pwr_code = mmi_l1_config->tx_pwr_code; | |
1791 #if 0 /* not present in TCS211 */ | |
1792 #if IDS | |
1793 l1_config.ids_enable = mmi_l1_config->ids_enable; | |
1794 #endif | |
1795 l1_config.facch_test.enable = mmi_l1_config->facch_test.enable; | |
1796 l1_config.facch_test.period = mmi_l1_config->facch_test.period; | |
1797 #endif | |
1798 l1_config.dwnld = mmi_l1_config->dwnld; | |
1799 | |
1800 #if TESTMODE | |
1801 // Initialize TestMode params: must be done after Omega power-on | |
1802 l1_config.TestMode = FALSE; | |
1803 // Enable control algos and ADC | |
1804 l1_config.agc_enable = 1; | |
1805 l1_config.afc_enable = 1; | |
1806 l1_config.adc_enable = 1; | |
1807 #if (FF_REPEATED_SACCH == 1) | |
1808 l1_config.repeat_sacch_enable = 1; /* Repeated SACCH mode enabled */ | |
1809 #endif /* (FF_REPEATED_SACCH == 1) */ | |
1810 #if (FF_REPEATED_DL_FACCH == 1) | |
1811 l1_config.repeat_facch_dl_enable = 1; /* Repeated SACCH mode enabled */ | |
1812 #endif /* ( FF_REPEATED_DL_FACCH == 1) */ | |
1813 #endif | |
1814 | |
1815 // sleep management configuration | |
1816 //=============================== | |
1817 l1s.pw_mgr.mode_authorized = mmi_l1_config->pwr_mngt_mode_authorized; | |
1818 l1s.pw_mgr.clocks = mmi_l1_config->pwr_mngt_clocks; | |
1819 l1_config.pwr_mngt = mmi_l1_config->pwr_mngt; | |
1820 | |
1821 Cust_init_std(); | |
1822 Cust_init_params(); | |
1823 | |
1824 | |
1825 | |
1826 // Init DPLL variable | |
1827 //=================== | |
1828 l1_dpll_init_var(); | |
1829 | |
1830 // Reset hardware (DSP,Analog Baseband device , TPU) .... | |
1831 //======================================================== | |
1832 #if (CODE_VERSION != SIMULATION) | |
1833 dsp_power_on(); | |
1834 l1_abb_power_on(); | |
1835 #if (L1_DRP == 1) | |
1836 l1_drp_init(); | |
1837 //required for interworking with Isample 2.1 and Isample 2.5 | |
1838 #if (DRP_FW_EXT == 1) | |
1839 if (!l1s.boot_result) | |
1840 { | |
1841 #endif | |
1842 //for DRP Calibration | |
1843 Cust_init_params_drp(); | |
1844 drp_efuse_init(); | |
1845 #if (DRP_FW_EXT == 1) | |
1846 } /* end if boot_result != 0 */ | |
1847 #endif | |
1848 | |
1849 #endif | |
1850 | |
1851 #endif | |
1852 | |
1853 // Initialize hardware....(DSP, TPU).... | |
1854 //================================================= | |
1855 l1_tpu_init(); | |
1856 l1_dsp_init(); | |
1857 | |
1858 // Initialize L1 variables (l1a, l1s, l1a_l1s_com). | |
1859 //================================================= | |
1860 l1_initialize_var(); | |
1861 | |
1862 // API check function | |
1863 #if ((OP_L1_STANDALONE == 1) && ((DSP == 38) || (DSP == 39)) && (CODE_VERSION != SIMULATION)) | |
1864 l1_api_dump(); | |
1865 #endif | |
1866 | |
1867 #if (L1_GPRS) | |
1868 // Initialize L1 variables used in packet mode (l1pa, l1ps, l1pa_l1ps_com). | |
1869 //======================================================================== | |
1870 initialize_l1pvar(); | |
1871 #endif | |
1872 | |
1873 // Initialize statistics mode....... | |
1874 //================================================= | |
1875 #if TRACE_TYPE==3 | |
1876 reset_stats(); | |
1877 #endif | |
1878 #if(OP_L1_STANDALONE == 1 || L1_NAVC == 1 )//NAVC | |
1879 Cust_navc_ctrl_status(1);//start - NAVC | |
1880 #endif//end of (OP_L1_STANDALONE == 1 || L1_NAVC == 1 ) | |
1881 | |
1882 } | |
1883 | |
1884 /*-------------------------------------------------------*/ | |
1885 /* l1_initialize_for_recovery */ | |
1886 /*-------------------------------------------------------*/ | |
1887 /* Parameters : */ | |
1888 /* Return : */ | |
1889 /* Functionality : This function is called for L1 */ | |
1890 /* recovery after a Crash. When there are 100 COM error */ | |
1891 /* or if ther are 100 PM =0 from the DSP Successively. */ | |
1892 /* The Layer 1 Crashes. The next time the Protocol stack */ | |
1893 /* requests for Full Rx Measurement (viz Cell selection) */ | |
1894 /* This function gets called and the L1 recovery is */ | |
1895 /* initiated. */ | |
1896 /*-------------------------------------------------------*/ | |
1897 #if L1_RECOVERY | |
1898 void l1_initialize_for_recovery(void) | |
1899 { | |
1900 LA_ResetLead(); // set DSP in reset mode | |
1901 initialize_wait_loop(); | |
1902 | |
1903 dsp_power_on(); // the reset mode is disabled here | |
1904 l1_abb_power_on(); | |
1905 #if (L1_DRP == 1) | |
1906 l1_drp_init(); | |
1907 //Required for interworking with Isample 2.1 and Isample 2.5 | |
1908 Cust_init_params_drp(); | |
1909 drp_efuse_init(); | |
1910 #endif | |
1911 l1_tpu_init(); | |
1912 #if 0 /* not in TCS211 */ | |
1913 wait_ARM_cycles(convert_nanosec_to_cycles(11000000)); // wait of 5.5 msec | |
1914 #endif | |
1915 l1_dsp_init(); | |
1916 l1_initialize_var(); | |
1917 | |
1918 #if L1_GPRS | |
1919 initialize_l1pvar(); | |
1920 #endif | |
1921 | |
1922 l1a_l1s_com.recovery_flag = FALSE; | |
1923 | |
1924 // clear pending IQ_FRAME it and enable it | |
1925 #if (CHIPSET >= 4 ) | |
1926 #if (CHIPSET == 12) || (CHIPSET == 15) | |
1927 F_INTH_RESET_ONE_IT(C_INTH_FRAME_IT); | |
1928 #else | |
1929 * (volatile UWORD16 *) INTH_IT_REG1 &= ~(1 << IQ_FRAME); // clear TDMA IRQ | |
1930 #endif | |
1931 #else | |
1932 * (volatile UWORD16 *) INTH_IT_REG &= ~(1 << IQ_FRAME); // clear TDMA IRQ | |
1933 #endif | |
1934 | |
1935 } | |
1936 #endif |