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

📄 audio_api1.c

📁 The driver of audio processor SGTV5830 音频处理芯片SGTV5830驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
#if 0 //zenghw add for temp
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL,  //zenghw add
							  SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
							  SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD);
#endif
	// now force the standard
	wTemp = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_ASD_CTRL);
	// clear auto-detect and disable it
#if 0 //zenghw changed because we do not have auto detect in menu	
	wTemp &= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__CLEARMASK;
//	if(UserPrefSoundSystem !=0 ) //lsz 060704
	if(g_AudioInfo.ucUserPreSelect!=0 ) //lsz 060704  zenghw change temp p001
	    wTemp |= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__DISABLE_VALUE;
#else
	    wTemp |= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__DISABLE_VALUE;

#endif

#if 1
	// set channel change
	wTemp |= SGTV58XX_DEMOD_ASD_CTRL__CHANNEL_CHANGE__CHANGE_CHANNEL_VALUE;
#endif
	// clear and then set new standard
	wTemp &= SGTV58XX_DEMOD_ASD_CTRL__SET_STD__CLEARMASK;
	wTemp |= ((WORD)(eStandard)) << SGTV58XX_DEMOD_ASD_CTRL__SET_STD__STARTBIT;

	
	SGTV58xx_I2C_Write(SGTV58XX_REG__DEMOD_ASD_CTRL, wTemp);
	//4Tenny at 2k70120 {
#if 1	 //zenghw changed
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL,
							  SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
							  SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD);
#else
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL,
							  SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
							  0x0000);

#endif
	//4Tenny at 2k70120 }
}


BOOL SGTV58xx_ASD_StandardGet(void)
{
	ESGTV58xxStandard eASDStandard;
	eASDStandard = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_ASD_CTRL) & 0x0f;
	if(eASDStandard < 0x0c)
	{
		g_AudioInfo.ucSoundStandard = eASDStandard;
//		SGTV58xx_APIStandardGet();
#ifdef ZHW_DEBUG_SGTV_MSG
		switch(g_AudioInfo.ucSoundStandard)
		{
			case 0:
				tvDebugPrint("******** Sound standard is A2_BG ********\n");
				break;
			case 1:
				tvDebugPrint("******** Sound standard is A2_DK_625 ********\n");
				break;
			case 2:
				tvDebugPrint("******** Sound standard is A2_DK_674 ********\n");
				break;
			case 3:
				tvDebugPrint("******** Sound standard is A2_DK_6574 ********\n");
				break;
			case 4:
				tvDebugPrint("******** Sound standard is A2_M ********\n");
				break;
			case 5:
				tvDebugPrint("******** Sound standard is NICAM_BG ********\n");
				break;
			case 6:
				tvDebugPrint("******** Sound standard is NICAM_I ********\n");
				break;
			case 7:
				tvDebugPrint("******** Sound standard is NICAM_DK ********\n");
				break;
			case 8:
				tvDebugPrint("******** Sound standard is NICAM_L ********\n");
				break;
			case 9:
				tvDebugPrint("******** Sound standard is EIAJ ********\n");
				break;
			case 10:
				tvDebugPrint("******** Sound standard is BTSC ********\n");
				break;
			case 11:
				tvDebugPrint("******** Sound standard is FM_RADIO ********\n");
				break;
		}
#endif

		return _TRUE_;
	}
	return _FALSE_;
}

void SGTV58xx_APIStandardGet(void)
{
	switch(g_AudioInfo.ucSoundStandard)
	{
	case Standard_A2_BG:
	case Standard_NICAM_BG:
		g_AudioInfo.ucSoundSystem= _TVSYSTEM_BG_;
		break;
	case Standard_A2_DK_574:
	case Standard_A2_DK_625:
	case Standard_A2_DK_674:
	case Standard_NICAM_DK:
	default:
		g_AudioInfo.ucSoundSystem = _TVSYSTEM_DK_;
		break;
//		/* lsz 060801  //zenghw removed   ntsc
	case Standard_A2_M:
	case Standard_BTSC:
	case Standard_EIAJ:  //when no signal, default is DK
		g_AudioInfo.ucSoundSystem = _TVSYSTEM_MN_;
		break;

//		*/  
	case Standard_NICAM_I:
		g_AudioInfo.ucSoundSystem = _TVSYSTEM_I_;
		break;
	case Standard_NICAM_L:
		g_AudioInfo.ucSoundSystem = _TVSYSTEM_L_;
		break;
	}
}

