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

📄 audio_api1.c

📁 The driver of audio processor SGTV5830 音频处理芯片SGTV5830驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
							  wTemp);
}

void SGTV58xx_StereoModeAuto(BOOL bAutoSet)
{
	WORD wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__SET_VALUE;
	if(bAutoSet)
	{
		wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__DETECTED_VALUE;
	}
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
							  SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__GETMASK,
							  wTemp);
}

void SGTV58xx_StereoModeSet(ESGTV58xxStereoMode eStereoMode)
{
//	WORD wTemp;
	SGTV58xx_StereoModeAuto(_FALSE_);
// M2k60720 with LSZ {
	switch(eStereoMode)
	{
	case StereoMode_MONO:
		SGTV58xx_SetToChannelB(_FALSE_); // lsz 060713 
		SGTV58xx_ForcedToLangB(_FALSE_); // lsz 060713 
		SGTV58xx_NicamForceBackup(_TRUE_); // lsz 061109  (g_AudioInfo.bForceMono_SAP);
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
              break;
         case StereoMode_Nicam_MONO:
		SGTV58xx_SetToChannelB(_TRUE_); // lsz 060713 
		SGTV58xx_ForcedToLangB(_TRUE_); // lsz 060713 
		SGTV58xx_NicamForceBackup(_FALSE_); // lsz 061109 (g_AudioInfo.bForceMono_SAP);
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
                  break;
	case StereoMode_STEREO:
		SGTV58xx_SetToChannelB(_FALSE_); // lsz 060713
		SGTV58xx_ForcedToLangB(_FALSE_); // lsz 060713
#ifdef SUPPORT_NICAM
		SGTV58xx_NicamForceBackup(_FALSE_); // lsz 0607614
#endif
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__STEREO_VALUE);
		break;

	case StereoMode_SAP:
		SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP); // lsz 060713
		SGTV58xx_ForcedToLangB(g_AudioInfo.bForceMono_SAP); // lsz 060713
		// Tenny at 2k60915 {
#ifdef SUPPORT_NICAM
	     SGTV58xx_NicamForceBackup(_FALSE_); // lsz 0607614
#endif
		if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
			SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
									  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
									  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__STEREO_VALUE);
		else
			SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
									  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
									  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
		// Tenny at 2k60915 }
		break;
	case StereoMode_DUALA:
	case StereoMode_DUALB:
		if(eStereoMode == StereoMode_DUALA)
			SGTV58xx_SetToChannelB(_FALSE_);
		else
			SGTV58xx_SetToChannelB(_TRUE_);
#ifdef SUPPORT_NICAM
		SGTV58xx_NicamForceBackup(_FALSE_); // lsz 060714
#endif
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
								  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__DUAL_MONO_VALUE);
		break;
	}
}

