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

📄 rtcodeccomm.cpp

📁 freesacle mx21下的声卡alc5620的驱动程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		Enable_Main_Spatial(TRUE);		//set parameter a1 support 48K			if(KHZ48_000==m_WaveOutSampleRate)		{							bRetVal=WriteCodecRegMask(RT_PSEDUEO_SPATIAL_CTRL,APF_FOR_48K,APF_MASK);		}		else if(KHZ44_100==m_WaveOutSampleRate)//set parameter a1 support 44.1K			{			bRetVal=WriteCodecRegMask(RT_PSEDUEO_SPATIAL_CTRL,APF_FOR_44_1K,APF_MASK);		}		else		{			//set parameter a1 support 32k and lower				bRetVal=WriteCodecRegMask(RT_PSEDUEO_SPATIAL_CTRL,APF_FOR_32K,APF_MASK);		}			//Enable All Pass Filter 		bRetVal=WriteCodecRegMask(RT_PSEDUEO_SPATIAL_CTRL,ALL_PASS_FILTER_EN,ALL_PASS_FILTER_EN);	}	else	{		//Disable All Pass Filter		bRetVal=WriteCodecRegMask(RT_PSEDUEO_SPATIAL_CTRL,0,ALL_PASS_FILTER_EN);	}	return bRetVal;}//*****************************************************************************////function:Enable/Disable ADC input source control////*****************************************************************************BOOL RT_CodecComm::Enable_ADC_Input_Source(ADC_INPUT_MIXER_CTRL ADC_Input_Sour,BOOL Enable){	BOOL bRetVal=FALSE;		if(Enable)	{		//Enable ADC source 		bRetVal=WriteCodecRegMask(RT_ADC_RECORD_MIXER,0,ADC_Input_Sour);	}	else	{		//Disable ADC source				bRetVal=WriteCodecRegMask(RT_ADC_RECORD_MIXER,ADC_Input_Sour,ADC_Input_Sour);	}	return bRetVal;}//*****************************************************************************////function:Enable/Disable Auto Volume Control function////*****************************************************************************BOOL RT_CodecComm::EnableAVC(BOOL Enable_AVC){	BOOL bRetVal=FALSE;		if(Enable_AVC)	{					//enable AVC target select,if use voice interface,please use one channel 		WriteCodecRegMask(RT_MISC_CTRL,AVC_TARTGET_SEL_BOTH,AVC_TARTGET_SEL_MASK); 		//Enable AVC function		bRetVal=WriteCodecAdvanceMask(AVC_CTRL_REG0,ENABLE_AVC_GAIN_CTRL,ENABLE_AVC_GAIN_CTRL);			}	else	{		//Disable AVC function		bRetVal=WriteCodecAdvanceMask(AVC_CTRL_REG0,0,ENABLE_AVC_GAIN_CTRL);	}	return bRetVal;}//*****************************************************************************////function:Config Vmid Control function////			 AVDD  		HPVDD 	SPKVDD	SPK AB		SPK D		HP		//case 1	 3.3V		3.3V	3.3V	1.00 Vdd	1.00 Vdd	1.00 Vdd	//case 2	 3.3V		3.3V	4.2V	1.25 Vdd	1.25 Vdd	1.00 Vdd//case 3	 2.5V		3.3V	3.3V	1.25 Vdd	1.25 Vdd	1.25 Vdd//case 4	 2.5V		3.3V	4.2V	1.75 Vdd	1.75 Vdd	1.25 Vdd////*****************************************************************************BOOL RT_CodecComm::ConfigVmidOutput(BYTE Vmid_CaseType){	BOOL bRetVal=FALSE;	switch(Vmid_CaseType)	{		case 1:			bRetVal=WriteCodecRegMask(										RT_GEN_CTRL_REG1,										(GP_HP_AMP_CTRL_RATIO_100	 |										 GP_SPK_D_AMP_CTRL_RATIO_100 |										 GP_SPK_AB_AMP_CTRL_RATIO_100)											,										(GP_HP_AMP_CTRL_MASK		|										GP_SPK_D_AMP_CTRL_MASK		|										GP_SPK_AB_AMP_CTRL_MASK)									 );			break;		case 2:			bRetVal=WriteCodecRegMask(										RT_GEN_CTRL_REG1,										(GP_HP_AMP_CTRL_RATIO_100	 |										 GP_SPK_D_AMP_CTRL_RATIO_125 |										 GP_SPK_AB_AMP_CTRL_RATIO_125)											,										(GP_HP_AMP_CTRL_MASK		|										GP_SPK_D_AMP_CTRL_MASK		|										GP_SPK_AB_AMP_CTRL_MASK)									 );			break;		case 3:			bRetVal=WriteCodecRegMask(										RT_GEN_CTRL_REG1,										(GP_HP_AMP_CTRL_RATIO_125	 |										 GP_SPK_D_AMP_CTRL_RATIO_125 |										 GP_SPK_AB_AMP_CTRL_RATIO_125)											,										(GP_HP_AMP_CTRL_MASK		|										GP_SPK_D_AMP_CTRL_MASK		|										GP_SPK_AB_AMP_CTRL_MASK)									 );			break;		case 4:			bRetVal=WriteCodecRegMask(										RT_GEN_CTRL_REG1,										(GP_HP_AMP_CTRL_RATIO_125	 |										 GP_SPK_D_AMP_CTRL_RATIO_175 |										 GP_SPK_AB_AMP_CTRL_RATIO_175)											,										(GP_HP_AMP_CTRL_MASK		|										GP_SPK_D_AMP_CTRL_MASK		|										GP_SPK_AB_AMP_CTRL_MASK)									 );			break;		default:			return  FALSE;	}	return bRetVal;}//*****************************************************************************////function:Config Microphone BIAS function////*****************************************************************************BOOL RT_CodecComm::ConfigMicBias(BYTE Mic,BYTE MicBiasCtrl){	BOOL bRetVal=FALSE;	if(Mic==MIC1)	{		if(MicBiasCtrl==MIC_BIAS_90_PRECNET_AVDD)		  {				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BIAS_VOLT_CTRL_90P,MIC1_BIAS_VOLT_CTRL_MASK);		  }		 else if(MicBiasCtrl==MIC_BIAS_75_PRECNET_AVDD)		  {				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BIAS_VOLT_CTRL_75P,MIC1_BIAS_VOLT_CTRL_MASK);		  }				}	else if(Mic==MIC2)	{		if(MicBiasCtrl==MIC_BIAS_90_PRECNET_AVDD)		  {				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BIAS_VOLT_CTRL_90P,MIC2_BIAS_VOLT_CTRL_MASK);		  }		 else if(MicBiasCtrl==MIC_BIAS_75_PRECNET_AVDD)		  {				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BIAS_VOLT_CTRL_75P,MIC2_BIAS_VOLT_CTRL_MASK);		  }			}		return 	bRetVal;}//*****************************************************************************//function:Enable the Voice PCM interface Path//*****************************************************************************BOOL RT_CodecComm::ConfigPcmVoicePath(BOOL bEnableVoicePath,MODE_SEL mode){	BOOL bRetVal=FALSE;	if(bEnableVoicePath)	 {		switch(mode)				{			case MASTER_MODE_A:	//8kHz sampling rate,32 bits PCM and master mode,MCLK=24.576MHz.				//Enable GPIO 1,3,4,5 to voice interface				//Set I2S to Master mode				//Set voice i2s VBCLK Polarity to Invert				//Set PCM mode to Mode A				//Set Data length to 16 bit				//set Data Fomrat to PCM format				bRetVal=WriteCodecRegMask(RT_EXTEND_SDP_CTRL,										  (EXT_I2S_FUNC_ENABLE  	|																		   EXT_I2S_BCLK_POLARITY	|										   EXT_I2S_DL_16  	   		|													   EXT_I2S_DF_PCM),								  			(EXT_I2S_FUNC_ENABLE 	|									   			EXT_I2S_MODE_SEL    	|						   		   			EXT_I2S_BCLK_POLARITY	|				    			   		   EXT_I2S_PCM_MODE    		|									   		   EXT_I2S_DL_MASK 	   		|						   				   EXT_I2S_DF_MASK)												);				if(!bRetVal)					goto exit;					//Set Voice MCLK from MCLK input				//set Voice SYSCLK from  MCLK				//set voice WCLK select divide 32				//set voice SCLK select divide 3 and 32 				bRetVal=WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL1,										  (VOICE_MCLK_SEL_MCLK_INPUT  	|												VOICE_SYSCLK_SEL_MCLK		|																				   VOICE_WCLK_DIV_32			|										   VOICE_SCLK_DIV1_3   			|									   					VOICE_SCLK_DIV2_32),										  (VOICE_MCLK_SEL_MASK		 	|											   VOICE_SYSCLK_SEL_MASK   		|						   				   VOICE_WCLK_DIV_MASK			|						   				   VOICE_SCLK_DIV1_MASK    		|							   				   VOICE_SCLK_DIV2_MASK)											);				if(!bRetVal)					goto exit;				//set Voice filter clock source from MCLK				//set Voice AD/DA filter select 64X				//set Voice DA/AD Sigma_Delta_clock source from DA Filter				//set Voice CLK filter Div 3 and 16				WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL2,								  (VOICE_FILTER_CLK_F_MCLK  	|																   VOICE_AD_DA_FILTER_SEL_64X	|						   		   VOICE_AD_DA_SIG_CLK_F_DA_F	|								   		   VOICE_CLK_FILTER_DIV2_3		|						   		   VOICE_CLK_FILTER_DIV1_16),						  		  (VOICE_FILTER_CLK_F_MASK	 	|							   		   VOICE_AD_DA_FILTER_SEL_MASK	|						   		   VOICE_AD_DA_SIG_CLK_F_DA_MASK|						   		   VOICE_CLK_FILTER_DIV2_MASK	|							   		   VOICE_CLK_FILTER_DIV1_MASK)										);				if(!bRetVal)					goto exit;						break;					case MASTER_MODE_B://8018.2Hz sampling rate,32 bits PCM and master mode,MCLK=22.5792MHz.				//Enable GPIO 1,3,4,5 to voice interface				//Set I2S to Master mode				//Set voice i2s VBCLK Polarity to Invert				//Set PCM mode to Mode A				//Set Data length to 16 bit				//set Data Fomrat to PCM format				bRetVal=WriteCodecRegMask(RT_EXTEND_SDP_CTRL,										  (EXT_I2S_FUNC_ENABLE  	|																		   EXT_I2S_BCLK_POLARITY	|										   EXT_I2S_DL_16  	   		|													   EXT_I2S_DF_PCM),								  			(EXT_I2S_FUNC_ENABLE 	|									   			EXT_I2S_MODE_SEL    	|						   		   			EXT_I2S_BCLK_POLARITY	|				    			   		   EXT_I2S_PCM_MODE    		|									   		   EXT_I2S_DL_MASK 	   		|						   				   EXT_I2S_DF_MASK)												);				if(!bRetVal)					goto exit;					//Set Voice MCLK from MCLK input				//set Voice SYSCLK from  MCLK				//set voice WCLK select divide 32				//set voice SCLK select divide 11 and 8 				bRetVal=WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL1,										  (VOICE_MCLK_SEL_MCLK_INPUT  	|												VOICE_SYSCLK_SEL_MCLK		|																				   VOICE_WCLK_DIV_32			|										   VOICE_SCLK_DIV1_11  			|									   					VOICE_SCLK_DIV2_8),										  (VOICE_MCLK_SEL_MASK		 	|											   VOICE_SYSCLK_SEL_MASK   		|						   				   VOICE_WCLK_DIV_MASK			|						   				   VOICE_SCLK_DIV1_MASK    		|							   				   VOICE_SCLK_DIV2_MASK)											);				if(!bRetVal)					goto exit;				//set Voice filter clock source from MCLK				//set Voice AD/DA filter select 64X				//set Voice DA/AD Sigma_Delta_clock source from DA Filter				//set Voice CLK filter Div 11 and 4				WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL2,								  (VOICE_FILTER_CLK_F_MCLK  	|																   VOICE_AD_DA_FILTER_SEL_64X	|						   		   VOICE_AD_DA_SIG_CLK_F_DA_F	|								   		   VOICE_CLK_FILTER_DIV2_11		|						   		   VOICE_CLK_FILTER_DIV1_4),						  		  (VOICE_FILTER_CLK_F_MASK	 	|							   		   VOICE_AD_DA_FILTER_SEL_MASK	|						   		   VOICE_AD_DA_SIG_CLK_F_DA_MASK|						   		   VOICE_CLK_FILTER_DIV2_MASK	|							   		   VOICE_CLK_FILTER_DIV1_MASK)										);				if(!bRetVal)					goto exit;						break;			 			case SLAVE_MODE: //8KHz sample rate,32bit PCM format,slave mode with 256fs EXTCLK				//Enable GPIO 1,3,4,5 to voice interface				//Set I2S to slave mode				//Set voice i2s VBCLK Polarity to Invert				//Set PCM mode to Mode A				//Set Data length to 16 bit				//set Data Fomrat to PCM format				bRetVal=WriteCodecRegMask(RT_EXTEND_SDP_CTRL,										  (EXT_I2S_FUNC_ENABLE  	|										   EXT_I2S_MODE_SEL    		|																		   EXT_I2S_BCLK_POLARITY	|										   EXT_I2S_DL_16  	   		|													   EXT_I2S_DF_PCM),								  		   (EXT_I2S_FUNC_ENABLE	 	|									   			EXT_I2S_MODE_SEL   		|						   		   			EXT_I2S_BCLK_POLARITY	|				    			   		   EXT_I2S_PCM_MODE    		|									   		   EXT_I2S_DL_MASK 	   		|						   				   EXT_I2S_DF_MASK)												);				if(!bRetVal)					goto exit;					//Set Voice MCLK from MCLK input				//set Voice SYSCLK from  EXTCLK				bRetVal=WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL1,										  (VOICE_MCLK_SEL_MCLK_INPUT  	|																			VOICE_SYSCLK_SEL_EXTCLK											),										  (VOICE_MCLK_SEL_MASK		 	|											   VOICE_SYSCLK_SEL_MASK   													)											);				if(!bRetVal)					goto exit;				//set Voice filter clock source from MCLK				//set Voice AD/DA filter select 64X				//set Voice DA/AD Sigma_Delta_clock source from DA Filter				//set Voice CLK filter Div 2 and 2				bRetVal=WriteCodecRegMask(RT_VOICE_DAC_PCMCLK_CTRL2,										  (VOICE_FILTER_CLK_F_MCLK  	|																		   VOICE_AD_DA_FILTER_SEL_64X	|						   				   VOICE_AD_DA_SIG_CLK_F_DA_F	|								   				   VOICE_CLK_FILTER_DIV2_2		|						   				   VOICE_CLK_FILTER_DIV1_2),						  				  (VOICE_FILTER_CLK_F_MASK	 	|							   				   VOICE_AD_DA_FILTER_SEL_MASK	|						   				   VOICE_AD_DA_SIG_CLK_F_DA_MASK|						   				   VOICE_CLK_FILTER_DIV2_MASK	|							   				   VOICE_CLK_FILTER_DIV1_MASK)											);				if(!bRetVal)					goto exit;				break;			default:				//do nothing						break;			}		} 		else		{			//Disable Voice PCM interface				WriteCodecRegMask(RT_EXTEND_SDP_CTRL,0,EXT_I2S_FUNC_ENABLE);		}	exit:		return bRetVal;}//*****************************************************************************//function:Enable the PLL function//*****************************************************************************BOOL RT_CodecComm::EnablePLLPath(BOOL bEnablePLL){		unsigned short int usRegVal;	BOOL bRetVal=FALSE;	if(bEnablePLL)	  {		//48K,MCLK=13MHz,Fout=24.555MHz,N=66,M=7,K=2		usRegVal=PLL_CTRL_M_VAL(7) | PLL_CTRL_K_VAL(2) |PLL_CTRL_N_VAL(66);		bRetVal=ShadowWriteCodec(RT_PLL_CTRL,usRegVal,CodecDevId);		//codec clock source from PLL output				bRetVal=WriteCodecRegMask(RT_GEN_CTRL_REG1,GP_CLK_FROM_PLL,GP_CLK_FROM_PLL);				//Disable PLL Power				bRetVal=WriteCodecRegMask(RT_PWR_MANAG_ADD2,0,PWR_PLL);			//Enable PLL Power		bRetVal=WriteCodecRegMask(RT_PWR_MANAG_ADD2,PWR_PLL,PWR_PLL);		  }	else	  {		//codec clock source from MCLK output				bRetVal=WriteCodecRegMask(RT_GEN_CTRL_REG1,0,GP_CLK_FROM_PLL);				//Disable PLL Power		bRetVal=WriteCodecRegMask(RT_PWR_MANAG_ADD2,0,PWR_PLL);		  }		return bRetVal;}//*****************************************************************************////function:Config Microphone Boost function////*****************************************************************************BOOL RT_CodecComm::ConfigMicBoost(BYTE Mic,MIC_BOOST_TYPE BoostType){	BOOL bRetVal=FALSE;	if(Mic==MIC1)	{		switch(BoostType)		{			//Bypass mic1 boost			case BOOST_BYPASS:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BOOST_CONTROL_BYPASS,MIC1_BOOST_CONTROL_MASK);			break;			//Set mic1 boost to 20DB				case BOOST_20DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BOOST_CONTROL_20DB,MIC1_BOOST_CONTROL_MASK);			break;			//Set mic1 boost to 30DB			case BOOST_30DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BOOST_CONTROL_30DB,MIC1_BOOST_CONTROL_MASK);			break;			//Set mic1 boost to 40DB			case BOOST_40DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC1_BOOST_CONTROL_40DB,MIC1_BOOST_CONTROL_MASK);				break;			default:				bRetVal=FALSE;						}	}	else if(Mic==MIC2)	{		switch(BoostType)		{			//Bypass mic2 boost			case BOOST_BYPASS:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BOOST_CONTROL_BYPASS,MIC2_BOOST_CONTROL_MASK);			break;			//Set mic2 boost to 20DB			case BOOST_20DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BOOST_CONTROL_20DB,MIC2_BOOST_CONTROL_MASK);			break;			//Set mic2 boost to 30DB			case BOOST_30DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BOOST_CONTROL_30DB,MIC2_BOOST_CONTROL_MASK);			break;			//Set mic2 boost to 40DB			case BOOST_40DB:				bRetVal=WriteCodecRegMask(RT_MICROPHONE_CTRL,MIC2_BOOST_CONTROL_40DB,MIC2_BOOST_CONTROL_MASK);

⌨️ 快捷键说明

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