void Audio_TVSoundStandardAutoDetect(void)
{
	BYTE i = 0;
        SGTV58xx_ASD_SupportSTD(0xfff); // lsz 060706
	SGTV58xx_L_DK_SelectL(g_AudioInfo.bNicamLEnabled);
	SGTV58xx_AGC_Disable(g_AudioInfo.bNicamLEnabled);
	do
	{
		SGTV58xx_ASD_Enable();
		tdSleep(100);
		SGTV58xx_ASD_StandardGet();
	}while(++i < 5);  
	SGTV58xx_APIStandardGet();
}

#if 0
void SGTV58xx_StandardAutoDetect(void)
{
	BYTE ucTemp;
	switch(++g_AudioInfo.ucASDStep)
	{
		case 0:
		case 1:
			g_AudioInfo.ucASDStep = 0;
			break;
		case 2:
#ifdef ZHW_DEBUG_SGTV_MSG
			gm_Printf("Start auto standard detected");
#endif
			SGTV58xx_L_DK_SelectL(g_AudioInfo.bNicamLEnabled);
			SGTV58xx_AGC_Disable(g_AudioInfo.bNicamLEnabled);
			SGTV58xx_ASD_Enable();
			break;
		case 8:
			g_AudioInfo.ucASDStep = 0xfe;
			break;
		case 0xff:
			SGTV58xx_StandardForcedTo(g_AudioInfo.ucSoundStandard);
			SGTV58xx_APIStandardGet();
			g_AudioInfo.ucASDStep = 0;
			break;
		default:
			if(SGTV58xx_ASD_StandardGet())
				g_AudioInfo.ucASDStep = 0xfe;
			break;
	}
#ifdef ZHW_DEBUG_SGTV_MSG
	if(g_AudioInfo.ucASDStep > 1)
		gm_Print("Auto Standard Detect step ===== %d", g_AudioInfo.ucASDStep);
#endif
}
#endif

// Check Demodulator status: stereo ,mono  ,dual
void SGTV58xx_DemodStatusCheck(void)
{
	WORD wRegValue;
	BYTE ucStereoMode;
#ifdef SUPPORT_NICAM
	BOOL bNicamLocked = _FALSE_;
#endif
	BOOL bSAPDetected = _FALSE_;
	WORD wNicamValue;
	static BYTE ucSAPCount = 0;	// Tenny at 2k60921 for SAP detection
	static BYTE ucStereoModeCount = 0;
	static BYTE ucNicamLockCount=0;//

	wRegValue =SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL);
	// Check Stereo Mode
#ifdef SUPPORT_NICAM
	wNicamValue = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_NICAM_CTRL);

	if(wNicamValue & SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__FORCE_VALUE)
	{
		ucStereoMode = (wNicamValue & SGTV58XX_DEMOD_NICAM_MODE_CTRL__DETECTED_MODE__GETMASK)>>8;
		if(ucStereoMode == 0)
		{
			ucStereoMode = StereoMode_STEREO;
		}
		else if(ucStereoMode == 2)
		{
			ucStereoMode = StereoMode_DUALA;
		}
		else
			ucStereoMode = StereoMode_MONO;

		if(ucStereoMode != g_AudioInfo.ucStereoModeDetected)
		{
#ifdef ZHW_DEBUG_SGTV_MSG
		       tvDebugPrint1("Detected Stereo Mode is Nicam DUALg_AudioInfo.ucStereoModeDetected=%d\n",g_AudioInfo.ucStereoModeDetected);
#endif
			if(++ucStereoModeCount > 3)
			{
				ucStereoModeCount = 0;
//				UserPrefStereoBoardcast =ucStereoMode; // lsz 060701
			g_AudioInfo.ucStereoModeDetected = ucStereoMode;
			g_AudioInfo.bStatusChanged = _TRUE_;
			bNicamLocked = _TRUE_; // lsz 061128 
#ifdef ZHW_DEBUG_SGTV_MSG
			if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
				tvDebugPrint("Detected Stereo Mode is Nicam MONO\n");
			else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
				tvDebugPrint("Detected Stereo Mode is Nicam STEREO\n");
			else
				tvDebugPrint("Detected Stereo Mode is Nicam  DUAL\n");
#endif
		}
		}
		else
			ucStereoModeCount = 0;

       }
	else
