- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
ExtCodec.c
资源名称:SDK_M5661.rar [点击查看]
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:17k
源码类别:
压缩解压
开发平台:
C++ Builder
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: Codec.c
- content: Audio Codec Functions
- History: Created by David Chiu 2004/4/29
- ==========================================================================*/
- #define _EXT_CODEC_H_
- #include <DP8051XP.H>
- #include "TypeDef.h"
- #include "Const.h"
- #include "Reg5661.h"
- #include "Common.h"
- #include "Idma.h"
- #include "ExtCodec.h"
- #if(!EXT_ADC | !EXT_DAC | EXT_PA)
- #include "IntCodec.h"
- #endif
- #if(EXT_ADC | EXT_DAC | EXT_PA)
- void CdcWriteCmd(BYTE bAddr, BYTE bData) large;
- #if(CDC_WM_8731)
- #define CDC_DEVICE_ADDRESS 0x34 //Wolfson WM8731
- #define WM_L_LINE_IN 0x00 //WM8731 Register address
- #define WM_LR_LINE_IN 0x01
- #define WM_R_LINE_IN 0x02
- #define WM_RL_LINE_IN 0x03
- #define WM_L_PHONE_OUT 0x04
- #define WM_LR_PHONE_OUT 0x05
- #define WM_R_PHONE_OUT 0x06
- #define WM_RL_PHONE_OUT 0x07
- #define WM_ANG_CTRL 0x08
- #define WM_DIG_CTRL 0x0A
- #define WM_PW_CTRL 0x0C
- #define WM_DIG_FORMAT 0x0E
- #define WM_SAMPLE_CTRL 0x10
- #define WM_ACTIVE_CTRL 0x12
- #define WM_RESET_REG 0x1E
- #endif
- #if(CDC_WM_8750)
- #define CDC_DEVICE_ADDRESS 0x34 //Wolfson WM8750
- #define WM_L_LINE_IN 0x00 //WM8750 Register address
- #define WM_LR_LINE_IN 0x01
- #define WM_R_LINE_IN 0x02
- #define WM_RL_LINE_IN 0x03
- #define WM_L_PHONE_OUT 0x04
- #define WM_LR_PHONE_OUT 0x05
- #define WM_R_PHONE_OUT 0x06
- #define WM_RL_PHONE_OUT 0x07
- #define WM_AD_DA_CTRL 0x0A
- #define WM_AUD_IF 0x0E
- #define WM_SAMPLE_RATE 0x10
- #define WM_L_DAC_VOL 0x14
- #define WM_LR_DAC_VOL 0x15
- #define WM_R_DAC_VOL 0x16
- #define WM_RL_DAC_VOL 0x17
- #define WM_BASS_CTRL 0x18
- #define WM_TREBLE_CTRL 0x1A
- #define WM_RESET_REG 0x1E
- #define WM_3D_CTRL 0x20
- #define WM_NOISE_GAIN 0x28
- #define WM_L_ADC_VOL 0x2A
- #define WM_LR_ADC_VOL 0x2B
- #define WM_R_ADC_VOL 0x2C
- #define WM_RL_ADC_VOL 0x2D
- #define WM_PW1_0 0x32
- #define WM_PW1_1 0x33
- #define WM_PW2_0 0x34
- #define WM_PW2_1 0x35
- #define WM_ADC_MODE_LINE1 0x3E
- #define WM_ADC_MODE_LINE2 0x3F
- #define WM_ADCL_PATH 0x40
- #define WM_ADCR_PATH 0x42
- #define WM_L_OUT_MIX1_0 0x44
- #define WM_L_OUT_MIX1_1 0x45
- #define WM_L_OUT_MIX2_0 0x46
- #define WM_L_OUT_MIX2_1 0x47
- #define WM_R_OUT_MIX1_0 0x48
- #define WM_R_OUT_MIX1_1 0x49
- #define WM_R_OUT_MIX2_0 0x4A
- #define WM_R_OUT_MIX2_1 0x4B
- #define WM_R_MONO_MIX1_0 0x4C
- #define WM_R_MONO_MIX1_1 0x4D
- #define WM_R_MONO_MIX2_0 0x4E
- #define WM_R_MONO_MIX2_1 0x4F
- #endif
- #endif
- #if((EXT_ADC | EXT_DAC | EXT_PA) & !_PM_INIT_)
- //#if(!( CDC_FOR_M5638C & _PM_DVR_ & SETTING_FOR_ICE_START)) //vicky050521#1 //CV0602
- API void ExtCdcCtrl(BYTE bCommand)
- {
- switch(bCommand)
- {
- case CDC_VOL_UP:
- case CDC_VOL_DOWN:
- #if(CDC_WM_8731|CDC_WM_8750)
- CdcWriteCmd(WM_LR_PHONE_OUT,(gxbVolume*2+47));
- //CdcWriteCmd(WM_L_PHONE_OUT,(gxbVolume*2+47)|0x80);
- CdcWriteCmd(WM_RL_PHONE_OUT,(gxbVolume*2+47));
- #endif
- break;
- case CDC_PLAYBACK_PAUSE:
- obI2S2CTRL1REG &= 0x7f; //Dis I2S IRQ
- break;
- case CDC_RETURN_PLAYBACK:
- obI2S2CTRL1REG |= 0x80; //En I2S IRQ
- break;
- case CDC_INIT:
- MCU_ACCESS_CODEC_I2S_EN();
- //obMODSEL1 |= 0x12; //Enable SD,MS ,known issue //Vicky050411#1
- obMODSEL2 |= 0x08; //Enable I2CM, I2S2,
- obCLKI2CMCTRL=0xD0; //I2CM clock, 12MHz
- obREADYENL |= 0x80; //IOBUF
- obREADYENH |= 0x08; //I2C/I2S Ready
- obSYSSOFTRSTCTRL2|=0x04; //I2CM Normal
- obI2CCLKDIV =7; //I2C BCLK 375KHz
- obSYSSOFTRSTCTRL2&=0xfd; //I2S2 Reset
- obSYSSOFTRSTCTRL2|=0x02; //I2S2 Normal
- obDP8051SET|=0x48; //I2S2 to GPIOA, Reference clock output enable
- obCLKI2S2CTRL=0xB8; //I2S2 clock, AUD (73/67) MHz //Renshuo050310#X
- obCLKI2S2DIVF = 0x02; //default div by 4
- MCU_ACCESS_CODEC_I2S_DIS();
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_RESET_REG,0x00); //reset registers
- #endif
- #if(CDC_WM_8731) //reset registers // Jeff_061016
- CdcWriteCmd(WM_RESET_REG,0x00);
- #endif
- #if(!EXT_ADC)
- IntCdcCtrl(CDC_INIT);
- #endif
- gfCdcAlreadyInit = TRUE; //Renshuo041203#A
- break;
- case CDC_PLAY_START:
- if(!gfCdcAlreadyInit) //2004.11.12 Renshuo
- {
- ExtCdcCtrl(CDC_INIT); //tne 2006/12/26 #1
- //gfCdcAlreadyInit = TRUE; //Renshuo041203#A
- }
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_PW1_0,0xC0); //Power up VMID[50Kohm] and VREF
- CdcWriteCmd(WM_PW2_1,0x80); //Powerup DACL & DACR
- CdcWriteCmd(WM_PW2_1,0xE0); //Powerup Output Buffer L1 & R1(DACL & DACR still up)
- CdcWriteCmd(WM_AD_DA_CTRL,0x00);//dis DAV mute
- CdcWriteCmd(WM_AUD_IF,0x11); //16 bits, MSB Left justified
- CdcWriteCmd(WM_LR_DAC_VOL,0xff); //DAC vol 0dB
- CdcWriteCmd(WM_L_OUT_MIX1_1,0x50);//LD2LO enable
- CdcWriteCmd(WM_R_OUT_MIX2_1,0x50);//RD2RO enable
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)
- CdcWriteCmd(WM_L_LINE_IN,0x97); // Jeff_061016
- CdcWriteCmd(WM_R_LINE_IN,0x97);
- CdcWriteCmd(WM_L_PHONE_OUT,0x70);
- CdcWriteCmd(WM_R_PHONE_OUT,0x70); // Jeff_061016
- //CdcWriteCmd(WM_L_LINE_IN,0x97);
- //CdcWriteCmd(WM_R_LINE_IN,0x97);
- //CdcWriteCmd(WM_L_PHONE_OUT,0x70);
- //CdcWriteCmd(WM_R_PHONE_OUT,0x70);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x00);
- CdcWriteCmd(WM_ANG_CTRL,0x12);
- CdcWriteCmd(WM_DIG_CTRL,0x00);
- CdcWriteCmd(WM_DIG_FORMAT,0x11);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_PW_CTRL,0x67);
- #endif // Jeff_061016 end
- CdcSetSampleRate();
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL3REG=0x08; //Audio data mode, PIO data
- obI2S2FIFOCTL=0x88; //Clear buffer
- obI2S2FIFOCTL=0x00;
- obI2S2CTRL1REG=0x97; //INT EN, WCLK EN, SDATA_OUT EN, 2 Channel, BCLK EN
- MCU_ACCESS_CODEC_I2S_DIS();
- CdcCtrl(CDC_VOL_DOWN); //set volume
- //#endif // Jeff_061016
- break;
- #if(!_PM_PLAY_) //add by tne 2005/01/29 #1
- case CDC_REC_START:
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_PW1_0,0xfc);
- CdcWriteCmd(WM_PW2_0,0x60);
- //CdcWriteCmd(WM_PW1_0,0xfE);
- //CdcWriteCmd(WM_PW2_0,0xff);
- CdcWriteCmd(WM_AUD_IF,0x11); //16 bits, MSB Left justified
- CdcSetSampleRate();
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL1REG=0x1B; //WCLK EN, SDATA_IN EN, 2 Channel, BCLK EN
- obI2S2CTRL3REG=0x08; //Audio data mode, PIO data
- obI2S2FIFOCTL=0x80; //Clear buffer
- obI2S2FIFOCTL=0x00;
- MCU_ACCESS_CODEC_I2S_DIS();
- CdcWriteCmd(WM_LR_LINE_IN,0x17);//Analogue vol 0dB //Renshuo050322#A
- CdcWriteCmd(WM_RL_LINE_IN,0x17);//Analogue vol 0dB
- CdcWriteCmd(WM_LR_ADC_VOL,0xc3);
- CdcWriteCmd(WM_RL_ADC_VOL,0xc3);
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)
- /* CdcWriteCmd(WM_ANG_CTRL,0xE5);
- CdcWriteCmd(WM_DIG_CTRL,0x09);
- CdcWriteCmd(WM_PW_CTRL,0x69);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_DIG_FORMAT,0x11); //16 bits, MSB Left justified*/
- CdcSetSampleRate();
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL1REG=0x1B; //WCLK EN, SDATA_IN EN, 2 Channel, BCLK EN
- obI2S2CTRL3REG=0x08; //Audio data mode, PIO data
- obI2S2FIFOCTL=0x80; //Clear buffer
- obI2S2FIFOCTL=0x00;
- MCU_ACCESS_CODEC_I2S_DIS();
- #endif // Jeff_061016 end
- #if(!EXT_ADC)
- IntCdcCtrl(CDC_REC_START);
- #endif
- //#endif // Jeff_061016
- break;
- case CDC_FM_START:
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_PW1_0,0xf0);
- CdcWriteCmd(WM_PW2_0,0x60);
- CdcCtrl(CDC_VOL_DOWN); //set volume
- CdcWriteCmd(WM_L_OUT_MIX1_0,0xa1);//LINPUT2 to Lout
- CdcWriteCmd(WM_R_OUT_MIX1_0,0xa1);//RINPUT2 to Rout
- #endif
- #if(CDC_WM_8731) // Jeff_061016 start
- obDCVARRD=0x14; //DCV power
- obDCVWRDATA=0x98; //44.1K domain, Audio clock=67.7143M //D1003#9
- // For S-Case FM noise issue
- MCU_ACCESS_CODEC_I2S_EN();
- obCLKI2S2CTRL=0xB8; //I2S2 clock, AUD (73/67) MHz //Renshuo050310#X
- obCLKI2S2DIVF = 0x02; //default div by 4
- MCU_ACCESS_CODEC_I2S_DIS();
- CdcWriteCmd(WM_L_LINE_IN,0x1E);
- CdcWriteCmd(WM_R_LINE_IN,0x1E);
- CdcWriteCmd(WM_ANG_CTRL,0x0A);
- CdcWriteCmd(WM_PW_CTRL,0x6E);
- CdcWriteCmd(WM_DIG_CTRL,0x09);
- #endif // Jeff_061016 end
- #if(!EXT_ADC) //Renshuo050322#A
- IntCdcCtrl(CDC_FM_START);
- ClkCdcEn();
- obALGPAREG = 0x80;
- ClkCdcDis();
- #endif
- break;
- case CDC_FM_IN_AUD_OUT:
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_ADCL_PATH,0x40); //LINPUT2 to ADC, boost off //Renshuo050322#A
- CdcWriteCmd(WM_ADCR_PATH,0x40); //RINPUT2 to ADC, boost off
- CdcWriteCmd(WM_LR_LINE_IN,0x17);//Analogue vol 0dB
- CdcWriteCmd(WM_RL_LINE_IN,0x17);//Analogue vol 0dB
- CdcCtrl(CDC_VOL_DOWN); //set volume
- CdcWriteCmd(WM_L_OUT_MIX1_0,0xa1);//LINPUT2 to Lout
- CdcWriteCmd(WM_R_OUT_MIX1_0,0xa1);//RINPUT2 to Rout
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)
- CdcWriteCmd(WM_ACTIVE_CTRL,0x00);
- CdcWriteCmd(WM_DIG_FORMAT,0x11);
- CdcWriteCmd(WM_L_LINE_IN,0x1E);
- CdcWriteCmd(WM_R_LINE_IN,0x1E);
- // CdcWriteCmd(WM_L_PHONE_OUT,0x79 - 12 - 6);
- // CdcWriteCmd(WM_R_PHONE_OUT,0x79 - 12 - 6);
- CdcWriteCmd(WM_ANG_CTRL,0x0A);
- CdcWriteCmd(WM_DIG_CTRL,0x19);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_PW_CTRL,0x62);
- #endif // Jeff_061016 end
- #if(!EXT_ADC)
- IntCdcCtrl(CDC_FM_IN_AUD_OUT);
- #else
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL1REG |= 0x80; //En I2S IRQ
- MCU_ACCESS_CODEC_I2S_DIS();
- #endif
- //#endif // Jeff_061016
- break;
- case CDC_LINE_IN_AUD_OUT:
- #if(CDC_WM_8750)
- CdcCtrl(CDC_VOL_DOWN); //set volume
- CdcWriteCmd(WM_ADCL_PATH,0x00); //LINPUT0 to ADC, boost off //Renshuo050322#A
- CdcWriteCmd(WM_ADCR_PATH,0x00); //RINPUT0 to ADC, boost off
- CdcWriteCmd(WM_LR_LINE_IN,0x17);//Analogue vol 0dB
- CdcWriteCmd(WM_RL_LINE_IN,0x17);//Analogue vol 0dB
- CdcWriteCmd(WM_L_OUT_MIX1_0,0xa0); //LINPUT1 to Lout
- CdcWriteCmd(WM_R_OUT_MIX1_0,0xa0); //RINPUT1 to Rout
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)
- /* CdcWriteCmd(WM_L_LINE_IN,0x1F);
- CdcWriteCmd(WM_R_LINE_IN,0x1F);
- CdcWriteCmd(WM_ANG_CTRL,0x0A);
- CdcWriteCmd(WM_PW_CTRL,0x7A);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_DIG_CTRL,0x19);*/
- /* CdcWriteCmd(WM_DIG_FORMAT,0x11);OK
- CdcWriteCmd(WM_LR_PHONE_OUT,0x00);
- CdcWriteCmd(WM_L_LINE_IN,0x1F);
- CdcWriteCmd(WM_R_LINE_IN,0x1F);
- CdcWriteCmd(WM_ANG_CTRL,0x0A);
- CdcWriteCmd(WM_PW_CTRL,0x7A);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_DIG_CTRL,0x19);*/
- CdcWriteCmd(WM_ACTIVE_CTRL,0x00);
- CdcWriteCmd(WM_DIG_FORMAT,0x11);
- CdcWriteCmd(WM_L_LINE_IN,0x1C);
- CdcWriteCmd(WM_R_LINE_IN,0x1C);
- CdcWriteCmd(WM_L_PHONE_OUT,0x0);
- CdcWriteCmd(WM_R_PHONE_OUT,0x0);
- CdcWriteCmd(WM_ANG_CTRL,0x02);
- CdcWriteCmd(WM_PW_CTRL,0x7A);
- CdcWriteCmd(WM_DIG_CTRL,0x19);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- /* CdcWriteCmd(WM_L_LINE_IN,0x1E);
- CdcWriteCmd(WM_R_LINE_IN,0x1E);
- CdcWriteCmd(WM_L_PHONE_OUT,0x2F);
- CdcWriteCmd(WM_R_PHONE_OUT,0x2F);
- CdcWriteCmd(WM_ANG_CTRL,0x02);
- CdcWriteCmd(WM_DIG_CTRL,0x09);
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_PW_CTRL,0x6A);*/
- #endif // Jeff_061016 end
- #if(!EXT_ADC)
- IntCdcCtrl(CDC_LINE_IN_AUD_OUT);
- #else
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL1REG |= 0x80; //En I2S IRQ
- MCU_ACCESS_CODEC_I2S_DIS();
- #endif
- // #endif // Jeff_061016
- break;
- case CDC_MIC_IN_NO_AUD_OUT:
- #if(CDC_WM_8750)
- CdcWriteCmd(WM_PW1_0,0xfe);
- CdcWriteCmd(WM_PW2_0,0x00);
- CdcWriteCmd(WM_ADCL_PATH,0xb0); //LINPUT3 to ADC, 29dB boost //Renshuo050322#A
- CdcWriteCmd(WM_ADCR_PATH,0xb0); //RINPUT3 to ADC, 29dB boost
- CdcWriteCmd(WM_LR_LINE_IN,0x3f);//Analogue vol +30dB
- CdcWriteCmd(WM_RL_LINE_IN,0x3f);//Analogue vol +30dB
- //CdcWriteCmd(WM_AD_DA_CTRL,0x01);//dis HP filter
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)
- CdcWriteCmd(WM_ACTIVE_CTRL,0x00);
- CdcWriteCmd(WM_ANG_CTRL,0xE5);
- CdcWriteCmd(WM_DIG_CTRL,0x08);
- CdcWriteCmd(WM_DIG_FORMAT,0x11); //16 bits, MSB Left justified
- CdcWriteCmd(WM_ACTIVE_CTRL,0x01);
- CdcWriteCmd(WM_PW_CTRL,0x69);
- #endif // Jeff_061016 end
- #if(!EXT_ADC)
- IntCdcCtrl(CDC_MIC_IN_NO_AUD_OUT);
- #else
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2CTRL1REG |= 0x80; //En I2S IRQ
- MCU_ACCESS_CODEC_I2S_DIS();
- #endif
- //#endif // Jeff_061016
- break;
- #endif // not _PM_PLAY_ endif
- }
- }
- //#endif
- #endif
- #if((EXT_ADC | EXT_DAC | EXT_PA) & !_PM_INIT_)
- API void ExtCdcSetSampleRate(void)
- {
- if((gxwSampleRate%1000)==0) //48K domain
- {
- obDCVARRD=0x14; //DCV power
- obDCVWRDATA=0x90; //48K domain, Audio clock=73.7143M //D1003#9
- }
- else //44.1K domain
- {
- obDCVARRD=0x14; //DCV power
- obDCVWRDATA=0x98; //44.1K domain, Audio clock=67.7143M //D1003#9
- }
- MCU_ACCESS_CODEC_I2S_EN();
- //obMODSEL1 |= 0x02; //Enable MS //Vicky050411#1
- //obCLKI2S2DIVF=6;
- //obCLKI2S2CTRL=0xB8; //I2S2 clock, Audio Clock/8=9.214M or 8.464M
- //obCLKI2S2CTRL=0xD0; //I2S2 clock, 12 MHz //always use AUD clk
- obSYSSOFTRSTCTRL2&=0xfd;//I2S2 reset
- obSYSSOFTRSTCTRL2|=0x02;//I2S2 Normal
- switch(gxwSampleRate)
- {
- #if(CDC_WM_8750)
- case 48000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x02);//48k, not USB mode;
- obI2S2SCLKDIV=12; //I2S BCLK 18.432M/12 = (48k*32)
- break;
- case 32000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x1A); //32k, not USB mode;
- obI2S2SCLKDIV=18; //I2S BCLK 18.432M/18 = (32k*32)
- break;
- case 24000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x3A);//24k, not USB mode;
- obI2S2SCLKDIV=24; //I2S BCLK 18.432M/24 = (24k*32)
- break;
- case 16000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x16);//16k, not USB mode;
- obI2S2SCLKDIV=36; //I2S BCLK 18.432M/36 = (16k*32)
- break;
- case 12000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x12);//16k, not USB mode;
- obI2S2SCLKDIV=48; //I2S BCLK 18.432M/48 = (12k*32)
- break;
- case 8000:
- CdcWriteCmd(WM_SAMPLE_RATE,0x0E); //8k, not USB mode
- obI2S2SCLKDIV=72; //I2S BCLK 18.432M/72 = (8k*32)
- break;
- case 11025:
- CdcWriteCmd(WM_SAMPLE_RATE,0x32);//11.025k, not USB mode;
- obI2S2SCLKDIV=48; //I2S BCLK 16.9344M/48 = (11.025k*32)
- break;
- case 22050:
- CdcWriteCmd(WM_SAMPLE_RATE,0x36);//22.05k, not USB mode;
- //obI2S2SCLKDIV=12; //I2S BCLK 705KHz
- obI2S2SCLKDIV=24; //I2S BCLK 16.9344M/24 = (22.05k*32)
- break;
- case 44100:
- default:
- CdcWriteCmd(WM_SAMPLE_RATE,0x22);//44.1k, not USB mode;
- obI2S2SCLKDIV=12; //I2S BCLK 16.9344M/12 = (44.1k*32)
- break;
- #endif // Jeff_061016 start
- #if(CDC_WM_8731)//add by william lian
- case 48000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x02);//48k, not USB mode;
- obI2S2SCLKDIV=12; //I2S BCLK 18.432M/12 = (48k*32)
- break;
- case 32000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x1A); //32k, not USB mode;
- obI2S2SCLKDIV=18; //I2S BCLK 18.432M/18 = (32k*32)
- break;
- case 8000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x0E); //8k, not USB mode
- obI2S2SCLKDIV=72; //I2S BCLK 18.432M/72 = (8k*32)
- break;
- case 96000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x1E);//96k,not USB mode
- obI2S2SCLKDIV=6; //I2S BCLK 18.432M/6 = (96k*32)
- break;
- case 88200:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x3E);//88.2k,not USB mode
- obI2S2SCLKDIV=6; //I2S BCLK 16.9344M/6 = (88.2k*32)
- break;
- case 24000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x42);//24k, not USB mode;
- obI2S2SCLKDIV=24; //I2S BCLK 18.432M/24 = (24k*32)
- break;
- case 16000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x5A); //16k, not USB mode;
- obI2S2SCLKDIV=36; //I2S BCLK 18.432M/36 = (16k*32)
- break;
- case 12000:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x02);//12k, not USB mode;
- obI2S2SCLKDIV=48; //I2S BCLK 18.432M/48 = (12k*32)
- break;
- case 11025:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x22);//11.025k, not USB mode;
- obI2S2SCLKDIV=48; //I2S BCLK 16.9344M/48 = (11.025k*32)
- break;
- case 22050:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x62);//22.050k, not USB mode;
- obI2S2SCLKDIV=24; //I2S BCLK 16.9344M/24 = (22.050k*32)
- break;
- case 44100:
- default:
- CdcWriteCmd(WM_SAMPLE_CTRL,0x22);//44.1k, not USB mode;
- obI2S2SCLKDIV=12; //I2S BCLK 16.9344M/12 = (44.1k*32)
- break; // Jeff_061016 end
- #endif
- }
- #if(CDC_WM_8750|CDC_WM_8731) // Jeff_061016
- obI2S2CTRL3REG=0x08; //Audio data mode, PIO data
- obI2S2FIFOCTL=0x88; //Clear buffer
- obI2S2FIFOCTL=0x00;
- obI2S2CTRL1REG=0x97; //INT EN, WCLK EN, SDATA_OUT EN, 2 Channel, BCLK EN
- #endif
- MCU_ACCESS_CODEC_I2S_DIS();
- }
- #endif
- #if((EXT_ADC | EXT_DAC | EXT_PA) & !_PM_INIT_)
- void CdcWriteCmd(BYTE bAddr, BYTE bData) large
- {
- obCLKI2CMCTRL |= 0x80; //clock Enable
- obMODSEL2 |= 0x08; //I2CM Enable
- #define ReTry bAddr
- obI2CMAADDR=CDC_DEVICE_ADDRESS;
- obI2CSLADDR=bAddr;
- obI2CFIFO=bData;
- obI2CMACMD=0x11;
- ReTry=0xFF;
- while(obI2CSERSTS&0x80) //wait busy
- {
- ReTry--;
- if(ReTry==0)
- break;
- }
- obMODSEL2 &= 0xF7; //I2CM Disable
- obCLKI2CMCTRL &= 0x7F; //clock Disable
- }
- #endif
- #if(_PM_REC_)
- //tne 2005/08/17 //release IntCode
- void ClearExtCdcBuffer(void) large //This function would be called by Record Engine (ReInit)
- {
- #if(EXT_ADC) //Ren050312#1
- MCU_ACCESS_CODEC_I2S_EN();
- obI2S2FIFOCTL=0x88; //Clear buffer
- obI2S2FIFOCTL=0x00;
- MCU_ACCESS_CODEC_I2S_DIS();
- #else
- // ...do nothing
- #endif
- }
- #endif