TSM30Layer1 » History » Revision 1
Revision 1/6
| Next »
laforge, 02/19/2016 10:49 PM
notes and documentation on the TSM30 Layer1 (on calypso DBB)
=== Layer1/L1i/Src/dl1_mem.c ===
allocating/receiving/sending signals.
=== Layer1/L1i/Src/dl1_pei.c ===
create/initialise/close protocol stack entity
=== Layer1/L1c/Src/l1_afunc.c ===
Functionality related bit and timeslot synchronization
=== Layer1/L1c/Inc/l1_defty.h ===
DSP shared memory API definitions
=== Layer1/L1c/Src/l1_sync.c ===
Code driven by TDMA frame interrupt as issued by DSP
Functions=== Frame/Src/Frame.c:pf_ProcessSystemPrim(USHORT TaskHandle, T_VOID_STRUCT *pPrim) ===
called from Frame/Src/vsi_com.c:vsi_c_primitive(), in turn from Layer1/L1i/Src/dl1_mem.c:os_receive_sig(UWORD8 queue)
whenever the Layer1 receives a Signal.
=== Layer1/L1i/Src/dl1_pei.c:pei_run(T_VSI_CHANDLE handle) ===
process primitives, called by main loop in the protocol stack entity
=== Layer1/L1c/Src/l1_async.c:l1a_task() ===
{{{
/* L1A (Layer 1 Asynchronous) task function. This /
/ function manages the interface between L3 and L1. It /
/ is composed with a set of state machine, each machine /
/ handles a particular GSM functionality. When a /
/ message is received in L1_C1 message queue, it is /
/ submitted to every state machine. The one which are /
/ impacted by the message process it. At the end of /
/ "l1a_task()" function, a balance routine is called, /
/ it enables L1S tasks consequently to the state machine*/
/* requests. */
}}}
- iterates over list of primitives, call l1pa_task()
=== Layer1/L1c/Src/l1p_asyn.c:l1pa_task(xSignalHeaderRec *msg) ===
call into the various lapa_*_process() functions for GPRS
=== layer1 asynchronous ===
==== l1a_test_process() ====
Hardware test
==== l1a_stats_process() ====
Statistics or Test process
==== l1a_mmi_adc_req() ====
ADC conversion
==== l1a_freq_band_configuration() ====
Frequency Band configuration: GSM900, E-GSM900, DCS1800, DUAL, DUALEXT, PCS 1900
{{{
/* Description : This state machine handles the frequency*/
/*band configuration: E_GSM900, GSM900, DCS1800, PCS1900,*/
/*DUAL, DUALEXT, DUALEXT_PCS1900... /
/ /
/ Starting messages: MPHC_INIT_L1_REQ /
/ /
/ Result messages (input): none /
/ Result messages (output): MPHC_INIT_L1_CON /
/ Reset messages (input): none */
}}}
==== l1a_initial_network_sync_process() ====
Synchronization with a Neighbour cell for Cell Selection
{{{
/* Description : This state machine handles the 1st /
/ synchronization with the network. /
/ /
/ Starting messages: MPHC_NETWORK_SYNC_REQ /
/ /
/ Result messages (input): L1C_FB_INFO /
/ L1C_SB_INFO /
/ /
/ Result messages (output): MPHC_NETWORK_SYNC_IND /
/ /
/ Reset messages (input): MPHC_STOP_NETWORK_SYNC_REQ /
/ (MPHC_STOP_NETWORK_SYNC_CON) */
}}}
==== l1a_network_lost() ====
lost Network
==== l1a_full_list_meas_process() ====
Full list receive level monitoring
{{{
/* Description: /
/ ------------ /
/ This function is a state machine which handles the /
/ Cell Selection Full List Power Measurement L1/L3 /
/ interface and it handles the neigbour cell /
/ measurement process in IDLE mode with FULL list. /
/ When a message MPHC_RXLEV_REQ is received /
/ the L1S task FSMS_MEAS is enabled. When this task /
/ is completed a reporting message L1C_VALID_MEAS_INFO /
/ is received and forwarded to L3. /
/ /
/ Starting messages: MPHC_RXLEV_REQ. /
/ /
/ Result messages (input): L1C_VALID_MEAS_INFO /
/ /
/ Result messages (output): MPHC_RXLEV_IND /
/ /
/ Reset messages (input): none /
/ /
/ Stop message (input): MPHC_STOP_RXLEV_REQ /
/ /
/ Stop message (output): MPHC_STOP_RXLEV_CON /
/ /
/ Rem: /
/ ---- /
/ L3 is in charge of the number of pass to follow the /
/ GSM recommendation. */
}}}
==== l1a_idle_ba_list_meas_process() ====
{{{
/* Description : This state machine handles neigbor cell /
/ measurement process in IDLE mode with BA list. /
/ /
/ Starting messages: MPHC_RXLEV_PERIODIC_REQ /
/ ------------------ /
/ L1 starts then the periodic BA list receive level /
/ monitoring. /
/ /
/ Subsequent messages: MPHC_RXLEV_PERIODIC_REQ /
/ -------------------- /
/ L1 changes the BA list and starts the periodic BA /
/ list receive level monitoring with this new list. /
/ /
/ Result messages (input): L1C_RXLEV_PERIODIC_DONE /
/ ------------------------ /
/ This is the periodic reporting message from L1s. /
/ /
/ Result messages (output): MPHC_RXLEV_PERIODIC_IND /
/ ------------------------- /
/ This is the periodic reporting message to L3. /
/ /
/ Reset messages (input): MPHC_STOP_RXLEV_PERIODIC_REQ*/
/* ----------------------- /
/ BA list neigbor cell measurement process in IDLE /
/ is stopped by this message. */
}}}
==== l1a_idle_6strongest_monitoring_process() ====
6 strongest Neighbor cells synchro. monitoring
{{{
/* Description: /
/ ------------ /
/ This function is a state machine which handles the /
/ synchronization with up to 6 neighbor cells /
/ /
/ Starting messages: MPHC_NCELL_SYNC_REQ /
/ ------------------ MPHC_NCELL_LIST_SYNC_REQ /
/ L1 makes an attempt to read the FB/SB or to confirm /
/ SB. /
/ /
/ /
/ Result messages (input): L1C_FB_INFO /
/ ------------------------ L1C_SB_INFO /
/ L1C_SBCONF_INFO /
/ Result messages from L1S. FB detection, SB detection,*/
/* SB confirmation. /
/ /
/ Result messages (output): MPHC_NCELL_SYNC_IND /
/ ------------------------- /
/ SB indication. /
/ /
/ Reset messages (input): MPHC_STOP_NCELL_SYNC_REQ /
/ ----------------------- (MPHC_STOP_NCELL_SYNC_CON) */
}}}
==== l1a_neighbour_cell_bcch_reading_process() ====
6 strongest Neighbor cells BCCH reading
{{{
/* Description: /
/ ------------ /
/ This function is a state machine which handles the /
/ BCCH reading from up to 6 neighbour cells /
/ /
/ Starting messages: MPHC_NCELL_BCCH_REQ /
/ ------------------ /
/ /
/ Result messages (input): L1C_BCCHN_INFO /
/ ------------------------ /
/ /
/ Result messages (output): MPHC_NCELL_BCCH_IND /
/ ------------------------- /
/ /
/ Reset messages (input): MPHC_STOP_NCELL_BCCH_REQ /
/ ----------------------- (MPHC_STOP_NCELL_BCCH_CON) */
}}}
==== l1a_idle_serving_cell_bcch_reading_process() ====
Serving Cell BCCH reading
{{{
/* Starting messages: MPHC_SCELL_NBCCH_REQ /
/ ------------------ MPHC_SCELL_EBCCH_REQ /
/ /
/ L1 continuously reads the serving cell BCCH and/or /
/ Extended BCCH as requested by the scheduling info. /
/ /
/ Result messages (input): L1C_BCCHS_INFO /
/ ------------------------ /
/ System information data block from L1S. /
/ /
/ Reset messages (input): MPHC_STOP_SCELL_BCCH_REQ /
/ ----------------------- (MPHC_STOP_SCELL_BCCH_CON) */
}}}
==== l1a_idle_serving_cell_paging_process() ====
Serving Cell PAGING reading
{{{
/* Description : This state machine handles paging /
/ /
/ Starting messages: MPHC_START_CCCH_REQ /
/ ------------------ /
/ /
/ L1 continuously reads the serving cell BCCH and/or /
/ Extended BCCH as requested by the scheduling info. /
/ /
/ Result messages (input): L1C_ALLC_INFO /
/ ------------------------ L1C_NP_INFO /
/ L1C_EP_INFO /
/ /
/ Reset messages (input): MPHC_STOP_CCCH_REQ /
/ ----------------------- (MPHC_STOP_CCCH_CON) */
}}}
==== l1a_idle_smscb_process() ====
Short Message Servive Cell Broadcast reading
{{{
/* Description : This state machine handles the SMSCB /
/ (Short Message Service Cell Broadcast). /
/ /
/ Starting messages: MPHC_CONFIG_CBCH_REQ /
/ /
/ Subsequent messages: MPHC_CBCH_SCHEDULE_REQ /
/ MPHC_CBCH_INFO_REQ /
/ MPHC_CBCH_UPDATE_REQ /
/ /
/ Result messages (input): L1C_CB_INFO /
/ /
/ Result messages (output): MPHC_DATA_IND /
/ /
/ Reset messages (input): MPHC_STOP_CBCH_REQ /
/ */
}}}
==== l1a_cres_process() ====
Cell reselection process
Synchronization and requested BCCH reading --> camp on new cell
{{{
/* Description: /
/ ------------ /
/ This function is a state machine which handles Cell /
/ Reselection. /
/ /
/ Starting messages: MPHC_NEW_SCELL_REQ /
/ ------------------ /
/ L1 camps on the given ARFCN. /
/ /
/ Result messages (output): MPHC_NEW_SCELL_CON */
}}}
==== l1a_access_process() ====
Link Access Process.
{{{
/* Description : This state machine handles the access /
/ to the network while in IDLE mode. /
/ /
/ Starting messages: MPHC_RA_REQ /
/ /
/ Subsequent messages: MPHC_RA_REQ /
/ /
/ Result messages (input): L1C_RA_DONE /
/ /
/ Result messages (output): MPHC_RA_CON /
/ /
/ Reset message (input): MPHC_STOP_RA_REQ /
/ /
/ Reset message (input): MPHC_STOP_RA_CON */
}}}
==== l1a_dedicated_process() ====
Dedicated mode process
{{{
/* Description : This state machine handles the dedicated*/
/* mode setup (L1A side). /
/ /
/ Starting messages: MPHC_IMMED_ASSIGN_REQ /
/ /
/ Subsequent messages: MPHC_CHANNEL_ASSIGN_REQ /
/ MPHC_SYNC_HO_REQ /
/ MPHC_PRE_SYNC_HO_REQ /
/ MPHC_PSEUDO_SYNC_HO_REQ /
/ MPHC_ASYNC_HO_REQ /
/ MPHC_ASYNC_HO_COMPLETE /
/ MPHC_HANDOVER_FAIL_REQ /
/ MPHC_CHANGE_FREQUENCY /
/ OML1_CLOSE_TCH_LOOP_REQ /
/ OML1_OPEN_TCH_LOOP_REQ /
/ OML1_START_DAI_TEST_REQ /
/ OML1_STOP_DAI_TEST_REQ /
/ /
/ Result messages (input): L1C_DEDIC_DONE /
/ L1C_SACCH_INFO /
/ /
/ Result messages (output): MPHC_CHANNEL_ASSIGN_CON /
/ MPHC_SYNC_HO_CON /
/ MPHC_PRE_SYNC_HO_CON /
/ MPHC_PSEUDO_SYNC_HO_CON /
/ MPHC_ASYNC_HO_CON /
/ MPHC_TA_FAIL_IND /
/ MPHC_DATA_IND /
/ OML1_CLOSE_TCH_LOOP_CON /
/ OML1_OPEN_TCH_LOOP_CON /
/ OML1_START_DAI_TEST_CON /
/ OML1_STOP_DAI_TEST_CON /
/ /
/ Reset messages (input): MPHC_CHANNEL_RELEASE */
}}}
==== l1a_dedic6_process ====
6 strongest Neighbor cells synchro. monitoring and BCCH reading
{{{
/* Description : This state machine handles the 6 strong.*/
/* neighbor cells management in dedicated mode. /
/ /
/ Remark: in dedicated mode there is no reason to use /
/ the task parameters semaphores since there is no /
/ ambiguity and no asynchronous/synchronous conflict to /
/ care about. /
/ /
/ Starting messages: L1C_DEDIC_DONE /
/ /
/ Result messages (input): L1C_FB_INFO /
/ L1C_SB_INFO /
/ L1C_SBCONF_INFO /
/ /
/ Reset messages (input): MPHC_CHANNEL_RELEASE */
}}}
=== layer 1 synchronous ===
==== Layer1/L1c/Src/l1_sync.c:hisr() ====
Interrupt Service Routine called by the DSP TDMA frame interrupt * Calls l1s_synch()
==== Layer1/L1c/Src/l1_sync.c:l1s_synch() ====
{{{
/* This function is the core of L1S. Here is a summary /
/ of the execution: /
/ /
/ - Frame counters management. /
/ - Get current communication page pointers. /
/ - RESET internal variables. /
/ - RESET MCU->DSP DB communication page. /
/ - TOA update management. /
/ /
/ - L1 task manager, /
/ - Dedicated_mode_manager. /
/ - Task_scheduler. /
/ - Execute_frame. /
/ - Neighbor cells measurement manager. /
/ - End manager. */
}}}
==== l1s_dedicated_mode_manager() ====
- assignment of a new channel, changing channel mode, ciphering start, etc.
==== l1s_task_scheduler_process() ====
{{{
/* This function is the task scheduler of L1S. It /
/ schedules any enabled task. When a task must start, /
/ it becomes PENDING. Since several tasks can become /
/ pending at the same time, the highest priority one /
/ is elected. The elected task compete then with the /
/ current running task. If they conflict, the highest /
/ priority one wins. If the winning is the new comer /
/ then the multiframe table is reset and the new coming /
/ task is installed. */
}}}
==== l1s_execute_frame() ==== * call l1s_exec_mftab()
==== Layer1/L1c/Src/l1_mfmgr.c:l1s_exec_mftab() ====
* Execute functions from MFTAB
FIXME
==== l1s_meas_manager() ====
{{{
/* Description: /
/ ------------ /
/ This function is the measurement tasks manager. /
/ The followings tasks are handled: /
/ /
/ FSMS_MEAS: /
/ 1) Full list measurement in Cell Selection /
/ The machine performs 1 valid measurement per carrier /
/ from the full list of GSM carriers. To achieve 1 /
/ valid measurement, 2 attempt with 2 different AGC /
/ are performed worst case. When all carriers are /
/ a reporting message L1C_VALID_MEAS_INFO is built and /
/ sent to L1A. /
/ /
/ 2) Full list measurement in Idle mode. /
/ The machine performs 1 valid measurement per carrier /
/ from the full list of GSM carriers. To achieve 1 /
/ valid measurement, 2 attempt with 2 different AGC /
/ are performed worst case. When all carriers are /
/ a reporting message L1C_VALID_MEAS_INFO is built and /
/ sent to L1A. /
/ /
/ I_BAMS_MEAS: BA list measurement in Idle mode. /
/ The machine performs 7 measurements per PCH reading /
/ (3*2+1) looping on the BA list. When 7 measurements are /
/ completed (end of PCH) a reporting message /
/ L1C_RXLEV_PERIODIC_DONE is built and sent to L1A. */
}}}
==== l1s_end_manager() ==== * copy page into real time trace buffer
==== l1s_increment_time() ==== * Increament the various framenumbers by one
=== DSP Tasks ===
{{{
#define HWTEST 0 // DSP checksum reading
#define ADC_CSMODE0 1 // ADC task in CS_MODE0 mode
#define DEDIC 2 // Global Dedicated mode switch
#define RAACC 3 // Channel access (ul)
#define RAHO 4 // Handover access (ul)
#define NSYNC 5 // Global Neighbour cell synchro switch
#define POLL 6 // Packet Polling (Access)
#define PRACH 7 // Packet Random Access Channel
#define ITMEAS 8 // Interference measurements
#define FBNEW 9 // Frequency burst search (Idle mode)
#define SBCONF 10 // Synchro. burst confirmation
#define SB2 11 // Synchro. burst read (1 frame uncertainty / SB position)
//#define PTCCH 12 // Packet Timing Advance control channel CCR 9-12-02 BUG02527
#define FB26 12 // Frequency burst search, dedic/transfer mode MF26 or MF52
#define SB26 13 // Synchro burst search, dedic/transfer mode MF26 or MF52
#define SBCNF26 14 // Synchro burst confirmation, dedic/transfer mode MF26 or MF52
#define FB51 15 // Frequency burst search, dedic mode MF51
#define SB51 16 // Synchro burst search, dedic MF51
#define SBCNF51 17 // Synchro burst confirmation, dedic MF51
#define PDTCH 18 // Packet Data channel
#define BCCHN 19 // BCCH Neighbor in GSM Idle
#define ALLC 20 // All CCCH Reading
#define EBCCHS 21 // Extended BCCH Serving Reading
#define NBCCHS 22 // Normal BCCH Serving Reading
#define SMSCB 23 // CBCH serving Reading
#define ADL 24 // SACCH DL
#define AUL 25 // SACCH UL
#define DDL 26 // SDCCH DL
#define DUL 27 // SDCCH UL
#define TCHD 28 // Dummy for TCH Half rate
#define TCHA 29 // SACCH
#define TCHTF 30 // TCH Full rate
#define TCHTH 31 // TCH Half rate
#define PALLC 32 // All PCCCH reading
#define PSMSCB 33 // CBCH serving Reading while in Packet Idle
#define PBCCHS 34 // PBCCH serving reading
#define PNP 35 // Packet Normal paging Reading
#define PEP 36 // Packet Extended paging Reading
#define SINGLE 37 // Single Block for GPRS
#define PBCCHN_TRAN 38 // Packet BCCH Neighbor in Packet Transfer mode.
#define PBCCHN_IDLE 39 // Packet BCCH Neighbor in Idle mode.
#define BCCHN_TRAN 40 // BCCH Neighbour in Packet Transfer mode
#define NP 41 // Normal paging Reading
#define EP 42 // Extended paging Reading
#define BCCHN_TOP 43 // BCCH Neighbour TOP priority in Idle mode
#define PTCCH 44 // Packet Timing Advance control channel
#define SYNCHRO 45 // synchro task: L1S reset
#define PTS_START_TX_BURST_TEST 46 // PTS transmission test
#define PTS_START_RX_BURST_TEST 47 // PTS receive test
#define PTS_START_FB_BURST_TEST 48 // PTS frequency burst receive test
#define PTS_START_FB26_BURST_TEST 49 // PTS frequency burst receive test
#define PTS_START_SB26_BURST_TEST 50 // PTS frequency burst receive test
}}}
=== DSP Driver (l1_drive.c) ===
==== l1ddsp_load_monit_task(API monit_task, fb_mode) ====
- monit_taks = number of measurements (max 8) + sometimes 0x200
- set FB detection algorithm
==== l1ddsp_load_txpwr(u8 vp_TxPower, u16 vp_Arfcn) ====
==== l1ddsp_load_rx_task(API rx_task, UWORD8 burst_id, UWORD8 tsq) ====
Load values into l1s_dsp_com.dsp_db_w_ptr: * d_task_d = rx_task * d_burst_d = burst_id * d_ctrl_system |= tsq << B_TSQ
==== l1ddsp_load_ra_task(API ra_task) ==== * d_task_ra = ra_task
==== l1ddsp_load_tch_mode(UWORD8 dai_mode, BOOL dtx_allowed) ====
==== l1ddsp_load_tch_param() ====
==== l1ddsp_load_ciph_param(UWORD8 a5mode, T_ENCRYPTION_KEY *ciph_key) ====
Set
* l1s_dsp_com.dsp_ndb_ptr->d_a5mode = a5mode
* l1s_dsp_com.dsp_ndb_ptr->a_kc
==== l1ddsp_stop_tch() ====
Set
* l1s_dsp_com.dsp_db_w_ptr->d_ctrl_tch |= (B_STOP_TCH_UL|B_STOP_TCH_DL)
==== l1ddsp_end_scenario() ====
- l1s_dsp_com.dsp_w_page
- l1s_dsp_com.dsp_ndb_ptr->d_dsp_page
- call l1dmacro_set_frame_it()
==== l1dmacro_set_frame_it() ====
Enable GSM Frame Interrupt on next TDMA frame
Typically called at the end of processing a TDMA frame interrupt
==== l1d_reset_hw(UWORD32 offset_value) ====
=== TPU Macros (Layer1/L1d/src/l1d_Tpu.hm) ===
==== MC_L1D_TPU_REWIND ====
Re-initialize the global current TPU pointer to L1D_TPU_RAM.
==== MC_L1D_TPU_SLEEP ====
Sleep for one TPU tick (instruction 0)
==== MC_L1D_TPU_MOVE(addr,data) ====
Put a MOVE instruction at the current TPU pointer
==== MC_L1D_TPU_AT(time) ====
Put an AT instruction at the current TPU pointer
==== MC_L1D_TPU_SYNC(time) ====
Put a SYNC instruction at the current TPU pointer
==== MC_L1D_TPU_WAIT(time) ====
Put a WAIT instruction at the current TPU pointer
==== MC_L1D_TPU_OFFSET(time) ====
Put a OFFSET instruction at the current TPU pointer
==== MC_L1D_TSP_ACT_INIT(signal) ==== * set v_L1d_TspActValue signal * issue MC_L1D_TPU_MOVE instructions for L1D_TSP_ACTX and L1D_TSP_ACT
== MC_L1D_TSP_ACT_SET(signal) ==== * set v_L1d_TspActValue |= signal * issue MC_L1D_TPU_MOVE instructions as required==== MC_L1D_TSP_ACT_RESET(signal) ==== * unset v_L1d_TspActValue |= signal * issue MC_L1D_TPU_MOVE instructions as required
=== TPU (Layer1/L1d/src/l1d_Tpu.c) ===
==== TP_Reset(u16 on) ==== * Issue L1D_TPU_CTRL_RESET in L1D_TPU_CTRL register * Wait until reset has been asserted
==== TP_Enable(u16 on) ==== * Set or unset L1D_TPU_CTRL_T_ENBL in L1D_TPU_CTRL
==== l1dmacro_idle(void) ====
==== l1dmacro_offset(u32 offset_value, s32 relative_time) ====
==== l1dmacro_synchro(u32 when, u32 value) ====
==== TPU_ClkEnable(SYS_UWORD16 on) ==== * Set or unset L1D_TPU_CTRL_CLK_EN in TPU_CTRL * wait until change becomes active
==== TPU_FrameItEnable(void) ==== * Enable Frame interrupt by TPU_CTRL_D_ENBL in TPU_CTRL
==== l1dmacro_set_frame_it(void) ==== * Call TPU_FrameItEnable()
==== l1pdmacro_it_dsp_gen(WORD16 time) * MC_L1D_TPU_AT (time); * MC_L1D_TPU_MOVE (L1D_TPU_IT_DSP_PG,0x0001);
==== l1pdmacro_anchor(WORD16 time) * MC_L1D_TPU_AT (time);
==== TPU_check_IT_DSP(void) ==== * check if an IT DSP is still pending
=== RF Frontend Driver ===
==== l1d0_0ActivateTx (u16 vp_Start, u8 vp_TxPwr, u8 vp_Band) ====
Activate TX path of the radio section to transmit a burst
==== l1d0_1DeactivateTx (u16 vp_Start, u8 vp_TxPwr, u8 vp_Band) ====
==== l1d0_2CalcArfcnNcntValue(u16 vp_Arfcn, u8 vp_TxRx, u8 vp_Band) ====
Calculate N-Counter for RF-PLL
==== l1d0_3BuildGainReg(u16 vp_Arfcn, u8 vp_Band, t_L1d_Level *pp_Level) ====
Calculate AGC register prior to Rx
==== l1d0_4DeactivateRx(u16 vp_Start) ====
Deactivate Radio Rx power control paths
==== l1d0_6RxWinCtrl(u16 vp_Arfcn, u8 vp_WinId, t_L1d_Level *pp_level, u8 vp_Fb26SpecialCase) ====
Program everything on Vega & LMX for TX path
==== l1d0_7TxWinCtrl(u16 vp_Arfcn, u8 vp_WinId, u8 vp_TxPwr) ====
Programs everything on vega & LMX for TX path except power ramping
==== l1d0_8ILToGain(u16 vp_Arfcn, u8 vp_Band, t_L1d_Level *pp_level) ====
Computes the various gains to be programmed in the LMX3411 RF chip according to the expected input level at the antenna
==== l1d0_13ActivateRx (u16 vp_Start, u8 vp_Band) ====
Activate the Radio Rx path
==== l1d0_15RfInit(void) ====
Initialization routine for RF
==== l1d0_16ProgRfArfcn(u16 vp_Arfcn, u8 vp_TxRx, u8 vp_Band) ====
Program RF synthesizer N-Counter
==== l1dmacro_reset_hw(u32 vp_ServingCellOffset) ====
Reset and set OFFSET register serving cell offset
==== l1dmacro_init_hw(void) ====
Reset VEGA, then remove reset & Init RF synthesizers
==== l1d_GenerateLMXRCountRegister(u8 vp_Band, u8 vp_TxRx) ====
Creates R counter register for LMX
=== l1s (Layer1/L1c/Inc/l1_defty.h:T_L1S_GLOBAL) ===
Global Layer1 Sync variables, such as
* L1S Task Management
* MFTAB management variables
* Control Parameters (TOA)
* TPU and DSP control registers
* Frame Number Management for serving cell (actual_time, next_time, next_plus_time)
* TX Power management
* RXqual mesurement
=== l1a (Layer1/L1c/Inc/l1_defty.h:T_L1A_GLOBAL) ===
Global Layer1 Async variables, such as
* State for L1A machines (1 for each L1A_PROCESS)
* L1A Task management
* MEasurement task management
=== l1a_l1s_com (T_L1A_L1S_COM) ===
Communication Structure from L1A into L1S
* serving cell identity / information
* parameters for idle mode
* parameters for CBCH
* random access information
* ADC management
* TXPWR management
* dedicated channel parameters (T_DEDIC_PARAM)
* neighbor cell information
* BA list / FULL list
* L1S task management
* measurement tasks management
* input level memory for AGC management
=== l1s_dsp_com (T_L1S_DSP_COM) ===
Communication structure for L1S -> DSP communication
* active page for ARM writing to DSP
* active page for ARM reading from DSP
* pointers to dual-buffered (DB) and non-dual-buffered (NDB) MCU<->DSP pages
==== T_DB_MCU_TO_DSP ===
* {downlink,uplink} task {command, burst identifier}
* d_task_d -- Downlink DSP task number
* d_burst_d -- Downlink burst identifier
* d_task_u -- Uplink DSP task number
* d_burst_u -- Uplink burst identifier
* d_task_md -- downlink monitoring (FB/SB) command
* d_background -- background tasks
* d_debug -- Debug/Acknowledge/general purpose word
* d_task_ra -- RA task command
* d_fn -- frane mumber in case of TCH
{{{
// bit [0..7] -> b_fn_report, FN in the normalized reporting period.
// bit [8..15] -> b_fn_sid, FN % 104, used for SID positionning.
}}}
* d_ctrl_tch -- TCH description
{{{
// bit [0..3] -> b_chan_mode, channel mode.
// bit [4..5] -> b_chan_type, channel type.
// bit [6] -> reset SACCH.
// bit [7] -> vocoder ON
// bit [8] -> b_sync_tch_ul, synchro. TCH/UL.
// bit [9] -> b_sync_amr,
// bit [10] -> b_stop_tch_ul, stop TCH/UL.
// bit [11] -> b_stop_tch_dl, stop TCH/DL.
// bit [12.14] -> b_tch_loop, tch loops A/B/C.
// bit [15] -> b_subchannel
}}}
* d_ctrl_abb -- Bit field indicating teh analog baseband register to send
{{{
// bit [0] -> b_ramp: the ramp information(a_ramp[]) is located in NDB
// bit [1.2] -> unused
// bit [3] -> b_apcdel: delays-register in NDB
// bit [4] -> b_afc: freq control register in DB
// bit [5..15] -> unused
}}}
* da_a5fn -- encryption frame number
{{{
// word 0, bit [0..4] -> T2.
// word 0, bit [5..10] -> T3.
// word 1, bit [0..11] -> T1.
}}}
* d_power_ctl -- power level control (L1D_AUXAPC|n)
* d_afc -- AFC value (enabled by b_afc in d_ctrl_abb)
* d_ctrl_system -- Control Register for RESET/RESUME
{{{
// bit [0..2] -> b_tsq, training sequence.
// bit [3] -> b_bcch_freq_ind, BCCH frequency indication.
// bit [15] -> b_task_abort, DSP task abort command.
}}}
==== T_DB_DSP_TO_MCU ==== * {downlink,uplink} task {command, burst identifier} * d_task_d * d_burst_d * d_task_u * d_burst_u * d_task_md -- downlink monitoring (FB/SB) command * number of cells to monitor * d_background -- background tasks * d_task_ra -- RA task command * a_serv_Demod -- Serv. cell demod. result, array of 4 words (TOA,PM,ANGLE,SNR) * a_pm -- Power measurement results, array of 3 words * a_sch -- Header + SB information, array of 5 words
==== T_NDB_MCU_DSP ====
* d_dsp_page
{{{
// bit0 -> B_GSM_PAGE: which of the two double-buffered pages is current
// bit1 -> B_GSM_TASK: is the GSM TASK active?
// bit2 -> B_MISC_PAGE: which of the two misc pages is current
// bit3 -> B_MISC_TASK: are MISC tasks active?
}}}
* d_error_status -- DSP status returned (DSP->MCU)
* d_spcx_rif -- RIF control (MCU->DSP), always set to 0x179
* d_tch_mode -- TCH mode register
{{{
// bit [0..1] -> b_dai_mode.
// bit [2] -> b_dtx.
// bit3 -> play_ul when set to 1
// bit4 -> play_dl when set to 1
// bit5 -> DTX selection for voice memo
// bit6 -> Reserved for ciphering debug
// bit[7..10] -> Reserved for ramp up control
// bit11 -> Reserved for analog device selection
}}}
* d_debug1 -- bit 0 at 1 enable dsp f_tx delay of 400000 cyc DEBUG
* d_dsp_test
* API version number information
* d_version_number1 -- code version number
* d_version_number2 -- patch version number
* debug buffer for tracing
* p_debug_buffer
* d_debug_buffer_size
* d_debug_trace_type
* d_dsp_state -- DSP report its stata: 0 run, 1 Idle1, 2 Idle2, 3 Idle3
* p_debug_amr -- AMR debugging
* d_mcsi_select -- Related to the MCSI bus interface
* New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations
* d_apcdel1_bis
* d_apcdel2_bis
* New registres due to IOTA ABB
* d_apcdel2 -- copied from l1config.params.apcdel2
* d_vbctrl2
* d_bulgcal -- Calibration value copied from l1_config.params.bulgcal
* Analog Base Band
* d_afcctladd -- Copied form l1_config.params.afcctladd
* d_vbuctrl -- Voice Uplink Control?
* d_vbdctrl -- Voice Downlink Control?
* d_apcdel1 -- APC?
* d_apcoff -- APC?
* d_bulioff -- Copied from l1_config.params.bulioff
* d_bulqoff -- Copied from l1_config.params.bulqoff
* d_dai_onoff -- Copied from l1_config.params.dai_onoff
* d_auxdac --
* d_bbctrl
* results of monitoring tasks (FB + SB) DSP->MCU
* d_fb_det -- FB detection result (1 for FOUND)
* d_fb_mode -- Mode for FB detection algorithm
* FB_MODE_0 -- wideband search for FB detection
* FB_MODE_1
* a_async_demod4 -- FB/SB demod. result (TOA,PM,ANGLE,SNR)
* audio gain for upolink and downlink
* d_audio_gain_ul
* d_audio_gain_dl
* audio playback related data
* d_audio_compressor_ctrl
* d_audio_init
* d_audio_status
* Tones (MCU -> DSP)
* d_toneskb_init
* d_toneskb_status
* d_k_x1_t0
* d_k_x1_t1
* d_k_x1_t2
* d_pe_rep
* d_pe_off
* d_se_off
* d_bu_off
* d_t0_on
* d_t0_off
* d_t1_on
* d_t1_off
* d_t2_on
* d_t2_off
* d_k_x1_kt0
* d_k_x1_kt1
* d_dur_kb
* d_shiftdl
* d_shiftul
* d_aec_ctrl
* d_es_level_api
* d_mu_api
* melody ringer module
* d_melo_osc_used
* d_melo_osc_active
* a_melo_route0 ... a_melo_route7
* d_melody_selection -- selection of melody format
* speech recognition related data
* d_sr_status
* d_sr_param -- parameters for the DSP speech recognition task: OOV threshold
* d_sr_bit_exact_test
* d_sr_nb_words -- number of words used in the speech recognition task
* d_sr_db_level -- Estimate voice level in dB
* d_sr_db_noise -- Estimate noise in dB
* a_n_best_words -- Array of the 4 best words
* a_n_best_score -- Array of the 4 best scores (32bit for each score)
* audio buffer
* a_dd_122
* a_du_122
* v42bis module
* d_v42b_nego0
* d_v42b_nego1
* d_v42b_control
* d_v42b_ratio_ind
* d_mcu_control
* d_mcu_control_sema
* background tasks
* d_background_enable
* B_DSPBGD_RECO -- background recognition task code
* C_BGD_RECOGN
* B_DSPBGD_UPD -- start of alignment update in dsp background
* C_BGD_ALIGN
* d_background_abort
* d_background_state
* d_max_background
* a_background_tasks16
* a_back_task_io16
* GPRS/GEA ciphering info
* d_gea_mode_ovly
* a_gea_kc_ovly4
* d_thr_usf_detect -- word used for the init of USF threshold
* d_a5mode -- A5 encryption mode
* d_sched_mode_grps_ovly
* a_ramp16 -- power ramp information
* actual data inside logical channels
* a_cd15 -- CCCH/SACCH downlink information
* a_fd15 -- FACCH downlink information
* a_dd_022 -- traffic downlink data frames
* a_cu15 -- CCCH/SACCH uplink information
* a_fu15 -- FACCH upilink information
* a_du_022 -- TCH upilink data frames
* d_rach -- RACH information (MCU -> DSP)
* a_kc4 -- Kc (MCU->DSP)
* integrated data services module
* speech recognition model
* EOTD related data
* AMR v1.0 buffers
* a_amr_config4
* a_ratscch_ul6
* a_ratscch_dl6
* d_amr_snr_est -- estimation of the SNR of the AMR speech block
* detection thresholds
==== T_PARAM_MCU_DSP ====
All parameters are initialized at dsp_power_on() time form a static array.
- d_transfer_rate
- GPRS related latencies * d_lat_mcu_bridge * d_lat_mcu_hom2sam * d_lat_mcu_bef_fast_access * d_lat_dsp_after_sam
- d_grps_install_address (dsp start address)
- d_misc_config
- d_cn_sw_workaround
- d_fb_margin_beg
- Frequency Correction Burst (FB) * d_fb_margin_beg * d_fb_margin_end * d_nsubb_idle * d_nsubb_dedic * d_fb_thr_det_iacq * d_fb_thr_det_track
- Demodulation * d_dc_off_thres * d_dummy_thres * d_dem_pond_gewl * d_dem_pond_red
- TCH/F V1 Full-Rate Speech * d_maccthresh1 * d_mldt * d_maccthresh * d_gu * d_go * d_attmax * d_sm * d_b
- V42bis related data
- TCH/H V1 Half-Rate * d_ldT_hr * d_maccthresh_hr * d_maccthresh1_hr * d_gu_hr * d_go_hr * d_sm_hr * d_attmax_hr
- TCH/F V2 EFR * c_mldt_efr * c_maccthresh_efr * c_maccthresh1_efr * c_gu_efr * c_go_efr * c_b_efr * c_sm_efr * c_attmax_efr
- CHED
- FACCH module * d_facch_thr
- IDS module
- FIR coefficients * a_fir31_uplink31; * a_fir32_downlink31;
=== l1s_tpu_com (T_L1S_TPU_COM) ===
Updated by laforge about 8 years ago · 1 revisions