📄 audio.c
字号:
/**********************************************************************
*File Name : auido.c
*Creat Time : 2002/02/11
*Program Author : Saho
*File Discreption : Control the ADC WM8775 and the Class D STA323
************************************************************************/
#include "common.h"
#include "var.h"
#include "main.h"
#include "key.h"
#include "Keyboard.h"
#include "i2c.h"
#include "lcd.h"
#include "Int.h"
#include "audio.h"
void Init_ADC_WM8775()
{
//reset WM8775
// Write_ADC_WM8775(WM8775_RESET_REG,0xFF);
//set the master clock ,128K samp 256 fs
Write_ADC_WM8775( ADC_CLOCK_REG, 0x0A);//WM8775_ADC_MASTER_MODE_128SAMP_256FS);
Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, 0x02);
#if 0
//set the ADC output interface I2S 24bits
Write_ADC_WM8775( ADC_FORAMTE_CONTROL_REG, WM8775_ADC_NORMAL_I2S_24BIT);
//enable zero cross timeout
Write_ADC_WM8775(ZERO_CROSS_DETECT_TIMEOUT_CONTROL_REG, 0x08);
//set the master clock ,128K samp 256 fs
Write_ADC_WM8775( ADC_CLOCK_REG, WM8775_ADC_MASTER_MODE_128SAMP_256FS);
//set L channel gain
Write_ADC_WM8775( LEFT_CHANNEL_GAIN_CONTROL_REG, LR_CHANNEL_ATTENUATION_0dB);
//set R channel gain
Write_ADC_WM8775( RIGHT_CHANNEL_GAIN_CONTROL_REG,LR_CHANNEL_ATTENUATION_0dB);
//enable the limter
Write_ADC_WM8775( LIMITER_ALC_ENABLE_CONTROL_REG, ENABLE_LIMITER_AND_PGA_ZERO_CROSS);
//select the limter
Write_ADC_WM8775( LIMITER_ALC_SELECT_AND_LIMITE_REG, SELECT_LIMITER_AND_MAX_LEVEL_NEGTIVE1dB);
//select the empty input
Write_ADC_WM8775(WM8775_INPUT_MUX_CONTROL_REG, INPUT_SELECT_EMPTY);
#endif
}
void Select_Audio_Input(U8 audio_source)
{
switch(audio_source)
{
case iPod_SOURCE:
P2_0=1;
Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, 0x02);
break;
case AUX_SOURCE:
P2_0=0;
Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, 0x04);
break;
default:
Write_ADC_WM8775( WM8775_INPUT_MUX_CONTROL_REG, INPUT_SELECT_EMPTY);
break;
}
}
void Set_WM8775_Power_State(U8 state)
{
if(state==0)
{
Write_ADC_WM8775(WM8775_POWER_CONTROL_REG, WM8775_ADC_AND_INPUT_MUX_AND_ALL_POWER_OFF);
Write_ADC_WM8775(WM8775_POWER_CONTROL_REG, WM8775_ADC_AND_INPUT_MUX_POWER_OFF);
}
else
{
Write_ADC_WM8775(WM8775_POWER_CONTROL_REG, WM8775_ADC_AND_INPUT_MUX_AND_ALL_POWER_ON);
}
}
void Init_STA323_Hardware()
{
STA323_SET_RESET;
AMP_POWER_DOWN;
}
void Init_Digital_Audio_System_STA323_Register()
{
U8 * temp_add;
U8 init_value[]={
0x63,// 0x00 - Configuration Register A //allow fault recover ,thermal warning recover,<48 fs 256 rate of fs
0xA0,// 0x80,// 0x01 - Configuration RegisterB
0x22,// 0x02 - Configuration Register C
0x40,// 0x03 - Configuration Register D
0xc2,// 0x04 - Configuration Register E
0xdd,// 0x05 - Configuration Register F
0x20,// 0x06 - Master first Mute
0x35,// 0x07 - Master Volume=-127.5dB
0x60-20,// 0x08 - Channel 1 Volume=0dB+10dB
0x60-20,// 0x09 - Channel 2 Volume=0dB+10dB
0x60-32,// 0x0A - Channel 3 Volume=0dB+16dB
0x20,// 0xA0,// 0x0B - Auto GC, Auto Vol, Auto EQ ??????????????????
0x70,// 0x0C - Auto BM, Auto AM //160Hz
0x00,// 0x0D - Preset EQ
0x00+0x10,// 0x0E - Channel 1 Config 1->ch1
0x40+0x20,// 0x0F - Channel 2 Config 2->ch2
0x80,// 0x10 - Channel 3 Config 3->ch3
0x77,// 0x11 - Bass and Treble Tone Control T=0dB B=0dB
0x6a,// 0x12 - Limiter 1 Attack/Release Rate
0x69,// 0x13 - Limiter 1 Attack/Release Threshold
0x6a,// 0x14 - Limiter 2 Attack/Release Rate
0x69,// 0x15 - Limiter 2 Attack/Release Threshold
};
AMP_POWER_ON;
Delay_xmS(10);
STA323_RESET_RELEASE;
Delay_xmS(2);
* temp_add=STA323_CONFA_REG_ADD;
//I2C_Write_Bytes(STA323_I2C_ADDRESS, temp_add,1,init_value,sizeof(init_value)); //allow fault recover
I2C_Write_STA323_Bytes(STA323_CONFA_REG_ADD,init_value,sizeof(init_value));
//set the MPC coeficient
#if 0
init_value[0]=0x2d; init_value[1]=0xc0;
* temp_add=STA323_MPC_REG_ADD;
I2C_Write_Bytes(STA323_I2C_ADDRESS,temp_add ,1,init_value,2); //correct the MPC coeficient
#endif
}
void Set_STA323_Volume(U8 volume)
{
Write_STA323_Byte(STA323_MASTER_VOLUME_REG_ADD, 100-volume );
}
void Change_Master_Volume(U8 change_direction)
{
if(change_direction==UP)
{
System_Master_Volume++;
if(System_Master_Volume>100)
System_Master_Volume=100;
}
else
{
if(System_Master_Volume)
System_Master_Volume--;
}
Set_STA323_Volume(System_Master_Volume);
}
void Process_Mute_Funtion(U8 mute_state)
{
if(mute_state==MUTE_ON)
Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x01);
else
Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x00);
}
void Set_Tone_Control(U8 trable_val,U8 bass_val)
{
Write_STA323_Byte(STA323_TONE_CONTROL_REG_ADD, (trable_val<<4)+bass_val );
}
void Change_Tone_Control(U8 tone_type ,U8 change_direction)
{
if(tone_type==TONE_TYPE_TRABLE)
{
if(change_direction==UP)
{
System_Tone_Trable++;
if(System_Tone_Trable>13)
System_Tone_Trable=13;
}
else
{
if(System_Tone_Trable>1)
System_Tone_Trable--;
}
}
else
{
if(change_direction==UP)
{
System_Tone_Bass++;
if(System_Tone_Bass>13)
System_Tone_Bass=13;
}
else
{
if(System_Tone_Bass>1)
System_Tone_Bass--;
}
}
Set_Tone_Control(System_Tone_Trable,System_Tone_Bass);
}
void Begin_Temp_Mute(U8 mute_timer)
{
EventAutoUnmute_Timer=mute_timer;
Write_STA323_Byte( STA323_MUTE_CONTROL_REG_ADD,0x01);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -