📄 audio.c
字号:
/****************************************************************************
+----------------------------------------------------------------------+
| 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 + -