#endif
	{
		if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__DETECT_COMPLETE__GETMASK)
		{
			ucStereoMode = wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__DETECTED_MODE__GETMASK;
			if(ucStereoMode == 2)
			{
				ucStereoMode = StereoMode_STEREO;
			}
			else if(ucStereoMode == 1)
			{
//				if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__GETMASK)
//					ucStereoMode = StereoMode_DUALB;
//				else
					ucStereoMode = StereoMode_DUALA;
			}
			else //if(ucStereoMode == 0)
			{
				ucStereoMode = StereoMode_MONO;
			}

			if(ucStereoMode != g_AudioInfo.ucStereoModeDetected)
			{
				if(++ucStereoModeCount > 2)
				{
					ucStereoModeCount = 0;
#ifdef ZHW_DEBUG_SGTV_MSG
			       tvDebugPrint1("Detected Stereo Mode is DUAL g_AudioInfo.ucStereoModeDetected=%d\n",g_AudioInfo.ucStereoModeDetected);
#endif
//				UserPrefStereoBoardcast =ucStereoMode; // lsz 060701  zenghw remove for temp P001
				g_AudioInfo.ucStereoModeDetected = ucStereoMode;
				g_AudioInfo.bStatusChanged = _TRUE_;
#ifdef ZHW_DEBUG_SGTV_MSG
				if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
					tvDebugPrint("Detected Stereo Mode is MONO\n");
				else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
					tvDebugPrint("Detected Stereo Mode is STEREO\n");
				else
					tvDebugPrint("Detected Stereo Mode is DUAL\n");
#endif
			}
		}
			else
				ucStereoModeCount = 0;
		}
	}
	// Check SAP
	if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__SAP_DETECTED__GETMASK)
	{
		bSAPDetected = _TRUE_;
	}
//	gm_Printf("SAP status detected = %d", bSAPDetected);
	if(bSAPDetected != g_AudioInfo.bSAPDetected)
	{
		if(++ucSAPCount > 3)
		{
			ucSAPCount = 0;
		g_AudioInfo.bSAPDetected = bSAPDetected;
		}
		g_AudioInfo.bStatusChanged = _TRUE_;
	}
	else
		ucSAPCount = 0;
#ifdef ZHW_DEBUG_SGTV_MSG
//	tvDebugPrint1("g_AudioInfo.bSAPDetected = %d", g_AudioInfo.bSAPDetected);
#endif

#ifdef SUPPORT_NICAM
	// Check Nicam
	wRegValue = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_NICAM_CTRL);
#ifdef ZHW_DEBUG_SGTV_MSG
//	tvDebugPrint1("SGTV58XX_REG__DEMOD_NICAM_CTRL = 0x%x", wRegValue);
#endif
	if(wRegValue & 0x10)
	{
		bNicamLocked = _TRUE_;
	}
	if(bNicamLocked != g_AudioInfo.bNicamLocked)
	{
	     if(++ucNicamLockCount> 2)
	         {
		ucNicamLockCount = 0;
		g_AudioInfo.bNicamLocked = bNicamLocked;
		g_AudioInfo.bStatusChanged = _TRUE_;
#ifdef ZHW_DEBUG_SGTV_MSG
		if(g_AudioInfo.bNicamLocked)
			tvDebugPrint("NICAM is Locked \n");
#endif
        	}
		 
	}
	else
		 	ucNicamLockCount=0; 
	

#endif
}

void SGTV58xx_ForcedToLangB(BOOL bChannelB)
{
	WORD wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__LANG_A_VALUE;
	if(bChannelB)
		wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__LANG_B_VALUE;
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
							  SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__GETMASK,
							  wTemp);
}

void SGTV58xx_SetToChannelB(BOOL bChannelB)
{
	WORD wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__LANG_A_VALUE;
	if(bChannelB)
		wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__LANG_B_VALUE;
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
							  SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__GETMASK,
							  wTemp);
}

void SGTV58xx_NicamForceBackup(BOOL bForced)
{
	WORD wTemp = SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__NO_FORCE_VALUE;
	if(bForced)
		wTemp = SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__FORCE_VALUE;
	SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_NICAM_CTRL,
							  SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__GETMASK,

⌨️ 快捷键说明

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