osmocom-bb/src/target/firmware/include/calypso/dsp_api.h

1561 lines
44 KiB
C

#ifndef _CAL_DSP_API_H
#define _CAL_DSP_API_H
/* This is a header file with structures imported from the TSM30 source code (l1_defty.h)
*
* As this header file only is a list of definitions and data structures, it is
* not ocnsidered to be a copyrightable work itself.
*
* Nonetheless, it might be good to rewrite it (without ugly typedefs!) */
#if(L1_DYN_DSP_DWNLD == 1)
#include "l1_dyn_dwl_defty.h"
#endif
/* Include a header file that defines everything this l1_defty.h needs */
#include "l1_environment.h"
#define BASE_API_NDB 0xFFD001A8L /* 268 words */
#define BASE_API_PARAM 0xFFD00862L /* 57 words */
#define BASE_API_R_PAGE_0 0xFFD00050L /* 20 words */
#define BASE_API_R_PAGE_1 0xFFD00078L /* 20 words */
#define BASE_API_W_PAGE_0 0xFFD00000L /* 20 words */
#define BASE_API_W_PAGE_1 0xFFD00028L /* 20 words */
/***********************************************************/
/* */
/* Data structure for global info components. */
/* */
/***********************************************************/
typedef struct
{
API d_task_d; // (0) Downlink task command.
API d_burst_d; // (1) Downlink burst identifier.
API d_task_u; // (2) Uplink task command.
API d_burst_u; // (3) Uplink burst identifier.
API d_task_md; // (4) Downlink Monitoring (FB/SB) command.
#if (DSP == 33) || (DSP == 34) || (DSP == 35) || (DSP == 36)
API d_background; // (5) Background tasks
#else
API d_reserved; // (5) Reserved
#endif
API d_debug; // (6) Debug/Acknowledge/general purpose word.
API d_task_ra; // (7) RA task command.
API d_fn; // (8) FN, in Rep. period and FN%104, used for TRAFFIC/TCH only.
// bit [0..7] -> b_fn_report, FN in the normalized reporting period.
// bit [8..15] -> b_fn_sid, FN % 104, used for SID positioning.
API d_ctrl_tch; // (9) Tch channel 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_tch_dl, synchro. TCH/DL.
// bit [10] -> b_stop_tch_ul, stop TCH/UL.
// bit [11] -> b_stop_tch_dl, stop TCH/DL.
// bit [12.13] -> b_tch_loop, tch loops A/B/C.
API hole; // (10) unused hole.
#if ((ANLG_FAM == 1) || (ANLG_FAM == 2) || (ANLG_FAM == 3))
API d_ctrl_abb; // (11) Bit field indicating the 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
#endif
API a_a5fn[2]; // (12..13) Encryption Frame number.
// word 0, bit [0..4] -> T2.
// word 0, bit [5..10] -> T3.
// word 1, bit [0..11] -> T1.
API d_power_ctl; // (14) Power level control.
API d_afc; // (15) AFC value (enabled by "b_afc" in "d_ctrl_TCM4400 or in d_ctrl_abb").
API d_ctrl_system; // (16) 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_MCU_TO_DSP;
typedef struct
{
API d_task_d; // (0) Downlink task command.
API d_burst_d; // (1) Downlink burst identifier.
API d_task_u; // (2) Uplink task command.
API d_burst_u; // (3) Uplink burst identifier.
API d_task_md; // (4) Downlink Monitoring (FB/SB) task command.
#if (DSP == 33) || (DSP == 34) || (DSP == 35) || (DSP == 36)
API d_background; // (5) Background tasks
#else
API d_reserved; // (5) Reserved
#endif
API d_debug; // (6) Debug/Acknowledge/general purpose word.
API d_task_ra; // (7) RA task command.
#if (DSP == 33) || (DSP == 34) || (DSP == 35) || (DSP == 36)
API a_serv_demod[4]; // ( 8..11) Serv. cell demod. result, array of 4 words (D_TOA,D_PM,D_ANGLE,D_SNR).
API a_pm[3]; // (12..14) Power measurement results, array of 3 words.
API a_sch[5]; // (15..19) Header + SB information, array of 5 words.
#else
API a_pm[3]; // ( 8..10) Power measurement results, array of 3 words.
API a_serv_demod[4]; // (11..14) Serv. cell demod. result, array of 4 words (D_TOA,D_PM,D_ANGLE,D_SNR).
API a_sch[5]; // (15..19) Header + SB information, array of 5 words.
#endif
}
T_DB_DSP_TO_MCU;
#if (DSP == 34) || (DSP == 35) || (DSP == 36) // NDB GSM
typedef struct
{
// MISC Tasks
API d_dsp_page;
// DSP status returned (DSP --> MCU).
API d_error_status;
// RIF control (MCU -> DSP).
API d_spcx_rif;
API d_tch_mode; // TCH mode register.
// bit [0..1] -> b_dai_mode.
// bit [2] -> b_dtx.
API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega
API d_dsp_test;
// Words dedicated to Software version (DSP code + Patch)
API d_version_number1;
API d_version_number2;
API d_debug_ptr;
API d_debug_bk;
API d_pll_config;
// GSM/GPRS DSP Debug trace support
API p_debug_buffer;
API d_debug_buffer_size;
API d_debug_trace_type;
#if (W_A_DSP_IDLE3 == 1)
// DSP report its state: 0 run, 1 Idle1, 2 Idle2, 3 Idle3.
API d_dsp_state;
// 5 words are reserved for any possible mapping modification
API d_hole1_ndb[2];
#else
// 6 words are reserved for any possible mapping modification
API d_hole1_ndb[3];
#endif
#if (AMR == 1)
API p_debug_amr;
#else
API d_hole_debug_amr;
#endif
#if (CHIPSET == 12)
#if (DSP == 35) || (DSP == 36)
API d_hole2_ndb[1];
API d_mcsi_select;
#else
API d_hole2_ndb[2];
#endif
#else
API d_hole2_ndb[2];
#endif
// New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations
API d_apcdel1_bis;
API d_apcdel2_bis;
// New registers due to IOTA analog base band
API d_apcdel2;
API d_vbctrl2;
API d_bulgcal;
// Analog Based Band
API d_afcctladd;
API d_vbuctrl;
API d_vbdctrl;
API d_apcdel1;
API d_apcoff;
API d_bulioff;
API d_bulqoff;
API d_dai_onoff;
API d_auxdac;
#if (ANLG_FAM == 1)
API d_vbctrl;
#elif ((ANLG_FAM == 2) || (ANLG_FAM == 3))
API d_vbctrl1;
#endif
API d_bbctrl;
// Monitoring tasks control (MCU <- DSP)
// FB task
API d_fb_det; // FB detection result. (1 for FOUND).
API d_fb_mode; // Mode for FB detection algorithm.
API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR).
// SB Task
API a_sch26[5]; // Header + SB information, array of 5 words.
API d_audio_gain_ul;
API d_audio_gain_dl;
// Controller of the melody E2 audio compressor
API d_audio_compressor_ctrl;
// AUDIO module
API d_audio_init;
API d_audio_status;
// Audio tasks
// TONES (MCU -> DSP)
API d_toneskb_init;
API d_toneskb_status;
API d_k_x1_t0;
API d_k_x1_t1;
API d_k_x1_t2;
API d_pe_rep;
API d_pe_off;
API d_se_off;
API d_bu_off;
API d_t0_on;
API d_t0_off;
API d_t1_on;
API d_t1_off;
API d_t2_on;
API d_t2_off;
API d_k_x1_kt0;
API d_k_x1_kt1;
API d_dur_kb;
API d_shiftdl;
API d_shiftul;
API d_aec_ctrl;
API d_es_level_api;
API d_mu_api;
// Melody Ringer module
API d_melo_osc_used;
API d_melo_osc_active;
API a_melo_note0[4];
API a_melo_note1[4];
API a_melo_note2[4];
API a_melo_note3[4];
API a_melo_note4[4];
API a_melo_note5[4];
API a_melo_note6[4];
API a_melo_note7[4];
// selection of the melody format
API d_melody_selection;
// Holes due to the format melody E1
API a_melo_holes[3];
// Speech Recognition module
API d_sr_status; // status of the DSP speech reco task
API d_sr_param; // parameters for the DSP speech reco task: OOV threshold.
API d_sr_bit_exact_test; // bit exact test
API d_sr_nb_words; // number of words used in the speech recognition task
API d_sr_db_level; // estimate voice level in dB
API d_sr_db_noise; // estimate noise in dB
API d_sr_mod_size; // size of the model
API a_n_best_words[4]; // array of the 4 best words
API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length)
// Audio buffer
API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1.
API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1.
// V42bis module
API d_v42b_nego0;
API d_v42b_nego1;
API d_v42b_control;
API d_v42b_ratio_ind;
API d_mcu_control;
API d_mcu_control_sema;
// Background tasks
API d_background_enable;
API d_background_abort;
API d_background_state;
API d_max_background;
API a_background_tasks[16];
API a_back_task_io[16];
// GEA module defined in l1p_deft.h (the following section is overlaid with GPRS NDB memory)
API d_gea_mode_ovly;
API a_gea_kc_ovly[4];
#if (ANLG_FAM == 3)
// SYREN specific registers
API d_vbpop;
API d_vau_delay_init;
API d_vaud_cfg;
API d_vauo_onoff;
API d_vaus_vol;
API d_vaud_pll;
API d_hole3_ndb[1];
#elif ((ANLG_FAM == 1) || (ANLG_FAM == 2))
API d_hole3_ndb[7];
#endif
// word used for the init of USF threshold
API d_thr_usf_detect;
// Encryption module
API d_a5mode; // Encryption Mode.
API d_sched_mode_gprs_ovly;
// 7 words are reserved for any possible mapping modification
API d_hole4_ndb[5];
// Ramp definition for Omega device
API a_ramp[16];
// CCCH/SACCH downlink information...(!!)
API a_cd[15]; // Header + CCCH/SACCH downlink information.
// FACCH downlink information........(!!)
API a_fd[15]; // Header + FACCH downlink information.
// Traffic downlink data frames......(!!)
API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0.
// CCCH/SACCH uplink information.....(!!)
API a_cu[15]; // Header + CCCH/SACCH uplink information.
// FACCH downlink information........(!!)
API a_fu[15]; // Header + FACCH uplink information
// Traffic downlink data frames......(!!)
API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0.
// Random access.....................(MCU -> DSP).
API d_rach; // RACH information.
//...................................(MCU -> DSP).
API a_kc[4]; // Encryption Key Code.
// Integrated Data Services module
API d_ra_conf;
API d_ra_act;
API d_ra_test;
API d_ra_statu;
API d_ra_statd;
API d_fax;
API a_data_buf_ul[21];
API a_data_buf_dl[37];
// GTT API mapping for DSP code 34 (for test only)
#if (L1_GTT == 1)
API d_tty_status;
API d_tty_detect_thres;
API d_ctm_detect_shift;
API d_tty_fa_thres;
API d_tty_mod_norm;
API d_tty_reset_buffer_ul;
API d_tty_loop_ctrl;
API p_tty_loop_buffer;
#else
API a_tty_holes[8];
#endif
API a_sr_holes0[414];
#if (L1_NEW_AEC)
// new AEC
API d_cont_filter;
API d_granularity_att;
API d_coef_smooth;
API d_es_level_max;
API d_fact_vad;
API d_thrs_abs;
API d_fact_asd_fil;
API d_fact_asd_mut;
API d_far_end_pow_h;
API d_far_end_pow_l;
API d_far_end_noise_h;
API d_far_end_noise_l;
#else
API a_new_aec_holes[12];
#endif // L1_NEW_AEC
// Speech recognition model
API a_sr_holes1[145];
API d_cport_init;
API d_cport_ctrl;
API a_cport_cfr[2];
API d_cport_tcl_tadt;
API d_cport_tdat;
API d_cport_tvs;
API d_cport_status;
API d_cport_reg_value;
API a_cport_holes[1011];
API a_model[1041];
// EOTD buffer
#if (L1_EOTD==1)
API d_eotd_first;
API d_eotd_max;
API d_eotd_nrj_high;
API d_eotd_nrj_low;
API a_eotd_crosscor[18];
#else
API a_eotd_holes[22];
#endif
// AMR ver 1.0 buffers
API a_amr_config[4];
API a_ratscch_ul[6];
API a_ratscch_dl[6];
API d_amr_snr_est; // estimation of the SNR of the AMR speech block
#if (L1_VOICE_MEMO_AMR)
API d_amms_ul_voc;
#else
API a_voice_memo_amr_holes[1];
#endif
API d_thr_onset_afs; // thresh detection ONSET AFS
API d_thr_sid_first_afs; // thresh detection SID_FIRST AFS
API d_thr_ratscch_afs; // thresh detection RATSCCH AFS
API d_thr_update_afs; // thresh detection SID_UPDATE AFS
API d_thr_onset_ahs; // thresh detection ONSET AHS
API d_thr_sid_ahs; // thresh detection SID frames AHS
API d_thr_ratscch_marker;// thresh detection RATSCCH MARKER
API d_thr_sp_dgr; // thresh detection SPEECH DEGRADED/NO_DATA
API d_thr_soft_bits;
#if (MELODY_E2)
API d_melody_e2_osc_stop;
API d_melody_e2_osc_active;
API d_melody_e2_semaphore;
API a_melody_e2_osc[16][3];
API d_melody_e2_globaltimefactor;
API a_melody_e2_instrument_ptr[8];
API d_melody_e2_deltatime;
#if (AMR_THRESHOLDS_WORKAROUND)
API a_d_macc_thr_afs[8];
API a_d_macc_thr_ahs[6];
#else
API a_melody_e2_holes0[14];
#endif
API a_melody_e2_holes1[693];
API a_dsp_trace[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE];
API a_melody_e2_instrument_wave[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT];
#else
API d_holes[61];
#if (AMR_THRESHOLDS_WORKAROUND)
API a_d_macc_thr_afs[8];
API a_d_macc_thr_ahs[6];
#endif
#endif
}
T_NDB_MCU_DSP;
#elif (DSP == 33) // NDB GSM
typedef struct
{
// MISC Tasks
API d_dsp_page;
// DSP status returned (DSP --> MCU).
API d_error_status;
// RIF control (MCU -> DSP).
API d_spcx_rif;
API d_tch_mode; // TCH mode register.
// bit [0..1] -> b_dai_mode.
// bit [2] -> b_dtx.
API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega
API d_dsp_test;
// Words dedicated to Software version (DSP code + Patch)
API d_version_number1;
API d_version_number2;
API d_debug_ptr;
API d_debug_bk;
API d_pll_config;
// GSM/GPRS DSP Debug trace support
API p_debug_buffer;
API d_debug_buffer_size;
API d_debug_trace_type;
#if (W_A_DSP_IDLE3 == 1)
// DSP report its state: 0 run, 1 Idle1, 2 Idle2, 3 Idle3.
API d_dsp_state;
// 10 words are reserved for any possible mapping modification
API d_hole1_ndb[5];
#else
// 11 words are reserved for any possible mapping modification
API d_hole1_ndb[6];
#endif
// New words APCDEL1 and APCDEL2 for 2TX: TX/PRACH combinations
API d_apcdel1_bis;
API d_apcdel2_bis;
// New registers due to IOTA analog base band
API d_apcdel2;
API d_vbctrl2;
API d_bulgcal;
// Analog Based Band
API d_afcctladd;
API d_vbuctrl;
API d_vbdctrl;
API d_apcdel1;
API d_apcoff;
API d_bulioff;
API d_bulqoff;
API d_dai_onoff;
API d_auxdac;
#if (ANLG_FAM == 1)
API d_vbctrl;
#elif ((ANLG_FAM == 2) || (ANLG_FAM == 3))
API d_vbctrl1;
#endif
API d_bbctrl;
// Monitoring tasks control (MCU <- DSP)
// FB task
API d_fb_det; // FB detection result. (1 for FOUND).
API d_fb_mode; // Mode for FB detection algorithm.
API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR).
// SB Task
API a_sch26[5]; // Header + SB information, array of 5 words.
API d_audio_gain_ul;
API d_audio_gain_dl;
// Controller of the melody E2 audio compressor
API d_audio_compressor_ctrl;
// AUDIO module
API d_audio_init;
API d_audio_status;
// Audio tasks
// TONES (MCU -> DSP)
API d_toneskb_init;
API d_toneskb_status;
API d_k_x1_t0;
API d_k_x1_t1;
API d_k_x1_t2;
API d_pe_rep;
API d_pe_off;
API d_se_off;
API d_bu_off;
API d_t0_on;
API d_t0_off;
API d_t1_on;
API d_t1_off;
API d_t2_on;
API d_t2_off;
API d_k_x1_kt0;
API d_k_x1_kt1;
API d_dur_kb;
API d_shiftdl;
API d_shiftul;
API d_aec_ctrl;
API d_es_level_api;
API d_mu_api;
// Melody Ringer module
API d_melo_osc_used;
API d_melo_osc_active;
API a_melo_note0[4];
API a_melo_note1[4];
API a_melo_note2[4];
API a_melo_note3[4];
API a_melo_note4[4];
API a_melo_note5[4];
API a_melo_note6[4];
API a_melo_note7[4];
// selection of the melody format
API d_melody_selection;
// Holes due to the format melody E1
API a_melo_holes[3];
// Speech Recognition module
API d_sr_status; // status of the DSP speech reco task
API d_sr_param; // parameters for the DSP speech reco task: OOV threshold.
API d_sr_bit_exact_test; // bit exact test
API d_sr_nb_words; // number of words used in the speech recognition task
API d_sr_db_level; // estimate voice level in dB
API d_sr_db_noise; // estimate noise in dB
API d_sr_mod_size; // size of the model
API a_n_best_words[4]; // array of the 4 best words
API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length)
// Audio buffer
API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1.
API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1.
// V42bis module
API d_v42b_nego0;
API d_v42b_nego1;
API d_v42b_control;
API d_v42b_ratio_ind;
API d_mcu_control;
API d_mcu_control_sema;
// Background tasks
API d_background_enable;
API d_background_abort;
API d_background_state;
API d_max_background;
API a_background_tasks[16];
API a_back_task_io[16];
// GEA module defined in l1p_deft.h (the following section is overlaid with GPRS NDB memory)
API d_gea_mode_ovly;
API a_gea_kc_ovly[4];
API d_hole3_ndb[8];
// Encryption module
API d_a5mode; // Encryption Mode.
API d_sched_mode_gprs_ovly;
// 7 words are reserved for any possible mapping modification
API d_hole4_ndb[5];
// Ramp definition for Omega device
API a_ramp[16];
// CCCH/SACCH downlink information...(!!)
API a_cd[15]; // Header + CCCH/SACCH downlink information.
// FACCH downlink information........(!!)
API a_fd[15]; // Header + FACCH downlink information.
// Traffic downlink data frames......(!!)
API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0.
// CCCH/SACCH uplink information.....(!!)
API a_cu[15]; // Header + CCCH/SACCH uplink information.
// FACCH downlink information........(!!)
API a_fu[15]; // Header + FACCH uplink information
// Traffic downlink data frames......(!!)
API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0.
// Random access.....................(MCU -> DSP).
API d_rach; // RACH information.
//...................................(MCU -> DSP).
API a_kc[4]; // Encryption Key Code.
// Integrated Data Services module
API d_ra_conf;
API d_ra_act;
API d_ra_test;
API d_ra_statu;
API d_ra_statd;
API d_fax;
API a_data_buf_ul[21];
API a_data_buf_dl[37];
#if (L1_NEW_AEC)
// new AEC
API a_new_aec_holes[422];
API d_cont_filter;
API d_granularity_att;
API d_coef_smooth;
API d_es_level_max;
API d_fact_vad;
API d_thrs_abs;
API d_fact_asd_fil;
API d_fact_asd_mut;
API d_far_end_pow_h;
API d_far_end_pow_l;
API d_far_end_noise_h;
API d_far_end_noise_l;
#endif
// Speech recognition model
#if (L1_NEW_AEC)
API a_sr_holes[1165];
#else
API a_sr_holes[1599];
#endif // L1_NEW_AEC
API a_model[1041];
// EOTD buffer
#if (L1_EOTD==1)
API d_eotd_first;
API d_eotd_max;
API d_eotd_nrj_high;
API d_eotd_nrj_low;
API a_eotd_crosscor[18];
#else
API a_eotd_holes[22];
#endif
#if (MELODY_E2)
API a_melody_e2_holes0[27];
API d_melody_e2_osc_used;
API d_melody_e2_osc_active;
API d_melody_e2_semaphore;
API a_melody_e2_osc[16][3];
API d_melody_e2_globaltimefactor;
API a_melody_e2_instrument_ptr[8];
API a_melody_e2_holes1[708];
API a_dsp_trace[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_DSP_TRACE];
API a_melody_e2_instrument_wave[SC_AUDIO_MELODY_E2_MAX_SIZE_OF_INSTRUMENT];
#endif
}
T_NDB_MCU_DSP;
#elif ((DSP == 32) || (DSP == 31))
typedef struct
{
// Monitoring tasks control..........(MCU <- DSP)
API d_fb_det; // FB detection result. (1 for FOUND).
API d_fb_mode; // Mode for FB detection algorithm.
API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR).
// CCCH/SACCH downlink information...(!!)
API a_cd[15]; // Header + CCCH/SACCH downlink information.
// FACCH downlink information........(!!)
API a_fd[15]; // Header + FACCH downlink information.
// Traffic downlink data frames......(!!)
API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0.
API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1.
// CCCH/SACCH uplink information.....(!!)
API a_cu[15]; // Header + CCCH/SACCH uplink information.
#if (SPEECH_RECO)
// FACCH downlink information........(!!)
API a_fu[3]; // Header + FACCH uplink information
// The size of this buffer is 15 word but some speech reco words
// are overlayer with this buffer. This is the reason why the size is 3 instead of 15.
API d_sr_status; // status of the DSP speech reco task
API d_sr_param; // parameters for the DSP speech reco task: OOV threshold.
API sr_hole1; // hole
API d_sr_bit_exact_test; // bit exact test
API d_sr_nb_words; // number of words used in the speech recognition task
API d_sr_db_level; // estimate voice level in dB
API d_sr_db_noise; // estimate noise in dB
API d_sr_mod_size; // size of the model
API sr_holes_1[4]; // hole
#else
// FACCH downlink information........(!!)
API a_fu[15]; // Header + FACCH uplink information
#endif
// Traffic uplink data frames........(!!)
API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0.
API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1.
// Random access.....................(MCU -> DSP).
API d_rach; // RACH information.
//...................................(MCU -> DSP).
API d_a5mode; // Encryption Mode.
API a_kc[4]; // Encryption Key Code.
API d_tch_mode; // TCH mode register.
// bit [0..1] -> b_dai_mode.
// bit [2] -> b_dtx.
// OMEGA...........................(MCU -> DSP).
#if ((ANLG_FAM == 1) || (ANLG_FAM == 2))
API a_ramp[16];
#if (MELODY_E1)
API d_melo_osc_used;
API d_melo_osc_active;
API a_melo_note0[4];
API a_melo_note1[4];
API a_melo_note2[4];
API a_melo_note3[4];
API a_melo_note4[4];
API a_melo_note5[4];
API a_melo_note6[4];
API a_melo_note7[4];
#if (DSP==31)
// selection of the melody format
API d_melody_selection;
API holes[9];
#else // DSP==32
API d_dco_type; // Tide
API p_start_IQ;
API d_level_off;
API d_dco_dbg;
API d_tide_resa;
API d_asynch_margin; // Perseus Asynch Audio Workaround
API hole[4];
#endif // DSP 32
#else // NO MELODY E1
#if (DSP==31)
// selection of the melody format
API d_melody_selection;
API holes[43]; // 43 unused holes.
#else // DSP==32
API holes[34]; // 34 unused holes.
API d_dco_type; // Tide
API p_start_IQ;
API d_level_off;
API d_dco_dbg;
API d_tide_resa;
API d_asynch_margin; // Perseus Asynch Audio Workaround
API hole[4];
#endif //DSP == 32
#endif // NO MELODY E1
API d_debug3;
API d_debug2;
API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega
API d_afcctladd;
API d_vbuctrl;
API d_vbdctrl;
API d_apcdel1;
API d_aec_ctrl;
API d_apcoff;
API d_bulioff;
API d_bulqoff;
API d_dai_onoff;
API d_auxdac;
#if (ANLG_FAM == 1)
API d_vbctrl;
#elif (ANLG_FAM == 2)
API d_vbctrl1;
#endif
API d_bbctrl;
#else
#error DSPCODE not supported with given ANALOG
#endif //(ANALOG)1, 2
//...................................(MCU -> DSP).
API a_sch26[5]; // Header + SB information, array of 5 words.
// TONES.............................(MCU -> DSP)
API d_toneskb_init;
API d_toneskb_status;
API d_k_x1_t0;
API d_k_x1_t1;
API d_k_x1_t2;
API d_pe_rep;
API d_pe_off;
API d_se_off;
API d_bu_off;
API d_t0_on;
API d_t0_off;
API d_t1_on;
API d_t1_off;
API d_t2_on;
API d_t2_off;
API d_k_x1_kt0;
API d_k_x1_kt1;
API d_dur_kb;
// PLL...............................(MCU -> DSP).
API d_pll_clkmod1;
API d_pll_clkmod2;
// DSP status returned..........(DSP --> MCU).
API d_error_status;
// RIF control.......................(MCU -> DSP).
API d_spcx_rif;
API d_shiftdl;
API d_shiftul;
API p_saec_prog;
API p_aec_prog;
API p_spenh_prog;
API a_ovly[75];
API d_ra_conf;
API d_ra_act;
API d_ra_test;
API d_ra_statu;
API d_ra_statd;
API d_fax;
#if (SPEECH_RECO)
API a_data_buf_ul[3];
API a_n_best_words[4]; // array of the 4 best words
API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length)
API sr_holes_2[6];
API a_data_buf_dl[37];
API a_hole[24];
API d_sched_mode_gprs_ovly;
API fir_holes1[384];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
API d_audio_init;
API d_audio_status;
API a_model[1041]; // array of the speech reco model
#else
API a_data_buf_ul[21];
API a_data_buf_dl[37];
API a_hole[24];
API d_sched_mode_gprs_ovly;
API fir_holes1[384];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
API d_audio_init;
API d_audio_status;
#if (L1_EOTD ==1)
API a_eotd_hole[369];
API d_eotd_first;
API d_eotd_max;
API d_eotd_nrj_high;
API d_eotd_nrj_low;
API a_eotd_crosscor[18];
#endif
#endif
}
T_NDB_MCU_DSP;
#else // OTHER DSP CODE like 17
typedef struct
{
// Monitoring tasks control..........(MCU <- DSP)
API d_fb_det; // FB detection result. (1 for FOUND).
API d_fb_mode; // Mode for FB detection algorithm.
API a_sync_demod[4]; // FB/SB demod. result, (D_TOA,D_PM,D_ANGLE,D_SNR).
// CCCH/SACCH downlink information...(!!)
API a_cd[15]; // Header + CCCH/SACCH downlink information.
// FACCH downlink information........(!!)
API a_fd[15]; // Header + FACCH downlink information.
// Traffic downlink data frames......(!!)
#if (DATA14_4 == 0)
API a_dd_0[20]; // Header + DATA traffic downlink information, sub. chan. 0.
API a_dd_1[20]; // Header + DATA traffic downlink information, sub. chan. 1.
#endif
#if (DATA14_4 == 1)
API a_dd_0[22]; // Header + DATA traffic downlink information, sub. chan. 0.
API a_dd_1[22]; // Header + DATA traffic downlink information, sub. chan. 1.
#endif
// CCCH/SACCH uplink information.....(!!)
API a_cu[15]; // Header + CCCH/SACCH uplink information.
#if (SPEECH_RECO)
// FACCH downlink information........(!!)
API a_fu[3]; // Header + FACCH uplink information
// The size of this buffer is 15 word but some speech reco words
// are overlayer with this buffer. This is the reason why the size is 3 instead of 15.
API d_sr_status; // status of the DSP speech reco task
API d_sr_param; // parameters for the DSP speech reco task: OOV threshold.
API sr_hole1; // hole
API d_sr_bit_exact_test; // bit exact test
API d_sr_nb_words; // number of words used in the speech recognition task
API d_sr_db_level; // estimate voice level in dB
API d_sr_db_noise; // estimate noise in dB
API d_sr_mod_size; // size of the model
API sr_holes_1[4]; // hole
#else
// FACCH downlink information........(!!)
API a_fu[15]; // Header + FACCH uplink information
#endif
// Traffic uplink data frames........(!!)
#if (DATA14_4 == 0)
API a_du_0[20]; // Header + DATA traffic uplink information, sub. chan. 0.
API a_du_1[20]; // Header + DATA traffic uplink information, sub. chan. 1.
#endif
#if (DATA14_4 == 1)
API a_du_0[22]; // Header + DATA traffic uplink information, sub. chan. 0.
API a_du_1[22]; // Header + DATA traffic uplink information, sub. chan. 1.
#endif
// Random access.....................(MCU -> DSP).
API d_rach; // RACH information.
//...................................(MCU -> DSP).
API d_a5mode; // Encryption Mode.
API a_kc[4]; // Encryption Key Code.
API d_tch_mode; // TCH mode register.
// bit [0..1] -> b_dai_mode.
// bit [2] -> b_dtx.
// OMEGA...........................(MCU -> DSP).
#if ((ANLG_FAM == 1) || (ANLG_FAM == 2))
API a_ramp[16];
#if (MELODY_E1)
API d_melo_osc_used;
API d_melo_osc_active;
API a_melo_note0[4];
API a_melo_note1[4];
API a_melo_note2[4];
API a_melo_note3[4];
API a_melo_note4[4];
API a_melo_note5[4];
API a_melo_note6[4];
API a_melo_note7[4];
#if (DSP == 17)
// selection of the melody format
API d_dco_type; // Tide
API p_start_IQ;
API d_level_off;
API d_dco_dbg;
API d_tide_resa;
API d_asynch_margin; // Perseus Asynch Audio Workaround
API hole[4];
#else
API d_melody_selection;
API holes[9];
#endif
#else // NO MELODY E1
// selection of the melody format
#if (DSP == 17)
API holes[34]; // 34 unused holes.
API d_dco_type; // Tide
API p_start_IQ;
API d_level_off;
API d_dco_dbg;
API d_tide_resa;
API d_asynch_margin; // Perseus Asynch Audio Workaround
API hole[4]
#else
// selection of the melody format
API d_melody_selection;
API holes[43]; // 43 unused holes.
#endif
#endif
API d_debug3;
API d_debug2;
API d_debug1; // bit 0 at 1 enable dsp f_tx delay for Omega
API d_afcctladd;
API d_vbuctrl;
API d_vbdctrl;
API d_apcdel1;
API d_aec_ctrl;
API d_apcoff;
API d_bulioff;
API d_bulqoff;
API d_dai_onoff;
API d_auxdac;
#if (ANLG_FAM == 1)
API d_vbctrl;
#elif (ANLG_FAM == 2)
API d_vbctrl1;
#endif
API d_bbctrl;
#else
#error DSPCODE not supported with given ANALOG
#endif //(ANALOG)1, 2
//...................................(MCU -> DSP).
API a_sch26[5]; // Header + SB information, array of 5 words.
// TONES.............................(MCU -> DSP)
API d_toneskb_init;
API d_toneskb_status;
API d_k_x1_t0;
API d_k_x1_t1;
API d_k_x1_t2;
API d_pe_rep;
API d_pe_off;
API d_se_off;
API d_bu_off;
API d_t0_on;
API d_t0_off;
API d_t1_on;
API d_t1_off;
API d_t2_on;
API d_t2_off;
API d_k_x1_kt0;
API d_k_x1_kt1;
API d_dur_kb;
// PLL...............................(MCU -> DSP).
API d_pll_clkmod1;
API d_pll_clkmod2;
// DSP status returned..........(DSP --> MCU).
API d_error_status;
// RIF control.......................(MCU -> DSP).
API d_spcx_rif;
API d_shiftdl;
API d_shiftul;
#if (AEC == 1)
// AEC control.......................(MCU -> DSP).
#if (VOC == FR_EFR)
API p_aec_init;
API p_aec_prog;
API p_spenh_init;
API p_spenh_prog;
#endif
#if (VOC == FR_HR_EFR)
API p_saec_prog;
API p_aec_prog;
API p_spenh_prog;
#endif
#endif
API a_ovly[75];
API d_ra_conf;
API d_ra_act;
API d_ra_test;
API d_ra_statu;
API d_ra_statd;
API d_fax;
#if (SPEECH_RECO)
API a_data_buf_ul[3];
API a_n_best_words[4]; // array of the 4 best words
API a_n_best_score[8]; // array of the 4 best scores (each score is 32 bits length)
API sr_holes_2[6];
API a_data_buf_dl[37];
API fir_holes1[409];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
API d_audio_init;
API d_audio_status;
API a_model[1041]; // array of the speech reco model
#else
API a_data_buf_ul[21];
API a_data_buf_dl[37];
API fir_holes1[409];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
API d_audio_init;
API d_audio_status;
#endif
}
T_NDB_MCU_DSP;
#endif
#if (DSP == 34) || (DSP == 35) || (DSP == 36)
typedef struct
{
API_SIGNED d_transfer_rate;
// Common GSM/GPRS
// These words specified the latencies to applies on some peripherics
API_SIGNED d_lat_mcu_bridge;
API_SIGNED d_lat_mcu_hom2sam;
API_SIGNED d_lat_mcu_bef_fast_access;
API_SIGNED d_lat_dsp_after_sam;
// DSP Start address
API_SIGNED d_gprs_install_address;
API_SIGNED d_misc_config;
API_SIGNED d_cn_sw_workaround;
API_SIGNED d_hole2_param[4];
//...................................Frequency Burst.
API_SIGNED d_fb_margin_beg;
API_SIGNED d_fb_margin_end;
API_SIGNED d_nsubb_idle;
API_SIGNED d_nsubb_dedic;
API_SIGNED d_fb_thr_det_iacq;
API_SIGNED d_fb_thr_det_track;
//...................................Demodulation.
API_SIGNED d_dc_off_thres;
API_SIGNED d_dummy_thres;
API_SIGNED d_dem_pond_gewl;
API_SIGNED d_dem_pond_red;
//...................................TCH Full Speech.
API_SIGNED d_maccthresh1;
API_SIGNED d_mldt;
API_SIGNED d_maccthresh;
API_SIGNED d_gu;
API_SIGNED d_go;
API_SIGNED d_attmax;
API_SIGNED d_sm;
API_SIGNED d_b;
// V42Bis module
API_SIGNED d_v42b_switch_hyst;
API_SIGNED d_v42b_switch_min;
API_SIGNED d_v42b_switch_max;
API_SIGNED d_v42b_reset_delay;
//...................................TCH Half Speech.
API_SIGNED d_ldT_hr;
API_SIGNED d_maccthresh_hr;
API_SIGNED d_maccthresh1_hr;
API_SIGNED d_gu_hr;
API_SIGNED d_go_hr;
API_SIGNED d_b_hr;
API_SIGNED d_sm_hr;
API_SIGNED d_attmax_hr;
//...................................TCH Enhanced FR Speech.
API_SIGNED c_mldt_efr;
API_SIGNED c_maccthresh_efr;
API_SIGNED c_maccthresh1_efr;
API_SIGNED c_gu_efr;
API_SIGNED c_go_efr;
API_SIGNED c_b_efr;
API_SIGNED c_sm_efr;
API_SIGNED c_attmax_efr;
//...................................CHED
API_SIGNED d_sd_min_thr_tchfs;
API_SIGNED d_ma_min_thr_tchfs;
API_SIGNED d_md_max_thr_tchfs;
API_SIGNED d_md1_max_thr_tchfs;
API_SIGNED d_sd_min_thr_tchhs;
API_SIGNED d_ma_min_thr_tchhs;
API_SIGNED d_sd_av_thr_tchhs;
API_SIGNED d_md_max_thr_tchhs;
API_SIGNED d_md1_max_thr_tchhs;
API_SIGNED d_sd_min_thr_tchefs;
API_SIGNED d_ma_min_thr_tchefs;
API_SIGNED d_md_max_thr_tchefs;
API_SIGNED d_md1_max_thr_tchefs;
API_SIGNED d_wed_fil_ini;
API_SIGNED d_wed_fil_tc;
API_SIGNED d_x_min;
API_SIGNED d_x_max;
API_SIGNED d_slope;
API_SIGNED d_y_min;
API_SIGNED d_y_max;
API_SIGNED d_wed_diff_threshold;
API_SIGNED d_mabfi_min_thr_tchhs;
// FACCH module
API_SIGNED d_facch_thr;
// IDS module
API_SIGNED d_max_ovsp_ul;
API_SIGNED d_sync_thres;
API_SIGNED d_idle_thres;
API_SIGNED d_m1_thres;
API_SIGNED d_max_ovsp_dl;
API_SIGNED d_gsm_bgd_mgt;
// FIR coefficients
API a_fir_holes[4];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
}
T_PARAM_MCU_DSP;
#elif (DSP == 33)
typedef struct
{
API_SIGNED d_transfer_rate;
// Common GSM/GPRS
// These words specified the latencies to applies on some peripherics
API_SIGNED d_lat_mcu_bridge;
API_SIGNED d_lat_mcu_hom2sam;
API_SIGNED d_lat_mcu_bef_fast_access;
API_SIGNED d_lat_dsp_after_sam;
// DSP Start address
API_SIGNED d_gprs_install_address;
API_SIGNED d_misc_config;
API_SIGNED d_cn_sw_workaround;
#if DCO_ALGO
API_SIGNED d_cn_dco_param;
API_SIGNED d_hole2_param[3];
#else
API_SIGNED d_hole2_param[4];
#endif
//...................................Frequency Burst.
API_SIGNED d_fb_margin_beg;
API_SIGNED d_fb_margin_end;
API_SIGNED d_nsubb_idle;
API_SIGNED d_nsubb_dedic;
API_SIGNED d_fb_thr_det_iacq;
API_SIGNED d_fb_thr_det_track;
//...................................Demodulation.
API_SIGNED d_dc_off_thres;
API_SIGNED d_dummy_thres;
API_SIGNED d_dem_pond_gewl;
API_SIGNED d_dem_pond_red;
//...................................TCH Full Speech.
API_SIGNED d_maccthresh1;
API_SIGNED d_mldt;
API_SIGNED d_maccthresh;
API_SIGNED d_gu;
API_SIGNED d_go;
API_SIGNED d_attmax;
API_SIGNED d_sm;
API_SIGNED d_b;
// V42Bis module
API_SIGNED d_v42b_switch_hyst;
API_SIGNED d_v42b_switch_min;
API_SIGNED d_v42b_switch_max;
API_SIGNED d_v42b_reset_delay;
//...................................TCH Half Speech.
API_SIGNED d_ldT_hr;
API_SIGNED d_maccthresh_hr;
API_SIGNED d_maccthresh1_hr;
API_SIGNED d_gu_hr;
API_SIGNED d_go_hr;
API_SIGNED d_b_hr;
API_SIGNED d_sm_hr;
API_SIGNED d_attmax_hr;
//...................................TCH Enhanced FR Speech.
API_SIGNED c_mldt_efr;
API_SIGNED c_maccthresh_efr;
API_SIGNED c_maccthresh1_efr;
API_SIGNED c_gu_efr;
API_SIGNED c_go_efr;
API_SIGNED c_b_efr;
API_SIGNED c_sm_efr;
API_SIGNED c_attmax_efr;
//...................................CHED
API_SIGNED d_sd_min_thr_tchfs;
API_SIGNED d_ma_min_thr_tchfs;
API_SIGNED d_md_max_thr_tchfs;
API_SIGNED d_md1_max_thr_tchfs;
API_SIGNED d_sd_min_thr_tchhs;
API_SIGNED d_ma_min_thr_tchhs;
API_SIGNED d_sd_av_thr_tchhs;
API_SIGNED d_md_max_thr_tchhs;
API_SIGNED d_md1_max_thr_tchhs;
API_SIGNED d_sd_min_thr_tchefs;
API_SIGNED d_ma_min_thr_tchefs;
API_SIGNED d_md_max_thr_tchefs;
API_SIGNED d_md1_max_thr_tchefs;
API_SIGNED d_wed_fil_ini;
API_SIGNED d_wed_fil_tc;
API_SIGNED d_x_min;
API_SIGNED d_x_max;
API_SIGNED d_slope;
API_SIGNED d_y_min;
API_SIGNED d_y_max;
API_SIGNED d_wed_diff_threshold;
API_SIGNED d_mabfi_min_thr_tchhs;
// FACCH module
API_SIGNED d_facch_thr;
// IDS module
API_SIGNED d_max_ovsp_ul;
API_SIGNED d_sync_thres;
API_SIGNED d_idle_thres;
API_SIGNED d_m1_thres;
API_SIGNED d_max_ovsp_dl;
API_SIGNED d_gsm_bgd_mgt;
// FIR coefficients
API a_fir_holes[4];
API a_fir31_uplink[31];
API a_fir31_downlink[31];
}
T_PARAM_MCU_DSP;
#else
typedef struct
{
//...................................Frequency Burst.
API_SIGNED d_nsubb_idle;
API_SIGNED d_nsubb_dedic;
API_SIGNED d_fb_thr_det_iacq;
API_SIGNED d_fb_thr_det_track;
//...................................Demodulation.
API_SIGNED d_dc_off_thres;
API_SIGNED d_dummy_thres;
API_SIGNED d_dem_pond_gewl;
API_SIGNED d_dem_pond_red;
API_SIGNED hole[1];
API_SIGNED d_transfer_rate;
//...................................TCH Full Speech.
API_SIGNED d_maccthresh1;
API_SIGNED d_mldt;
API_SIGNED d_maccthresh;
API_SIGNED d_gu;
API_SIGNED d_go;
API_SIGNED d_attmax;
API_SIGNED d_sm;
API_SIGNED d_b;
#if (VOC == FR_HR) || (VOC == FR_HR_EFR)
//...................................TCH Half Speech.
API_SIGNED d_ldT_hr;
API_SIGNED d_maccthresh_hr;
API_SIGNED d_maccthresh1_hr;
API_SIGNED d_gu_hr;
API_SIGNED d_go_hr;
API_SIGNED d_b_hr;
API_SIGNED d_sm_hr;
API_SIGNED d_attmax_hr;
#endif
#if (VOC == FR_EFR) || (VOC == FR_HR_EFR)
//...................................TCH Enhanced FR Speech.
API_SIGNED c_mldt_efr;
API_SIGNED c_maccthresh_efr;
API_SIGNED c_maccthresh1_efr;
API_SIGNED c_gu_efr;
API_SIGNED c_go_efr;
API_SIGNED c_b_efr;
API_SIGNED c_sm_efr;
API_SIGNED c_attmax_efr;
#endif
//...................................TCH Full Speech.
API_SIGNED d_sd_min_thr_tchfs;
API_SIGNED d_ma_min_thr_tchfs;
API_SIGNED d_md_max_thr_tchfs;
API_SIGNED d_md1_max_thr_tchfs;
#if (VOC == FR) || (VOC == FR_HR) || (VOC == FR_HR_EFR)
//...................................TCH Half Speech.
API_SIGNED d_sd_min_thr_tchhs;
API_SIGNED d_ma_min_thr_tchhs;
API_SIGNED d_sd_av_thr_tchhs;
API_SIGNED d_md_max_thr_tchhs;
API_SIGNED d_md1_max_thr_tchhs;
#endif
#if (VOC == FR_EFR) || (VOC == FR_HR_EFR)
//...................................TCH Enhanced FR Speech.
API_SIGNED d_sd_min_thr_tchefs; //(24L *C_POND_RED)
API_SIGNED d_ma_min_thr_tchefs; //(1200L *C_POND_RED)
API_SIGNED d_md_max_thr_tchefs; //(2000L *C_POND_RED)
API_SIGNED d_md1_max_thr_tchefs; //(160L *C_POND_RED)
API_SIGNED d_hole1;
#endif
API_SIGNED d_wed_fil_ini;
API_SIGNED d_wed_fil_tc;
API_SIGNED d_x_min;
API_SIGNED d_x_max;
API_SIGNED d_slope;
API_SIGNED d_y_min;
API_SIGNED d_y_max;
API_SIGNED d_wed_diff_threshold;
API_SIGNED d_mabfi_min_thr_tchhs;
API_SIGNED d_facch_thr;
API_SIGNED d_dsp_test;
#if (DATA14_4 == 0 ) || (VOC == FR_HR_EFR)
API_SIGNED d_patch_addr1;
API_SIGNED d_patch_data1;
API_SIGNED d_patch_addr2;
API_SIGNED d_patch_data2;
API_SIGNED d_patch_addr3;
API_SIGNED d_patch_data3;
API_SIGNED d_patch_addr4;
API_SIGNED d_patch_data4;
#endif
//...................................
API_SIGNED d_version_number; // DSP patch version
API_SIGNED d_ti_version; // customer number. No more used since 1.5
API_SIGNED d_dsp_page;
#if IDS
API_SIGNED d_max_ovsp_ul;
API_SIGNED d_sync_thres;
API_SIGNED d_idle_thres;
API_SIGNED d_m1_thres;
API_SIGNED d_max_ovsp_dl;
#endif
}
T_PARAM_MCU_DSP;
#endif
#if (DSP_DEBUG_TRACE_ENABLE == 1)
typedef struct
{
API d_debug_ptr_begin;
API d_debug_ptr_end;
}
T_DB2_DSP_TO_MCU;
#endif
/* DSP error as per ndb->d_error_status */
enum dsp_error {
DSP_ERR_RHEA = 0x0001,
DSP_ERR_IQ_SAMPLES = 0x0004,
DSP_ERR_DMA_PROG = 0x0008,
DSP_ERR_DMA_TASK = 0x0010,
DSP_ERR_DMA_PEND = 0x0020,
DSP_ERR_VM = 0x0080,
DSP_ERR_DMA_UL_TASK = 0x0100,
DSP_ERR_DMA_UL_PROG = 0x0200,
DSP_ERR_DMA_UL_PEND = 0x0400,
DSP_ERR_STACK_OV = 0x0800,
};
/* How an ABB register + value is expressed in the API RAM */
#define ABB_VAL(reg, val) ( (((reg) & 0x1F) << 1) | (((val) & 0x3FF) << 6) )
/* How an ABB register + value | TRUE is expressed in the API RAM */
#define ABB_VAL_T(reg, val) (ABB_VAL(reg, val) | 1)
#endif /* _CAL_DSP_API_H */