📄 srvchn.c
字号:
OIF_I2S_SPDIF_REG_0.mux_1_field.framelength = 2; break; default: OIF_I2S_SPDIF_REG_0.mux_1_field.framelength = 0; break; } //OIF_I2S_SPDIF_REG_0.mux_1_field.sclk_level = 0; // OIF_I2S_SPDIF_REG_0.mux_1_field.sclk_level = CNF_I2S_SCLK_LEVEL; // //OIF_I2S_SPDIF_REG_0.mux_1_field.wclk_level = 1; // OIF_I2S_SPDIF_REG_0.mux_1_field.wclk_level = CNF_I2S_WCLK_LEVEL; // OIF_I2S_SPDIF_REG_0.mux_1_field.c2flags_level = 0; // OIF_I2S_SPDIF_REG_0.mux_1_field.sdata_level = 0; // //OIF_I2S_SPDIF_REG_1.mux_1_field.i2s_data_out_format = 1; // msb first OIF_I2S_SPDIF_REG_1.mux_1_field.i2s_data_out_format = CNF_I2S_OUTPUT_FORMAT; // SPDIF OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; OIF_SPDIF_CONTROL.field.spdif_data_mode = 1; OIF_SPDIF_CONTROL.field.spdif_efm_mode = 1; // Enable Audio DAC OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 1; OIF_I2S_SPDIF_REG_2.mux_1_field.parallel_mode = 1; OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 1; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; // Mute on Sector Boundary OIF_SP_CTRL.field.mute_boundary_mode = 1;// Mute On Sector Boundary [MM] 05/09/06 OIF_AP_MUTE_CTRL.all |= MUTE_I2S_OFF | MUTE_I2S_FORCE | MUTE_SPDIF_OFF | MUTE_SPDIF_FORCE; oif_mute_control.audio_on = 0; //Release OIF from S/W Reset OIF_SOFT_RST.all = 0x00; //TP_OFF(); // Restore CIF CONF Original Configuration if(!cif_conf.field.src) { while (CIF_CONF.field.wr_fifo_cnt); // wait for fifo to be empty CIF_CONF.field.wr_fifo_rst = 1; CIF_CONF.field.wr_burst_len = 2; while (CIF_CONF.field.src) CIF_CONF.field.src = 0; } //End of OIF Reconfiguration //OIF_AP_MUTE_CTRL.all |= MUTE_I2S_OFF | MUTE_I2S_FORCE | MUTE_SPDIF_OFF | MUTE_SPDIF_FORCE; //oif_mute_control.audio_on = 0; OSAL_isr_install(OSAL_ISR_OIF, 0x0f, oif_isr_irq); ENABLE_INTERRUPTS();}#endif // APM_PICKUP#if (HAVE_CD_MECHA == 1)/******************************************************************************//* Function: clv_init *//* *//*! \brief Initialization of clv buffer register * \param void * \return void * \remark *//******************************************************************************/void clv_init(void){ CLV_CTRL.field.ovfl_mode = 0x01;#ifdef ECC_WORKAROUND CLV_CTRL.field.it_unflo_en = 0x01; OSAL_isr_install(OSAL_ISR_CLV, 0x0f, clv_isr_irq);#endif}/******************************************************************************//* Function: clear_ecc_error_cntr *//* *//*! \brief Initialization of BER measurement variables * \param void * \return void * \remark *//******************************************************************************/void clear_ecc_error_cntr(void){#ifdef APM_PICKUP servo_acq_flags.field.ecc_cntr_ready = 0;#endif}#endif // HAVE_CD_MECHA/******************************************************************************//* Function: audio_off *//* *//*! \brief Switch off output interface * \param void * \return void * \remark *//******************************************************************************/#ifdef APM_PICKUPvoid audio_off(void){ if (0 == oif_mode.audio_init) { if (OIF_FADE_AUDIO_MODE && OIF_AUDIO_MODE) { OIF_AP_CONTROL_PART_2.field.target_data_shift = 0; OIF_AP_MUTE_CTRL.all |= MUTE_I2S_AUTO | MUTE_SPDIF_AUTO; } else { OIF_AP_MUTE_CTRL.all |= MUTE_SPDIF_FORCE | MUTE_I2S_FORCE; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 1; OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 1; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; } } oif_mute_control.mute_request = 1; oif_mute_control.mute_start = 1; oif_mute_control.audio_on = 0;}/******************************************************************************//* Function: audio_on *//* *//*! \brief Switch on output interface * \param void * \return void * \remark *//******************************************************************************/void audio_on(void){ if (0 == oif_mode.audio_init) { if (OIF_AUDIO_MODE) { if (OIF_FADE_AUDIO_MODE) { if (oif_mode.attenuation_on) { OIF_AP_CONTROL_PART_2.field.target_data_shift = 0x16; } else { OIF_AP_CONTROL_PART_2.field.target_data_shift = 0x18; } } else { if (oif_mode.attenuation_on) { OIF_AP_CONTROL_PART_1.field.current_data_shift = 0x16; } else { OIF_AP_CONTROL_PART_1.field.current_data_shift = 0x18; } } } if (oif_mode.spdif || oif_mode.i2s) { uint8 mute; mute = OIF_AP_MUTE_CTRL.all; if (oif_mode.spdif) { mute &= (uint8)~MUTE_SPDIF_FORCE; } if (oif_mode.i2s) { mute &= (uint8)~MUTE_I2S_FORCE; } OIF_AP_MUTE_CTRL.all = mute; } if (oif_mode.analog) { OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 1; OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 0; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; } } oif_mute_control.mute_request = 0; oif_mute_control.mute_start = 0; oif_mute_control.audio_on = 1;}#else // APM_PICKUP#if 1 //#if (DEBUG_INCLUDE_PCDEB==1) // [RB] commented out, used only by pcintfvoid audio_off(void){ //[MM]:FIX_4_USB_STOP // Stop SRC in mute case. if(CIF_CONF.field.src) { // Compressed Audio Case. src_stop(); } OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 1; #if 0 if (CDinfo & HAVE_DATA_TRACK) // [FB] brute-force differentiation for CDDA and CDROM -- should be done in the Controller! { OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 0; //[OK] !!! 1 } else { OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 1; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; /* turn off all */ OIF_AP_MUTE_CTRL.all = MUTE_I2S_OFF | MUTE_I2S_FORCE | MUTE_SPDIF_OFF | MUTE_SPDIF_FORCE; } #endif OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 1; //[OK] !!! 1 OIF_AP_MUTE_CTRL.all = MUTE_I2S_OFF | MUTE_I2S_FORCE | MUTE_SPDIF_OFF | MUTE_SPDIF_FORCE; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; oif_mute_control.audio_on = 0; oif_mute_control.mute_request = 1; oif_mute_control.mute_start = 1;}#endif // if 0void audio_on(void){ //[MM]:FIX_4_USB_STOP // Stop SRC in mute case. if(CIF_CONF.field.src) { // Compressed Audio Case. // The following varuiable is used to avoid // to execute 2 times the src_restart() procedure in the // AudioBufferSetFull() procedure. src_restart_done = 1; src_restart(); } OIF_AP_CONTROL_PART_2.field.target_data_shift = 0x18; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 1; OIF_I2S_SPDIF_REG_2.mux_1_field.ad_mute = 0; OIF_SPDIF_CONTROL.field.i2s_spdif_mux = 0; if (I2S_OUTPUT == CNF_AUDIO_OUTPUT) { OIF_AP_MUTE_CTRL.all &= (uint8)~MUTE_I2S_FORCE; } if(SPDIF_OUTPUT == CNF_AUDIO_OUTPUT) { OIF_AP_MUTE_CTRL.all &= (uint8)~MUTE_SPDIF_FORCE; } oif_mute_control.audio_on = 1; oif_mute_control.mute_request = 0; oif_mute_control.mute_start = 0;}#endif // (APM_PICKUP)/******************************************************************************//* Function: mute_on *//* *//*! \brief Set flag and call audio_on * \param void * \return void * \remark *//******************************************************************************/#pragma push#pragma armvoid mute_on(void){ int32 mode; __asm{ MRS mode , CPSR; } mode &= 0x1F;// Store the Mode // If mute_on() is executed in FIQ mode // don't call ENABLE_INTERRUPTS() and DISABLE_INTERRUPTS() if(mode != 0x11) { DISABLE_INTERRUPTS(); if (oif_mute_control.audio_on) { audio_off(); } ENABLE_INTERRUPTS(); } else { //FIQ Mode: Don't disable interrupt // Because SWI function is called if (oif_mute_control.audio_on) { audio_off(); } }}/******************************************************************************//* Function: mute_off *//* *//*! \brief Set flag and call audio_off * \param void * \return void * \remark *//******************************************************************************/void mute_off(void){ int32 mode; __asm{ MRS mode , CPSR; } mode &= 0x1F; // If mute_on() is executed in FIQ mode // don't call ENABLE_INTERRUPTS() and DISABLE_INTERRUPTS() if(mode != 0x11) { DISABLE_INTERRUPTS(); if (!oif_mute_control.audio_on) { audio_on(); } ENABLE_INTERRUPTS(); } else { if (!oif_mute_control.audio_on) { audio_on(); } } //oif_mute_control.mute2_on = 0; //if (!oif_mute_control.audio_on && !oif_mute_control.mute1_on) }#pragma pop#if (HAVE_CD_MECHA == 1)/******************************************************************************//* Function: check_access_msf *//* *//*! \brief * \param void * \return uint8 OK * JUMP_REQUEST * \remark Called in access_check() *//******************************************************************************/RETVAL check_access_msf(void){ RETVAL check_access_msf_result; if (servo_seek_flags.field.seek_mode == JUMP_TARGET_2) { if ((servo_acq_flags.field.new_T) && (T_actual)) { check_access_msf_result = OK; } else { check_access_msf_result = JUMP_REQUEST; } } else if ((servo_seek_flags.field.seek_mode == SEEK_TARGET) || (servo_seek_flags.field.from_leadin_to_target)) // ( (servo_seek_flags.field.seek_mode == SEEK_TARGET) || // ((servo_seek_flags.field.seek_mode == JUMP_TARGET_1) && (servo_seek_flags.field.from_leadin_to_target)) || // ((servo_seek_flags.field.seek_mode == JUMP_TARGET_PLUS_TRACKS) && (servo_seek_flags.field.from_leadin_to_target))) { if ((servo_acq_flags.field.new_T) && (T_actual)) { if (T_actual < target_T) { if ((target_T - T_actual) <= (uint32) T_ths) { check_access_msf_result = OK; } else // ((target_T - T_actual) > (uint32)T_ths) { check_access_msf_result = JUMP_REQUEST; } } else // (T_actual >= target_T) {#ifdef NO_SEEK_ERROR_WITH_BIGGER_TIME /* BB050921b */ if (corrective_jumps_counter < (SEEK_PRO_MAX_CORRECTIVE_JUMPS / 2)) { check_access_msf_result = OK; } else#endif { check_access_msf_result = JUMP_REQUEST; } } } else // (!((servo_acq_flags.field.new_T) && (T_actual))) { check_access_msf_result = JUMP_REQUEST; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -