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

📄 audio.c

📁 电子产品音效处理芯片驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
   +----------------------------------------------------------------------+
   | Copyright Trumpion Microelectronics Inc. 2002                        |
   | Trumpion Microelectronics Inc. reserves the right to change products |
   | or specifications without notice.                                    |
   +----------------------------------------------------------------------+
   Project    : LCD monitor
   Version    : 0.94
   File Name  : audio.c
   Functions  : Audio/MTS control
   Revision   :

   2002-02-05  Bill Tseng      first version
****************************************************************************/

//=========================================================================
// include files                                                          =
//=========================================================================
#include  "inc\wreg516.h"
#include  "inc\declare.h"

//---2004.0813 Jeffrey.Jin Add one pen for GBM ExSPK use_s---
#include  "inc\T33521.H"
//---2004.0813 Jeffrey.Jin Add one pen for GBM ExSPK use_e---

#include  "inc\global.h"
#include  "inc\modedata.h"
#include  "inc\initial.h"
#include  "inc\eeprom.h"
#include  "inc\phdreg.h"
#include  "inc\phdparam.h"
#include  "inc\iic.h" 
#include  "inc\audio.h"
#include  "inc\Common.h"
#include  <intrins.h>

#define I2C_SELECT          0

void MSP_StandardSelect(Word select);

#if ( AUDIO_CHIP==AUDIO_MSP34X5 ||MTS_DECODER==MTS_ALL_MSP34X5 )
void MspWriteWord(Byte device, Word addr, Word  wval)
{
  ByteCnt = (device==MTS_CONTROL) ? 2 : 4;
  TrmBuf[0] = HIBYTE(addr);
  TrmBuf[1] = LOBYTE(addr);
  TrmBuf[2] = HIBYTE(wval);
  TrmBuf[3] = LOBYTE(wval);
  WriteI2CData(MTS_ADDR,device,I2C_SELECT+IIC_BYTE_WAIT+ByteCnt);
}
void MspReadWord(Byte device, Word addr)
{
  if( device==MTS_CONTROL )
  {
     TrmBuf[4] = device;
     ReadI2CData(MTS_ADDR,0x01,I2C_SELECT+IIC_NO_BASE_ADDR+IIC_BYTE_WAIT+2);
  }
  else
  {
     TrmBuf[4] = device;
     TrmBuf[5] = HIBYTE(addr);
     TrmBuf[6] = LOBYTE(addr);
     ReadI2CData(MTS_ADDR,0x03,I2C_SELECT+IIC_NO_BASE_ADDR+IIC_BYTE_WAIT+2);
  }
}
#endif //( AUDIO_CHIP==AUDIO_MSP34X5 )

/**************************************************************************/
/*   PROGRAM SECTION                                                      */
/**************************************************************************/
//void AudioInputSelect(void)
//{
//   Byte val;
//
//   if (FgAudioSelect?IsSub(TYPE_TV):IsMain(TYPE_TV))         val = AUDIO_OF_TUNER;
//   else if (FgAudioSelect?IsSub(TYPE_YUV):IsMain(TYPE_YUV))  val = AUDIO_OF_VIDEO;
//   else                                                      val = AUDIO_OF_PC;
//#if  (AUDIO_CHIP==AUDIO_TDA7440)
//   switch( val )
//   {
//    case AUDIO_OF_PC :     // IN-4
//    case AUDIO_OF_HDTV :
//       WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x00, 0x00 );
//       break;
//    case AUDIO_OF_VIDEO :  // IN-1
//       WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x00, 0x03 );
//       break;
//    case AUDIO_OF_SVIDEO : // IN-2
//       WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x00, 0x02 );
//       break;
//    case AUDIO_OF_TUNER :  // IN-3
//       WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x00, 0x01 );
//       break;
//   };
//   return;
//#elif (AUDIO_CHIP==AUDIO_MSP34X5)
//
//   switch( val )
//   {
//#if (PHD_DEFAULT==PHD_STK_3230)
//    case AUDIO_OF_PC :     // SC1_IN
//    case AUDIO_OF_HDTV :
//       MspWriteWord(MTS_WR_DSP, MTS_LDSPK_SOURCE, 0x0220);
//       MspWriteWord(MTS_WR_DSP, MTS_ACB, 0x0c00);
//       MspWriteWord(MTS_WR_DSP, MTS_SCRT1_SOURCE, 0x0200);
//       break;
//    case AUDIO_OF_VIDEO :  // SC2_IN
//    case AUDIO_OF_SVIDEO :
//       MspWriteWord(MTS_WR_DSP, MTS_LDSPK_SOURCE, 0x0220);
//       MspWriteWord(MTS_WR_DSP, MTS_ACB, 0x0e00);
//       MspWriteWord(MTS_WR_DSP, MTS_SCRT1_SOURCE, 0x0200);
//       break;
//#else
//    case AUDIO_OF_PC :     // SC2_IN
//    case AUDIO_OF_HDTV :
//       MspWriteWord(MTS_WR_DSP, MTS_LDSPK_SOURCE, 0x0220);
//       MspWriteWord(MTS_WR_DSP, MTS_ACB, 0x0e00);
//       MspWriteWord(MTS_WR_DSP, MTS_SCRT1_SOURCE, 0x0200);
//       break;
//    case AUDIO_OF_VIDEO :  // SC1_IN
//    case AUDIO_OF_SVIDEO :
//       MspWriteWord(MTS_WR_DSP, MTS_LDSPK_SOURCE, 0x0220);
//       MspWriteWord(MTS_WR_DSP, MTS_ACB, 0x0c00);
//       MspWriteWord(MTS_WR_DSP, MTS_SCRT1_SOURCE, 0x0200);
//       break;
//#endif
//    case AUDIO_OF_TUNER :  // ANA_IN+
//       MspWriteWord(MTS_WR_DSP, MTS_LDSPK_SOURCE, 0x0230);
//       MspWriteWord(MTS_WR_DSP, MTS_ACB, 0x0d00);
//       MspWriteWord(MTS_WR_DSP, MTS_SCRT1_SOURCE, 0x0300);
//       break;
//   };
//   return;
//#endif
//}
/************************************************************************/
/************************************************************************/
void AudioInputGain(Byte val)  /* 0..15 */
{
#if  (AUDIO_CHIP==AUDIO_TDA7440)
    WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x01, val & 0x0F );
#elif (AUDIO_CHIP==AUDIO_MSP34X5)
    MspWriteWord(MTS_WR_DSP, MTS_PRESCALE_SCRT, 0x1900);
#elif (AUDIO_CHIP==AUDIO_AN5891)
    TrmBuf[0] = 0x0F;
    TrmBuf[1] = 0x05;
    
    WriteI2CData(AUDIO_PROCESSOR_ADDR,0x03,2);
#endif
    val = 0;
}
/************************************************************************/
/************************************************************************/
void AudioVolume(Byte val)   /* 0..50..100 */
{
#if  (AUDIO_CHIP==AUDIO_TDA7440)
   Byte  bval;

   if( val==0 )  bval = 0x7F;
   else          bval = 47 - ((Word)val * 47 / 100);
   WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x02, bval & 0x3F );
#elif (AUDIO_CHIP==AUDIO_TDA7496)
   Byte  bval;

   bval = 54 + (Byte) (((Word)bval*17) / 10);
   if( val==0 )  bval = 0;
   Phd1WriteByte( 0xB9,bval);   /* CLAMP/PWMR0 */
#elif (AUDIO_CHIP==AUDIO_MSP34X5)


   Byte  bval;

   if( val==0 )  bval = 0x00;
	//---2004.0810 Jeffrye.Jin Modify for GBM Audio valume_s---
   //else          bval = 0x73 - (50 - val/2);    /* 0dB .. -50 dB */
   else          bval = 0x7D - (50 - val/2);    /* 0dB .. -50 dB */
   //---2004.0810 Jeffrye.Jin Modify for GBM Audio valume_e---
   
   if( val & 0x01 )  val = 0x80;
   else              val = 0x00;

/*
UartString("Audio-->");
UartByteHex(bval);
UartByteHex(val);

bval = 0x79;
val  = 0x00;
*/
   MspWriteWord(MTS_WR_DSP, MTS_VOLUME, MAKEWORD(bval,val));



#elif (AUDIO_CHIP==AUDIO_AN5891)
    val = val<<2;
    val = val|((Byte)(FgMuting)<<1);
    WriteI2CByte(AUDIO_PROCESSOR_ADDR,0x00,val);
#endif
}
/************************************************************************/
/************************************************************************/
void AudioBass(Byte val)    /* 0..7..14 or 0..50..100 */
{
#if  (AUDIO_CHIP==AUDIO_TDA7440)
   Byte  bval;

   if( val>14 )     val = 14;
   if( val <= 7 )   bval = val;
   else             bval = 0x08 + (14-val);
   WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x03, bval );
#elif (AUDIO_CHIP==AUDIO_MSP34X5)
   Byte  bval;

   if( val>100 )    val = 100;
   if( val < 50 )   bval = 0x100 - (Byte)((Word)(50-val)*8/5);
   else             bval = (Byte)((Word)(val-50)*8/5);

   MspWriteWord(MTS_WR_DSP, MTS_BASS, MAKEWORD(val,0x00));