void SGTV58xx_StereoModeConfig(void)
{

	Audio_ChannelConfig(_FALSE_);  //zenghw add 20061116


	if(g_AudioInfo.bStatusChanged)
	{
		g_AudioInfo.bStatusChanged = _FALSE_;
		g_AudioInfo.ucUserPreSelect = g_AudioInfo.ucStereoModeDetected;
			SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP);
#ifdef SUPPORT_NICAM
			SGTV58xx_NicamForceBackup(g_AudioInfo.bForceMono_SAP);
#endif
		SGTV58xx_StereoModeAuto(_TRUE_);

           // lsz 061128 
		if(( g_AudioInfo.ucStereoModeDetected==StereoMode_MONO)&&g_AudioInfo.bNicamLocked)
			{
			   g_AudioInfo.ucUserPreSelect=StereoMode_Nicam_MONO;
			}
		// lsz 061128 

//		SGTV58xx_StereoModeSet(g_AudioInfo.ucUserPreSelect);

	}
	if(g_AudioInfo.bUserChanged)
	{
		g_AudioInfo.bUserChanged = _FALSE_;

			if(g_AudioInfo.bSAPDetected)	// Just valid for BTSC
			{
				if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
				{
					if(g_AudioInfo.ucUserPreSelect == StereoMode_MONO)
					{
						g_AudioInfo.bForceMono_SAP = _TRUE_;
						g_AudioInfo.ucUserPreSelect = StereoMode_SAP;
					}
					else
					{
						g_AudioInfo.bForceMono_SAP = _FALSE_;
						g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
					}
				}
				else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
				{
					if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
					{
						g_AudioInfo.ucUserPreSelect = StereoMode_SAP;
						g_AudioInfo.bForceMono_SAP = _TRUE_;
					}
					else if(g_AudioInfo.ucUserPreSelect == StereoMode_SAP)
					{
						g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
						g_AudioInfo.bForceMono_SAP = _FALSE_;
					}
					else
					{
						g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
						g_AudioInfo.bForceMono_SAP = _FALSE_;
					}
				}
//				g_AudioInfo.bForceMono_SAP = !g_AudioInfo.bForceMono_SAP;
// M2k60720 with LSZ
				// lsz 060713  SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP);
			}
			else if(g_AudioInfo.bNicamLocked)
			{
				if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
					{
				if(g_AudioInfo.ucUserPreSelect== StereoMode_Nicam_MONO)
				{
					g_AudioInfo.bForceMono_SAP = _TRUE_;
					g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
				}
					else// if(g_AudioInfo.ucStereoMode == StereoMode_MONO)
				{
					g_AudioInfo.ucUserPreSelect = StereoMode_Nicam_MONO;
					g_AudioInfo.bForceMono_SAP = _FALSE_;
				}
					}

				else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
				{
					if(g_AudioInfo.ucUserPreSelect== StereoMode_STEREO)
					{
						g_AudioInfo.bForceMono_SAP = _TRUE_;
						g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
					}
					else// if(g_AudioInfo.ucStereoMode == StereoMode_MONO)
					{
//		
						{
							g_AudioInfo.bForceMono_SAP = _FALSE_;
							g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
						}
					}
				}
				else
				{
					if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
					{
						g_AudioInfo.bForceMono_SAP = _FALSE_;
						g_AudioInfo.ucUserPreSelect = StereoMode_DUALB;
					}
					else
					{
						if(g_AudioInfo.bForceMono_SAP)
						{
							g_AudioInfo.bForceMono_SAP = _FALSE_;
							g_AudioInfo.ucUserPreSelect = StereoMode_DUALA;
						}
						else
						{
							g_AudioInfo.bForceMono_SAP = _TRUE_;
							g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
						}
					}
				}
			}
			else
			{
				g_AudioInfo.bForceMono_SAP = _FALSE_;	// Tenny at 2k60913
				if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
				{
					g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
				}
				else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
				{
					if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
						g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
					else
						g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
				}
				else
				{
					if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
						g_AudioInfo.ucUserPreSelect = StereoMode_DUALB;
					else
						g_AudioInfo.ucUserPreSelect= StereoMode_DUALA;
				}
			}
		SGTV58xx_StereoModeSet(g_AudioInfo.ucUserPreSelect);
	}
	
#ifdef ZHW_DEBUG_SGTV_MSG
		if(g_AudioInfo.ucUserPreSelect == StereoMode_MONO)
			tvDebugPrint("g_AudioInfo.ucUserPreSelect = StereoMode_MONO \n");
		else if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
			tvDebugPrint("g_AudioInfo.ucUserPreSelect = StereoMode_STEREO \n");
		else if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
			tvDebugPrint("g_AudioInfo.ucUserPreSelect = StereoMode_DUALA\n");
		else if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALB)
			tvDebugPrint("g_AudioInfo.ucUserPreSelect = StereoMode_DUALB\n");
		else if(g_AudioInfo.ucUserPreSelect == StereoMode_Nicam_MONO)
			tvDebugPrint("g_AudioInfo.ucUserPreSelect = StereoMode_Nicam_MONO\n");
		else
			tvDebugPrint1("g_AudioInfo.ucUserPreSelect = %x ,may be is wrong\n",g_AudioInfo.ucUserPreSelect);
			
#endif

	
}



//////////////////////////////// Input/Output Channel configure ///////////////////////////////////////
void SGTV58xx_DemodInputSelectSIF0(BOOL bSelectSIF0)
{
	if(bSelectSIF0)
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_ANA_CTRL_1,
								  SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__GETMASK,
								  SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__SIF0_VALUE);
	else
		SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_ANA_CTRL_1,
								  SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__GETMASK,
								  SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__SIF1_VALUE);
}

void SGTV58xx_AISxSelectInput(ESGTV58xxAnalogInput eAnalogInput, ESGTV58xxAISOutput eAisOutput)
{
	WORD wMask;
	BYTE ucStartBit;

	switch(eAisOutput)
	{
	case AIS_ADC:
		wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__ADC_SEL__GETMASK;
		ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__ADC_SEL__STARTBIT;
		break;
	case AIS_ANA0:
		wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS0_SEL__GETMASK;
		ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS0_SEL__STARTBIT;
		break;
	case AIS_ANA1:
		wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS1_SEL__GETMASK;
		ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS1_SEL__STARTBIT;
		break;
	case AIS_ANA2:
		wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS2_SEL__GETMASK;
		ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS2_SEL__STARTBIT;
		break;
	}
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__ANA_CTRL_AIS_CNTRL, wMask, (((WORD)(eAnalogInput)) << ucStartBit));
}

