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

📄 rt5621.cpp

📁 realtek562x系列驱动源码。wince
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		//Disable Main Spatial 
		bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,SPATIAL_CTRL_EN);	
	}

	return bRetVal;
}
//*****************************************************************************
//
//Function:Enable/Disable and setting 3D spatial control function(use this function,enable Main Spatial function first)
//
//*****************************************************************************

BOOL RT5621_Codec::Set_3D_Func(SET_3D_PARA_MODE S_3d_para,BYTE para)
{
	BOOL bRetVal=FALSE;
	
	switch(S_3d_para)
	{
		case SET_3D_L_GAIN:

			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<9),GAIN_3D_PARA_L_MASK);//set 3D left gain

		break;

		case SET_3D_R_GAIN:

			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<6),GAIN_3D_PARA_R_MASK);//set 3D right gain

		break;

		case SET_3D_L_RATIO:	

			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<4),RATIO_3D_L_MASK);	//set 3D left ratio

		break;

		case SET_3D_R_RATIO:

			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<2),RATIO_3D_R_MASK);	//set 3D right ratio

		break;		

		case SET_3D_ENABLE:

			Enable_Main_Spatial(TRUE);
			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,STEREO_EXPENSION_EN,STEREO_EXPENSION_EN);	//enable 3D spatial

		break;

		case SET_3D_DISABLE:

			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,STEREO_EXPENSION_EN);				//disable 3D spatial

		break;

		default:
			return FALSE;
	}

	return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable Pseudio Stereo function(use this function,enable Main Spatial function first)
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_Pseudo_Stereo(BOOL Enable_Pseudo_Stereo)
{
	BOOL bRetVal=FALSE;

	if(Enable_Pseudo_Stereo)
	{
		Enable_Main_Spatial(TRUE);
		Enable_All_Pass_Filter(TRUE);
		//Enable Pseudio stereo 
		bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,PSEUDO_STEREO_EN,PSEUDO_STEREO_EN);
	}
	else
	{
		Enable_All_Pass_Filter(FALSE);	
		//Disable Pseudio stereo
		bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,PSEUDO_STEREO_EN);
		
	}

	return bRetVal;
}

//*****************************************************************************
//
//function:Enable/Disable All Pass Filter function(use this function,enable Main Spatial function first)
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_All_Pass_Filter(BOOL Enable_APF)
{
	BOOL bRetVal=FALSE;
	
	if(Enable_APF)
	{
		Enable_Main_Spatial(TRUE);

		//set parameter a1 support 48K	
		if(KHZ48_000==m_WaveOutSampleRate)
		{				
			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_48K,APF_MASK);
		}
		else if(KHZ44_100==m_WaveOutSampleRate)//set parameter a1 support 44.1K	
		{
			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_44_1K,APF_MASK);
		}
		else
		{
			//set parameter a1 support 32k and lower	
			bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_32K,APF_MASK);
		}	

		//Enable All Pass Filter 
		bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,ALL_PASS_FILTER_EN,ALL_PASS_FILTER_EN);
	}
	else
	{
		//Disable All Pass Filter
		bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,ALL_PASS_FILTER_EN);
	}

	return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable ADC input source control
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_ADC_Input_Source(unsigned short int ADC_Input_Sour,BOOL Enable)
{
	BOOL bRetVal=FALSE;
	
	if(Enable)
	{
		//Enable ADC source 
		bRetVal=WriteCodecRegMask(RT5621_ADC_REC_MIXER,0,ADC_Input_Sour);
	}
	else
	{
		//Disable ADC source		
		bRetVal=WriteCodecRegMask(RT5621_ADC_REC_MIXER,ADC_Input_Sour,ADC_Input_Sour);
	}

	return bRetVal;
}