#elif (AUDIO_CHIP==AUDIO_AN5891)
    val |= (TrebleValue<<4);
    WriteI2CByte(AUDIO_PROCESSOR_ADDR,0x02,val);
#endif
}
/************************************************************************/
/************************************************************************/
void AudioTreble(Byte val)   /* 0..7..14 */
{
#if  (AUDIO_CHIP==AUDIO_TDA7440)
   Byte  bval;

   if( val>14 )     val = 14;
   if( val <= 7 )   bval = val;
   else             bval = 0x08 + (14-val);

   WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x05, bval );
#elif (AUDIO_CHIP==AUDIO_MSP34X5)
   Byte  bval;

   if( val>100 )    val = 100;
   if( val < 50 )   bval = 0x100 - (Byte)((Word)(50-val)*8/5);
   else             bval = (Byte)((Word)(val-50)*8/5);

   MspWriteWord(MTS_WR_DSP, MTS_TREBLE, MAKEWORD(val,0x00));
#elif (AUDIO_CHIP==AUDIO_AN5891)
    val = (val<<4)|BassValue;
    WriteI2CByte(AUDIO_PROCESSOR_ADDR,0x02,val);
#endif
}
/************************************************************************/
/************************************************************************/
void AudioBalance(Byte val)  /* 0..50..100 */
{
#if  (AUDIO_CHIP==AUDIO_TDA7440)
   Byte  bval1,bval2;

   if( val>50 )
   {
      if( val==100 )  bval1 = 0x7F;
      else            bval1 = (Byte)(((Word)(val-50)*79) / 50);
      bval2 = 0;
   }
   else if( val<50 )
   {
      bval1 = 0;
      if( val==0 )    bval2 = 0x7F;
      else            bval2 = (Byte)(((Word)(50-val)*79) / 50);
   }
   else
   {
      bval1 = 0;
      bval2 = 0;
   }
   WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x06,bval2 );
   WriteI2CByte( AUDIO_PROCESSOR_ADDR, 0x07,bval1 );
#elif (AUDIO_CHIP==AUDIO_MSP34X5)
   Byte  bval;

   if( val>50 )
   {
      if( val==100 )  bval = 0x7F;
      else            bval = (Byte)(((Word)(val-50)*127) / 50);
   }
   else if( val<50 )
   {
      if( val==0 )    bval = 0x81;
      else            bval = 0x81 + (Byte)(((Word)val*127) / 50);
   }
   else
   {
      bval = 0x00;
   }

   MspWriteWord(MTS_WR_DSP, MTS_BALANCE, MAKEWORD(bval,0x00));
#elif (AUDIO_CHIP==AUDIO_AN5891)
    val = val<<2;
    val = val|0x03;
    WriteI2CByte(AUDIO_PROCESSOR_ADDR,0x01,val);
#endif
}

//---2004.0813 Jeffrey.Jin Add one pen for GBM ExSPK use_s---
void AudioSPK_SW(Bool fSW)
{
	AUDIO_PIN_EXSPK_SW = fSW;

	return;
}
//---2004.0813 Jeffrey.Jin Add one pen for GBM ExSPK use_e---

/************************************************************************/
/*   Input Source selected                                              */
/************************************************************************/
void AudioInit()
{
 #if ( AUDIO_CHIP==AUDIO_MSP34X5 )
   // Add mute to avoid pop sound--jalen 03/12/29
   AudioVolume( 0 );      /* 0..100 */
   ShortDelay(100);
   MspReadWord(MTS_CONTROL, 0x0000);
   // Reset MSP34X5
   MspWriteWord(MTS_CONTROL, 0x8000, 0x0000);//reset audio chip
   MspWriteWord(MTS_CONTROL, 0x0000, 0x0000);
 #elif (AUDIO_CHIP==AUDIO_AN5891)
   AudioInputGain( 0 );   /* 0..15  */
   AudioVolume( 0 );      /* 0..100 */
   AudioBass( 7 );        /* 0..14  */
   AudioTreble( 7 );      /* 0..14  */
   AudioBalance( 32 );    /* 0..100 */
 #endif

   AudioInputSelect();

 #if   (AUDIO_CHIP==AUDIO_TDA7440)
   AudioInputGain( 0 );   /* 0..15  */
   AudioVolume( 0 );      /* 0..100 */
   AudioBass( 7 );        /* 0..14  */
   AudioTreble( 7 );      /* 0..14  */
   AudioBalance( 50 );    /* 0..100 */
 #elif (AUDIO_CHIP==AUDIO_MSP34X5)
   AudioInputGain( 0 );   /* 0..15  */  // Eric temporarely add 2003/2/22 12:36PM
   AudioVolume( 0 );      /* 0..100 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -