📄 ddx8000.c
字号:
}while (index <= 125);
ddx_set_biquad_iir_filter_coef(126,0x00,0x00,0x8c);
ddx_set_biquad_iir_filter_coef(127,0x00,0x00,0x46);
ddx_set_biquad_iir_filter_coef(128,0x81,0x7a,0x80);
ddx_set_biquad_iir_filter_coef(129,0x7f,0x41,0xa7);
ddx_set_biquad_iir_filter_coef(130,0x00,0x00,0x8c);
}
//Initialization
void ddx_initialization(void)
{
int res;
BYTE data;
//printf("ddx_initialization()\n");
/*
before write cmd to initiate the amplifier,we should confirm its existence first!
huziqin 2004-1-14
*/
res = ReadFromI2c(DDX8K_ADDR,0,&data,1);
if(res<0)
{
printf("fail to init ddx or there is no ddx!! ret \n");
return;
}
enable_hpf();
//NOP;
set_inputClock(0x00,0x03);//256Fs
//NOP;
//set input data format
//set input data format :DVD,VCD,MP3,CD,
#if defined(WM8746)//Right-Justified 24-bit Data
set_inputData_format(0x05);
#elif defined(WM8746I2S24) || defined(USE_DAC_I2S24)//I2S 24-bit Data
set_inputData_format(0x00);
#endif
// BYTE data = 0x27;
// WriteToI2c(DDX8K_ADDR,0x03,&data,1);
//enable bass management
//ddx_enable_BassManagement();
//Enable Zero Crossing
//ddx_enZeroCross();
//set Anti-clipping Mode for 5.1 Channels
//ddx_setDRCmode(0);
#ifdef SUPPORT_SAVE_AMPLIFIER_STATUS
load_amplifier_status_from_e2prom();
#endif
//initialize volume gain
ddx_init_volumeGain();
//This function cause crash when the amplifier is not connected.
// ddx_set_biquad_iir_filter();
#if defined(DDX8000_BINARY_MODE)
data=0x2f;
WriteToI2c(DDX8K_ADDR,CONFIGREG_D,&data,1);
//channel mapping via I2C
//output: 7 5 4 2 1 6=====input: 1 2 3 4 5 6
data = 0x34;
WriteToI2c(DDX8K_ADDR,C12MAP_REG,&data,1);
data = 0x20;
WriteToI2c(DDX8K_ADDR,C34MAP_REG,&data,1);
data = 0x51;
WriteToI2c(DDX8K_ADDR,C56MAP_REG,&data,1);
data = 0x00;
WriteToI2c(DDX8K_ADDR,C78MAP_REG,&data,1);
#elif defined(XINGQIU_BINARY_MODE)//xyy 2004-3-31
data=0x2f;
WriteToI2c(DDX8K_ADDR,CONFIGREG_D,&data,1);
//channel mapping via I2C
//input: 1 2 3 4 5 6=====output: 2 4 7 5 1 6
data = 0x04;
WriteToI2c(DDX8K_ADDR,C12MAP_REG,&data,1);
data = 0x10;
WriteToI2c(DDX8K_ADDR,C34MAP_REG,&data,1);
data = 0x53;
WriteToI2c(DDX8K_ADDR,C56MAP_REG,&data,1);
data = 0x02;
WriteToI2c(DDX8K_ADDR,C78MAP_REG,&data,1);
#endif
//set bass management
//ddx_set_BassManagement();
//limiter selection: channel 1,2,3,4,5 select limiter 1
//channel 6 select limiter 2
ddx_ch7_limiterSel(0x01);//unmark by xyy 2004-4-29
ddx_ch4_limiterSel(0x01);
ddx_ch5_limiterSel(0x01);
ddx_ch2_limiterSel(0x01);
ddx_ch1_limiterSel(0x01);
ddx_ch6_limiterSel(0x02);
//set limiter 1,2 Attack Rate and Release Rate
ddx_setL1CRrates(0xa4);
ddx_setL2CRrates(0xf7);
//set limiter 1,2 Attack Threshold and Release Threshold
ddx_setL1CRthreshold(0x76);
ddx_setL2CRthreshold(0x76);
// write_reg_bit(0x30,
// BYTE data = 0x00;
// WriteToI2c(DDX8K_ADDR,0x03,&data,1);
//unmute all channels
// ddx_enableAM_mode();
/* NOP;
ddx_masterMute(0);
NOP;
ddx_enableEPAD();
*/
}
void ddx_ampvol_func_left(void);
void ddx_ampvol_func_right(void);
void ddx_ampvol_func_up(void);
void ddx_ampvol_func_down(void);
void ddx_volume_adjust(UINT32 key)
{
switch(key)
{
case IRC_UP:
ddx_ampvol_func_up();
break;
case IRC_DOWN:
ddx_ampvol_func_down();
break;
case IRC_LEFT:
ddx_ampvol_func_left();
break;
case IRC_RIGHT:
ddx_ampvol_func_right();
break;
}
}
/*****************************************
/Function: ddx_Set_EQ()
/Description: Set coefficient values of biquads for preset EQ settings.
/Creator: xulf
/Date: 2003-12-27
****************************************/
#ifdef AMP_SUPPORT_EQ
void ddx_Set_EQ(BYTE EQtype)
{
coef_factor biquad_coef;
// ddx_disableEPAD(); //EAPD
ddx_masterMute(1); //mute all channels
switch(EQtype)
{
case NONE:
//set the channel pre-scale.
ddx_writeCoefVal(0xc8,0xe36809); //channel 1
biquad_coef.b2 = 0x000000;
biquad_coef.b0 = 0x3fffff;
biquad_coef.a2 = 0x000000;
biquad_coef.a1 = 0x000000;
biquad_coef.b1 = 0x000000;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case ROCK:
ddx_writeCoefVal(0xc8,0xaf3cc5); //channel 1
biquad_coef.b2 = 0x7fcf05;
biquad_coef.b0 = 0x40058a;
biquad_coef.a2 = 0x8025e6;
biquad_coef.a1 = 0x7fed02;
biquad_coef.b1 = 0x8012fe;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7fd80a;
biquad_coef.b0 = 0x4006a3;
biquad_coef.a2 = 0x801aaf;
biquad_coef.a1 = 0x7ff28c;
biquad_coef.b1 = 0x800d74;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x7ead9f;
biquad_coef.b0 = 0x3fc7c8;
biquad_coef.a2 = 0x81c2d0;
biquad_coef.a1 = 0x7f1d06;
biquad_coef.b1 = 0x80e2fa;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x5d3dab;
biquad_coef.b0 = 0x46a5ae;
biquad_coef.a2 = 0x9576f8;
biquad_coef.a1 = 0x714597;
biquad_coef.b1 = 0x8eba69;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case POP:
ddx_writeCoefVal(0xc8,0xdb759b); //channel 1
biquad_coef.b2 = 0x7fe781;
biquad_coef.b0 = 0x3ffd3a;
biquad_coef.a2 = 0x801e09;
biquad_coef.a1 = 0x7ff0f8;
biquad_coef.b1 = 0x800f08;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7cc19b;
biquad_coef.b0 = 0x40e89e;
biquad_coef.a2 = 0x816d29;
biquad_coef.a1 = 0x7f40df;
biquad_coef.b1 = 0x80bf21;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x640c0d;
biquad_coef.b0 = 0x3cd666;
biquad_coef.a2 = 0xa24727;
biquad_coef.a1 = 0x6cbb1a;
biquad_coef.b1 = 0x9344e6;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x4274ad;
biquad_coef.b0 = 0x37613b;
biquad_coef.a2 = 0xcec8dd;
biquad_coef.a1 = 0x4cbc8c;
biquad_coef.b1 = 0xb34374;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case PARTY:
ddx_writeCoefVal(0xc8,0xe4a917); //channel 1
biquad_coef.b2 = 0x7fc83b;
biquad_coef.b0 = 0x400e7c;
biquad_coef.a2 = 0x801acd;
biquad_coef.a1 = 0x7ff297;
biquad_coef.b1 = 0x800d69;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7f4db3;
biquad_coef.b0 = 0x402e50;
biquad_coef.a2 = 0x8055ad;
biquad_coef.a1 = 0x7fd50c;
biquad_coef.b1 = 0x802af4;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x7908a0;
biquad_coef.b0 = 0x412849;
biquad_coef.a2 = 0x84a6cc;
biquad_coef.a1 = 0x7d8082;
biquad_coef.b1 = 0x827f7e;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x2688b9;
biquad_coef.b0 = 0x4edd22;
biquad_coef.a2 = 0xbbbd01;
biquad_coef.a1 = 0x4dda39;
biquad_coef.b1 = 0xb225c7;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case DANCE:
ddx_writeCoefVal(0xc8,0xddef46); //channel 1
biquad_coef.b2 = 0x7fd0f2;
biquad_coef.b0 = 0x400a20;
biquad_coef.a2 = 0x801acd;
biquad_coef.a1 = 0x7ff297;
biquad_coef.b1 = 0x800d69;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7f2132;
biquad_coef.b0 = 0x4039df;
biquad_coef.a2 = 0x806b0f;
biquad_coef.a1 = 0x7fca4b;
biquad_coef.b1 = 0x8035b5;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x7a469f;
biquad_coef.b0 = 0x40cd3f;
biquad_coef.a2 = 0x841ee2;
biquad_coef.a1 = 0x7ddf4c;
biquad_coef.b1 = 0x8220b4;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x2ca6df;
biquad_coef.b0 = 0x4dd8f0;
biquad_coef.a2 = 0xb7a741;
biquad_coef.a1 = 0x534a84;
biquad_coef.b1 = 0xacb57c;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case HARD:
ddx_writeCoefVal(0xc8,0xdfd91e); //channel 1
biquad_coef.b2 = 0x7fdeb7;
biquad_coef.b0 = 0x400729;
biquad_coef.a2 = 0x8012f5;
biquad_coef.a1 = 0x7ff683;
biquad_coef.b1 = 0x80097d;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7fbd74;
biquad_coef.b0 = 0x400e52;
biquad_coef.a2 = 0x8025e6;
biquad_coef.a1 = 0x7fed02;
biquad_coef.b1 = 0x8012fe;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x007c0c;
biquad_coef.b0 = 0x662860;
biquad_coef.a2 = 0xb33334;
biquad_coef.a1 = 0x58ae56;
biquad_coef.b1 = 0xa751aa;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x000000;
biquad_coef.b0 = 0x3fffff;
biquad_coef.a2 = 0x000000;
biquad_coef.a1 = 0x000000;
biquad_coef.b1 = 0x000000;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case CLASSIC:
ddx_writeCoefVal(0xc8,0xaf3cc5); //channel 1
biquad_coef.b2 = 0x7f4977;
biquad_coef.b0 = 0x400f9b;
biquad_coef.a2 = 0x809753;
biquad_coef.a1 = 0x7fb3a3;
biquad_coef.b1 = 0x804c5d;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7b9d6f;
biquad_coef.b0 = 0x40ba80;
biquad_coef.a2 = 0x82ed90;
biquad_coef.a1 = 0x7e77e0;
biquad_coef.b1 = 0x818820;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x4e4a5f;
biquad_coef.b0 = 0x459fbc;
biquad_coef.a2 = 0xa67628;
biquad_coef.a1 = 0x5e3269;
biquad_coef.b1 = 0xa1cd97;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x000000;
biquad_coef.b0 = 0x3fffff;
biquad_coef.a2 = 0x000000;
biquad_coef.a1 = 0x000000;
biquad_coef.b1 = 0x000000;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
case SOFT:
ddx_writeCoefVal(0xc8,0xd77b6); //channel 1
biquad_coef.b2 = 0x7fdd5d;
biquad_coef.b0 = 0x4003eb;
biquad_coef.a2 = 0x801acd;
biquad_coef.a1 = 0x7ff297;
biquad_coef.b1 = 0x800d69;
ddx_writeCoefValSets(0x05,biquad_coef); //channel 1 biquad2
biquad_coef.b2 = 0x7fa8c6;
biquad_coef.b0 = 0x4009de;
biquad_coef.a2 = 0x80437d;
biquad_coef.a1 = 0x7fde2f;
biquad_coef.b1 = 0x8021d1;
ddx_writeCoefValSets(0x0a,biquad_coef); //channel 1 biquad3
biquad_coef.b2 = 0x7d21e7;
biquad_coef.b0 = 0x3f992d;
biquad_coef.a2 = 0x83abbd;
biquad_coef.a1 = 0x7e25ce;
biquad_coef.b1 = 0x81da32;
ddx_writeCoefValSets(0x0f,biquad_coef); //channel 1 biquad4
biquad_coef.b2 = 0x157218;
biquad_coef.b0 = 0x5bad59;
biquad_coef.a2 = 0xb33334;
biquad_coef.a1 = 0x58ae56;
biquad_coef.b1 = 0xa751aa;
ddx_writeCoefValSets(0x14,biquad_coef); //channel 1 biquad5
//each channel uses channel 1 coefficient values.
write_reg_bit(CONFIGREG_D,7,1);
break;
default:
}
// ddx_enableEPAD(); //unEAPD
ddx_masterMute(0); //demute all channels
}
#endif
/******************************************
/Function: ddx_TunerOutput_VSS()
/description: Specific stereo to "virtual 5.1 effect"
setting for tuner input mode
/creator: xulf
/date: 2003-12-24
*****************************************/
void ddx_TunerOutput_VSS(void)
{
BYTE data;
coef_factor bass_coef;
ddx_disableEPAD(); //EAPD
ddx_masterMute(1); //mute all channels
//disable bass management mode
ddx_disable_BassManagement();
//enable adjacent channel-mixing mode
write_reg_bit(CONFIGREG_E,0,1);
//SDI_12-->LT/RT; SDI_34-->0; SDI_56-->0; SDI_78-->0
//7 5 4 2 1 6-->FL FR VirtualCE VirtualSL VirtualSR VirtualSW
data = 0x01;
WriteToI2c(DDX8K_ADDR,C12MAP_REG,&data,1);
data = 0x01;
WriteToI2c(DDX8K_ADDR,C34MAP_REG,&data,1);
data = 0x01;
WriteToI2c(DDX8K_ADDR,C56MAP_REG,&data,1);
data = 0x00;
WriteToI2c(DDX8K_ADDR,C78MAP_REG,&data,1);
//set pre-scale factor
ddx_writeCoefVal(0xd0,0x000000); //X-Full attenuation
ddx_writeCoefVal(0xd1,0x7FFFFF); //0dB
ddx_writeCoefVal(0xd2,0x400000); //-6dB
ddx_writeCoefVal(0xd3,0x400000);
ddx_writeCoefVal(0xd4,0x400000);
ddx_writeCoefVal(0xd5,0x400000);
ddx_writeCoefVal(0xd6,0x000000);
//set channel 7,5,4,2,1 filter coefficient
bass_coef.b2 = HPF_COEF_B2;
bass_coef.b0 = HPF_COEF_B0;
bass_coef.a2 = HPF_COEF_A2;
bass_coef.a1 = HPF_COEF_A1;
bass_coef.b1 = HPF_COEF_B1;
ddx_writeCoefValSets(0x96,bass_coef); //channel 7 xulf 2003-12-15
ddx_writeCoefValSets(0x64,bass_coef); //channel 5
ddx_writeCoefValSets(0x4b,bass_coef); //channel 4
ddx_writeCoefValSets(0x19,bass_coef); //channel 2
ddx_writeCoefValSets(0x00,bass_coef); //channel 1
//set channel 6 filter coefficient
bass_coef.b2 = LPF_COEF_B2;
bass_coef.b0 = LPF_COEF_B0;
bass_coef.a2 = LPF_COEF_A2;
bass_coef.a1 = LPF_COEF_A1;
bass_coef.b1 = LPF_COEF_B1;
ddx_writeCoefValSets(0x7d,bass_coef);
ddx_enableEPAD(); //unEAPD
ddx_masterMute(0); //demute all channels
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -