www.pudn.com > mp3decoder.rar > aic23.C


/*********************************************** 
copyright by Haia Tech 
www.haia2004.com 
************************************************/ 
 
#include "..\inc\board.h" 
                                                                                                                                                        
#define   L_LINE_VOLUME        0x00 
#define   R_LINE_VOLUME        0x01 
#define   L_HEADPHONE_VOLUME   0x02 
#define   R_HEADPHONE_VOLUME   0x03 
#define   A_AUDIO_PATH         0x04 
#define   D_AUDIO_PATH         0x05 
#define   POWER_CON            0x06 
#define   D_AUDIO_INTERFACE    0x07 
#define   SAMPLE_RATE          0x08 
#define   D_INTERFACE_ACT      0x09 
#define   RESET                0x0f 
 
 
void write_AIC23(unsigned char addr,unsigned int dat); 
 
 
void init_AIC23() 
{  
   int volume; 
   write_AIC23(RESET,0); 
   write_AIC23(D_INTERFACE_ACT,0x001); 
   write_AIC23(POWER_CON,0); 
   write_AIC23(SAMPLE_RATE,0x022);  //44.1k 
//   write_AIC23(SAMPLE_RATE,0x062);  //22.05k 
//   write_AIC23(SAMPLE_RATE,0x02e);    //8.021k 
     
   write_AIC23(L_LINE_VOLUME,0x0117); 
   write_AIC23(L_LINE_VOLUME,0x0117); 
    
   volume=100; 
   write_AIC23(L_HEADPHONE_VOLUME,0x0180+volume);    
   write_AIC23(R_HEADPHONE_VOLUME,0x0180+volume);    
    
//   write_AIC23(A_AUDIO_PATH,0x009);  //bypass DAC OFF 
//   write_AIC23(A_AUDIO_PATH,0x014);   //MIC ADC DAC ON  0DB 
//     write_AIC23(A_AUDIO_PATH,0x1fc);   //bypass MIC ADC DAC ON 0DB sidetone  
     write_AIC23(A_AUDIO_PATH,0x07d);   //bypass MIC ADC DAC ON 20DB sidetone(-6db) 
//   write_AIC23(A_AUDIO_PATH,0x011);   //LINE ADC DAC ON 
    
   write_AIC23(D_AUDIO_PATH,0x04); 
    
//   write_AIC23(D_AUDIO_INTERFACE,0x041);   //MASTER LEFT_ALINGED 
   write_AIC23(D_AUDIO_INTERFACE,0x001);     //SLAVE LEFT_ALINGED 
} 
 
 
void write_AIC23(unsigned char addr,unsigned int dat) 
{ 
    unsigned char i; 
    unsigned int portf; 
    dat|=addr<<9; 
    portf=0xf7;       //CS=0 
    outl(portf,rPDATF); 
    for(i=0;i<16;i++) 
    { 
      //SCLK=0; 
      portf&=0xfe; 
      outl(portf,rPDATF); 
      if((dat<