⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srvchn.c

📁 本程序为ST公司开发的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
  	 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 + -