//*****************************************************************************
//
//function:Enable/Disable Auto Volume Control function
//
//*****************************************************************************
BOOL RT5621_Codec::EnableAVC(BOOL Enable_AVC)
{
	BOOL bRetVal=FALSE;
	
	if(Enable_AVC)
	{			
		//enable AVC target select
		WriteCodecRegMask(RT5621_AVC_CTRL,AVC_TARTGET_SEL_L,AVC_TARTGET_SEL_MASK); 

		//Enable AVC function
		bRetVal=WriteCodecRegMask(RT5621_AVC_CTRL,AVC_ENABLE,AVC_ENABLE);
		
	}
	else
	{
		//Disable AVC function
		bRetVal=WriteCodecRegMask(RT5621_AVC_CTRL,0,AVC_ENABLE);
	}

	return bRetVal;
}
//*****************************************************************************
//
//function:Config SPEAKER AB&D Vmid ratio Control function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigVmidOutput(BYTE SPK_Type,unsigned short int VMID_RATIO)
{

	BOOL bRetVal=FALSE;

	switch(SPK_Type)
	{
		case SPK_CLASS_AB:
			bRetVal=WriteCodecRegMask(
										RT5621_ADD_CTRL_REG,
										VMID_RATIO,
										SPK_AB_AMP_CTRL_MASK
									 );
			break;

		case SPK_CLASS_D:
			bRetVal=WriteCodecRegMask(
										RT5621_ADD_CTRL_REG,
										VMID_RATIO,
										SPK_D_AMP_CTRL_MASK
									 );
			break;

		default:
			return  FALSE;
	}
	return bRetVal;
}

//*****************************************************************************
//
//function:Config Microphone BIAS function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigMicBias(BYTE Mic,BYTE MicBiasCtrl)
{
	BOOL bRetVal=FALSE;

	if(Mic==MIC1)
	{
		if(MicBiasCtrl==MIC_BIAS_90_PRECNET_AVDD)//90% of AVDD
		  {	
			bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MICBIAS_VOLT_CTRL_90P,MICBIAS_VOLT_CTRL_MASK);
		  }
		 else if(MicBiasCtrl==MIC_BIAS_75_PRECNET_AVDD)//75% of AVDD
		  {	
			bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MICBIAS_VOLT_CTRL_75P,MICBIAS_VOLT_CTRL_MASK);
		  }			
	}

	
	return 	bRetVal;
}

//*****************************************************************************
//function:Enable the PLL function
//*****************************************************************************
BOOL RT5621_Codec::EnablePLLPath(BOOL bEnablePLL,unsigned short int K,unsigned short int M,unsigned short int N)
{	
	unsigned short int usRegVal;
	BOOL bRetVal=FALSE;

	if(bEnablePLL)
	  {		
		bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF,PWR_VREF);	//power on Vref for All analog circuit
		
		bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS);	//power on main bias	
	
		usRegVal=PLL_CTRL_M_VAL(M) | PLL_CTRL_K_VAL(K) |PLL_CTRL_N_VAL(N);

		bRetVal=ShadowWriteCodec(RT5621_PLL_CTRL,usRegVal);

		//codec clock source from PLL output		
		bRetVal=WriteCodecRegMask(RT5621_GLOBAL_CLK_CTRL_REG,SYSCLK_SOUR_SEL_PLL,SYSCLK_SOUR_SEL_MASK);
		
		//Disable PLL Power		
		bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,0,PWR_PLL);	
		//Enable PLL Power
		bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_PLL,PWR_PLL);	

	  }
	else
	  {
		//codec clock source from MCLK output		
		bRetVal=WriteCodecRegMask(RT5621_GLOBAL_CLK_CTRL_REG,SYSCLK_SOUR_SEL_MCLK,SYSCLK_SOUR_SEL_MASK);		
		//Disable PLL Power
		bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,0,PWR_PLL);	
	  }	

	return bRetVal;
}
//*****************************************************************************
//
//function:Config Microphone Boost function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigMicBoost(BYTE Mic,MIC_BOOST_TYPE BoostType)
{
	BOOL bRetVal=FALSE;

	if(Mic==MIC1)
	{
		switch(BoostType)
		{
			//Bypass mic1 boost
			case BOOST_BYPASS:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_BYPASS,MIC1_BOOST_CTRL_MASK);

			break;
			//Set mic1 boost to 20DB	
			case BOOST_20DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_20DB,MIC1_BOOST_CTRL_MASK);

			break;
			//Set mic1 boost to 30DB
			case BOOST_30DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_30DB,MIC1_BOOST_CTRL_MASK);

			break;
			//Set mic1 boost to 40DB
			case BOOST_40DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_40DB,MIC1_BOOST_CTRL_MASK);	

			break;

			default:
				bRetVal=FALSE;
				
		}
	}
	else if(Mic==MIC2)
	{
		switch(BoostType)
		{
			//Bypass mic2 boost
			case BOOST_BYPASS:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_BYPASS,MIC2_BOOST_CTRL_MASK);

			break;
			//Set mic2 boost to 20DB
			case BOOST_20DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_20DB,MIC2_BOOST_CTRL_MASK);

			break;
			//Set mic2 boost to 30DB
			case BOOST_30DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_30DB,MIC2_BOOST_CTRL_MASK);

			break;
			//Set mic2 boost to 40DB
			case BOOST_40DB:

				bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_40DB,MIC2_BOOST_CTRL_MASK);

			break;

		  default:
			bRetVal=FALSE;
		}	
	}

	return 	bRetVal;
}

