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