void SGTV58xx_SSSIOConfig(ESGTV58xxSSSInput eSSSInput, ESGTV58xxSSSOutput eSSSOutput)
{
	WORD wReg;
	WORD wMask;
	BYTE ucStartBit;
	WORD wValue;

	switch(eSSSOutput)
	{
	case SSSOutput_I2S_DOut0:
	case SSSOutput_I2S_DOut1:
	case SSSOutput_I2SA_DOut:
		wReg = SGTV58XX_REG__SSS_I2SSOUT;
		if(eSSSOutput == SSSOutput_I2S_DOut0)
		{
			wMask = SGTV58XX_SSS_I2SSOUT__I2SSOUT0__GETMASK;
			ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SSOUT0__STARTBIT;
		}
		else if(eSSSOutput == SSSOutput_I2S_DOut1)
		{
			wMask = SGTV58XX_SSS_I2SSOUT__I2SSOUT1__GETMASK;
			ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SSOUT1__STARTBIT;
		}
		else
		{
			wMask = SGTV58XX_SSS_I2SSOUT__I2SAOUT__GETMASK;
			ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SAOUT__STARTBIT;
		}
		break;
	case SSSOutput_SPDIFOut:
		wReg = SGTV58XX_REG__SSS_SPDIFOUT;
		wMask = SGTV58XX_SSS_SPDIFOUT__SPDIFOUT__GETMASK;
		ucStartBit = SGTV58XX_SSS_SPDIFOUT__SPDIFOUT__STARTBIT;
		break;
	case SSSOutput_DAC0:
		wReg = SGTV58XX_REG__SSS_DACOUT;
		wMask = SGTV58XX_SSS_DACOUT__DAC0__GETMASK;
		ucStartBit = SGTV58XX_SSS_DACOUT__DAC0__STARTBIT;
		break;
	case SSSOutput_DAC1:
		wReg = SGTV58XX_REG__SSS_DACOUT;
		wMask = SGTV58XX_SSS_DACOUT__DAC1__GETMASK;
		ucStartBit = SGTV58XX_SSS_DACOUT__DAC1__STARTBIT;
		break;
	case SSSOutput_DAC_HDPH:
		wReg = SGTV58XX_REG__SSS_DACOUT;
		wMask = SGTV58XX_SSS_DACOUT__DACHDPH__GETMASK;
		ucStartBit = SGTV58XX_SSS_DACOUT__DACHDPH__STARTBIT;
		break;
	case SSSOutput_DAC_Main:
		wReg = SGTV58XX_REG__SSS_DACOUT;
		wMask = SGTV58XX_SSS_DACOUT__DACMAIN__GETMASK;
		ucStartBit = SGTV58XX_SSS_DACOUT__DACMAIN__STARTBIT;
		break;
	case SSSOutput_DAC_Sub:
		wReg = SGTV58XX_REG__SSS_DAC_MAIN_LF;
		wMask = SGTV58XX_SSS_DAC__MAIN_LF__GETMASK;
		ucStartBit = SGTV58XX_SSS_DAC__MAIN_LF__STARTBIT;
		break;
	case SSSOutput_SyncDelay_Out:
		wReg = SGTV58XX_REG__SSS_MISC;
		wMask = SGTV58XX_SSS_MISC__SYNC_DELAY__GETMASK;
		ucStartBit = SGTV58XX_SSS_MISC__SYNC_DELAY__STARTBIT;
		break;
	case SSSOutput_ToneGen_Out:
		wReg = SGTV58XX_REG__SSS_MISC;
		wMask = SGTV58XX_SSS_MISC__TONE_GENERATOR__GETMASK;
		ucStartBit = SGTV58XX_SSS_MISC__TONE_GENERATOR__STARTBIT;
		break;
	case SSSOutput_PeakDetect:
		wReg = SGTV58XX_REG__SSS_MISC;
		wMask = SGTV58XX_SSS_MISC__PEAK_DETECT__GETMASK;
		ucStartBit = SGTV58XX_SSS_MISC__PEAK_DETECT__STARTBIT;
		break;
	case SSSOutput_DAP_SGTLDP:
		wReg = SGTV58XX_REG__SSS_DAP;
		wMask = SGTV58XX_SSS_DAP__SGTL_DP__GETMASK;
		ucStartBit = SGTV58XX_SSS_DAP__SGTL_DP__STARTBIT;
		break;

⌨️ 快捷键说明

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