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

📄 ddx8000.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
	}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 + -