//*****************************************************************************
//
//function:Depop of HP Out
//
//*****************************************************************************
void RT5621_Codec::DepopForHP(DEPOP_MODE Depop_mode)
{

	 if(DEPOP_MODE1_HP)
	{		
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS);	//enable Main Bias
		WriteCodecRegMask(RT5621_MISC_CTRL,HP_DEPOP_MODE1_EN,HP_DEPOP_MODE1_EN); //Enable Depop Mode 1
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL); //Enable HP volume AMP

		WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF ,PWR_VREF ); //Enable Vref
		DelayMSTime(1500);//delay 1.5S
		
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD1,PWR_HP_AMP|PWR_HP_OUT,PWR_HP_AMP|PWR_HP_OUT); //Enable HP output buffer and HP AMP
		WriteCodecRegMask(RT5621_MISC_CTRL,0,HP_DEPOP_MODE1_EN); //Disable Depop Mode 1	
	}
	else if(DEPOP_MODE2_HP)
	{
		
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS);	//enable Main Bias
		WriteCodecRegMask(RT5621_MISC_CTRL,HP_DEPOP_MODE2_EN,HP_DEPOP_MODE2_EN); //Enable Depop Mode 2
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF,PWR_VREF); //Enable Vref
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL); //Enable HP volume AMP
		DelayMSTime(800);//delay 800 ms	
				
		WriteCodecRegMask(RT5621_PWR_MANAG_ADD1,PWR_HP_AMP|PWR_HP_OUT,PWR_HP_AMP|PWR_HP_OUT); //Enable HP output buffer and HP AMP		
		WriteCodecRegMask(RT5621_MISC_CTRL,0,HP_DEPOP_MODE2_EN); //Disable Depop Mode 2	
		
	}

}
//*****************************************************************************
//
//function AudioOutEnable:Mute/Unmute audio out channel
//							WavOutPath:output channel
//							Mute :Mute/Unmute output channel											
//
//*****************************************************************************
BOOL RT5621_Codec::AudioOutEnable(WAVOUT_PATH WavOutPath,BOOL Mute)
{
	BOOL RetVal=FALSE;	

	if(Mute)
	{
		switch(WavOutPath)
		{
			case RT_WAVOUT_PATH_ALL:

				RetVal=WriteCodecRegMask(RT5621_SPK_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE);	//Mute Speaker right/left channel
				RetVal=WriteCodecRegMask(RT5621_HP_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE);	//Mute headphone right/left channel
				RetVal=WriteCodecRegMask(RT5621_MONO_AUX_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE);	//Mute Aux/Mono right/left channel
				RetVal=WriteCodecRegMask(RT5621_STEREO_DAC_VOL,RT_M_HP_MIXER|RT_M_SPK_MIXER|RT_M_MONO_MIXER
															  ,RT_M_HP_MIXER|RT_M_SPK_MIXER|RT_M_MONO_MIXER);	//Mute DAC to HP,Speaker,Mono Mixer
		
			break;
		
			case RT_WAVOUT_PATH_HP:

⌨️ 快捷键说明

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