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

📄 d0362_drv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
			
			WAIT_N_MS_362(tempo);
		
			
			ppm=0;
			tempo=1<<(2*mode);
			for (ii=0;ii<4;ii++) 
			{
				ppm+=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_PPM_CPC);
				WAIT_N_MS_362(tempo);
			}
			
			if (ppm< (CPQ_LIMIT <<(2*mode + 2)) ) 
				{				
				ret_flag=BAD_CPQ_362;
			
				#ifdef STTUNER_DEBUG_LOCK_STAGES 
				STTBX_Print(("\n BAD CPQ \n"));
				#endif
				
				}
			else
				{
				try=try;
			}
			
			try++;
			
	} while ( (try<2) && (ret_flag!=LOCKOK_362) );
	
	if ( ret_flag!=LOCKOK_362) 
	{
		return ret_flag;
	}
	
	

	
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_LOCK);
			
			
			wd=65<<(2*mode); 
			tempo=4<<(2*mode);			
			while ((!u_var) && (wd>0))
			{
			WAIT_N_MS_362(tempo);
			wd-= tempo;
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_LOCK);
			}
			
			if (!u_var) 
			{
			
			#ifdef STTUNER_DEBUG_LOCK_STAGES
		        STTBX_Print(("\n TPS NOT FOUND \n"));
		        #endif
			return NOTPS_362;
			}
			#ifdef STTUNER_DEBUG_LOCK_STAGES
		        STTBX_Print(("\n TPS LOCKED \n"));
		        #endif
		        
			tempo= (14<<(2*mode));
			WAIT_N_MS_362(tempo); /*	dcdc wait for EPQ to be reliable*/
			guard=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_SYR_GUARD);
			wd=36<<(2*mode);		

			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_PRF);
			tempo=4<<(2*mode);
			while ( (!u_var) && (wd>=0))
			{
			
			WAIT_N_MS_362(tempo);
			wd-=(tempo);
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_PRF);
			}
			
			if(!u_var)
			{
			#ifdef STTUNER_DEBUG_LOCK_STAGES
		        STTBX_Print(("\n NO PRF FOUND \n"));
		        #endif
			return NOPRFOUND_362;
			}
			#ifdef STTUNER_DEBUG_LOCK_STAGES
		        STTBX_Print(("\n PRF FOUND \n"));
		        #endif
		        
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_LK);
			
			wd=75<<(2*mode);/* a revoir */   
			tempo=4<<(2*mode) ;
			while ((!u_var) && (wd>=0))
			{
			WAIT_N_MS_362( tempo);
			wd-=tempo;
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_LK);
			}
			if(!u_var)
			{
			#ifdef STTUNER_DEBUG_LOCK_STAGES
		        STTBX_Print(("\n LK NOT LOCKED \n"));
		        #endif
			return NOPRFOUND_362;
		}
		#ifdef STTUNER_DEBUG_LOCK_STAGES
		STTBX_Print(("\n LK LOCKED \n"));
		#endif
		
	
	/* lock/secure the FEC for HP*/
	u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_HPCODE);
	if (u_var==4 ) u_var=5;
	switch(u_var)
	{
	case 0:
	seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH0);
	
	if (seuil <60) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH0,45);
	break;
	case 1:
	seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH1);
	if (seuil < 40) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH1,30);
	break;
	case 2:
	seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH2);
	if (seuil < 30) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH2,23);
	break;
	case 3:
	seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH3);
	if (seuil < 18) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH3,14);
	break;
	case 5:
	seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH5);
	if (seuil < 10) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH5,8);
	break;
	default:
	break;
	
						   
	}
	
	/* lock/secure the FEC for LP (if needed)*/
	if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_HIERMODE)!=0)
	{
		u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_LPCODE);
		if (u_var==4 ) u_var=5;
		switch(u_var)
		{
		case 0:
		seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH0);
	
		if (seuil <60) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH0,45);
		break;
		case 1:
		seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH1);
		if (seuil < 40) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH1,30);
		break;
		case 2:
		seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH2);
		if (seuil < 30) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH2,23);
		break;
		case 3:
		seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH3);
		if (seuil < 18) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH3,14);
		break;
		case 5:
		seuil=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_VTH5);
		if (seuil < 10) STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_VTH5,8);
		break;
		default:
		break;
	
		}
	}	
	
	
	if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_HIERMODE)==0)	
		{
		   u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_TPS_HPCODE);
		if (u_var==4 ) u_var=5;    
		u_var= (1<<u_var);
		   STTUNER_IOREG_SetRegister(DeviceMap,IOHandle,R0362_PR,u_var); 
		   Rvsearch=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_VSEARCH);
		    
		    v_search=((1<<7) | Rvsearch) & 0xbf;
		  
		   STTUNER_IOREG_SetRegister(DeviceMap,IOHandle,R0362_VSEARCH,v_search);
		}
	return	LOCKOK_362;
}

/*****************************************************
--FUNCTION	::	FE_362_LookFor
--ACTION	::	Intermediate layer before launching Search
--PARAMS IN	::	Handle	==>	Front End Handle
				pSearch ==> Search parameters
				pResult ==> Result of the search
--PARAMS OUT::	NONE
--RETURN	::	Error (if any)
--***************************************************/

FE_362_Error_t	FE_362_LookFor(DEMOD_Handle_t Handle,STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, FE_362_SearchParams_t	*pSearch, FE_362_SearchResult_t *pResult,STTUNER_Handle_t  TopLevelHandle)

{
	FE_362_SearchParams_t	 pLook; 

	U8 trials[2];
	S8 num_trials,index;
	FE_362_Error_t error = FE_362_NO_ERROR;
	U8 flag_spec_inv;

	U8 flag,inv;
	
	
	FE_362_InternalParams_t pParams; 
	

		
	/*pParams=(FE_362_InternalParams_t *) Handle;		*/
		
	pLook.Frequency	= pSearch->Frequency;
	pLook.Mode 		= pSearch->Mode;
	pLook.Guard		= pSearch->Guard;
	pLook.Inv		= pSearch->Inv;		
	pLook.Force     = pSearch->Force;
	pLook.ChannelBW	= pSearch->ChannelBW;
	pLook.EchoPos   = pSearch->EchoPos;
		
	pLook.IF_IQ_Mode= pSearch->IF_IQ_Mode;
	pParams.Inv	= pSearch->Inv;		

	flag_spec_inv	= 0;		
	flag		= ((pSearch->Inv>>1)&1);		
	
	
	pParams.first_lock=0;/*This is made as 0 whenevr FE_362_LookFor fucntion is called */
	
		
	switch (flag)
	{
	  	case 0:
		        trials[0]=NINV;
			trials[1]= INV;			
			if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
			   {
				num_trials=1;
			   }
				
			else
			   {
				num_trials=2;
			   }
			
			if ( (pParams.first_lock)	&& (pParams.Inv == STTUNER_INVERSION_UNK))
			   {
				num_trials=1;	
			   }
			break;
			
		case 1:
			trials[0]= NINV;
			trials[1]=  INV;
			num_trials=2;
			break;
			
	}
		
			
	
		pResult->SignalStatus=NOLOCK_362;		
		index=0;
															 
		while ( ( (index) < num_trials) && (pResult->SignalStatus!=LOCKOK_362)) 		 
		{
			
			inv= trials[index]%2;
			
			if ((!pParams.first_lock)||(pParams.Inv == STTUNER_INVERSION_AUTO) || (pParams.Inv == STTUNER_INVERSION_UNK) ) 
				{
					pParams.Sense	=  inv; 
				}
			
			error=FE_362_Search(Handle,DeviceMap,IOHandle,&pLook,&pParams,pResult,TopLevelHandle);
	
	
			
			if ((pResult->SignalStatus == NOAGC_362) || (pResult->SignalStatus == NOSYMBOL_362) ) break;
		
						
			index++;
		}
		
		return  error;
}

/*****************************************************
--FUNCTION	::	FE_362_Search
--ACTION	::	Search for a valid channel
--PARAMS IN	::	Handle	==>	Front End Handle
				pSearch ==> Search parameters
				pResult ==> Result of the search
--PARAMS OUT::	NONE
--RETURN	::	Error (if any)
--***************************************************/
FE_362_Error_t	FE_362_Search(DEMOD_Handle_t Handle,STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, FE_362_SearchParams_t	*pSearch,FE_362_InternalParams_t *Params, FE_362_SearchResult_t *pResult, STTUNER_Handle_t  TopLevelHandle)
{
       S32 offset=0;
       U32 CrlRegVal;              
       U8 constell,counter;
       U8 Rgain,gain_src[2]={0},Rtrlctl,trl_ctl[3]={0},inc_derot[2]={0},tps_rcvd[3]={0},syr_stat[1]={0},agc2max[13]={0},crl_freq[3]={0},trl_ctl1[5]={0},trl_ctl2[2]={0};
       S8 step;
       BOOL TunerLocked;
       S32 timing_offset;
       U32 trl_nomrate;
       STTUNER_tuner_instance_t *TunerInstance; 
       STTUNER_InstanceDbase_t     *Inst;
       D0362_InstanceData_t   *Instance;
       FE_362_Error_t error = FE_362_NO_ERROR;
      
	/* top level public instance data */ 
       Inst = STTUNER_GetDrvInst();
        /* private driver instance data */
       Instance = d0362_GetInstFromHandle(Handle);
        /* get the tuner instance for this driver from the top level handle */
       TunerInstance = &Inst[TopLevelHandle].Terr.Tuner;     
      
                                                                
	
	switch(pSearch->IF_IQ_Mode)/*Use macro here */
	      {
		 case FE_362_NORMAL_IF_TUNER:  /* Normal IF mode */ 
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_TUNER_BB,0);  
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LONGPATH_IF,0); 			
			break;
			
		 case FE_362_NORMAL_LONGPATH_IF_TUNER:  /* Long IF mode */ 
		  	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_TUNER_BB,0);
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LONGPATH_IF,1); 			
			break;
			
		 case FE_362_LONGPATH_IQ_TUNER:  /* IQ mode */
		
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_TUNER_BB,1);
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_PMC2_SWAP,1);
			break;
						
		}
		
		
	  if(pSearch->IF_IQ_Mode!= FE_362_NORMAL_IF_TUNER)
		{
		      FE_362_AGC_IIR_LOCK_DETECTOR_SET(DeviceMap,IOHandle);
		      FE_362_IIR_FILTER_INIT(DeviceMap,IOHandle,pSearch->ChannelBW);
		      FE_362_AGC_IIR_RESET(DeviceMap,IOHandle);		 
			 
		 }
		 
	if (TunerInstance->Driver->ID != STTUNER_TUNER_RF4000)
            {	
		  if (pSearch->ChannelBW == STTUNER_CHAN_BW_6M) 
			{
		       
		         Rgain=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_GAIN_SRC1);
			 gain_src[0]=(Rgain & 0xf0) |M6_F_GAIN_SRC_HI;
			 gain_src[1]=M6_F_GAIN_SRC_LO;
		        
			 STTUNER_IOREG_SetContigousRegisters(DeviceMap,IOHandle,R0362_GAIN_SRC1,gain_src,2); 
			
			 Rtrlctl=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_TRL_CTL);
		
		 	 trl_ctl[0]=(Rtrlctl & 0x7f)| (M6_F_TRL_NOMRATE0<<7);
		 	 trl_ctl[1]=M6_F_TRL_NOMRATE8_1;
		 	 trl_ctl[2]=M6_F_TRL_NOMRATE16_9;		
			
			 STTUNER_IOREG_SetContigousRegisters(DeviceMap,IOHandle,R0362_TRL_CTL,trl_ctl,3);
			}
	   	else if (pSearch->ChannelBW == STTUNER_CHAN_BW_7M) 
			{		
			
			 Rtrlctl=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_TRL_CTL);
		
		 	 trl_ctl[0]=(Rtrlctl & 0x7f)| (M7_F_TRL_NOMRATE0<<7);
		 	 trl_ctl[1]=M7_F_TRL_NOMRATE8_1;
		 	 trl_ctl[2]=M7_F_TRL_NOMRATE16_9;
			
			 STTUNER_IOREG_SetContigousRegisters(DeviceMap,IOHandle,R0362_TRL_CTL,trl_ctl,3);
			
			if (pSearch->IF_IQ_Mode == FE_362_NORMAL_IF_TUNER)
			{
				
				Rgain=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_GAIN_SRC1);
				gain_src[0]=(Rgain & 0xf0) |M7_GAIN_SRC_HI;
				gain_src[1]=M7_GAIN_SRC_LO;
				
				STTUNER_IOREG_SetContigousRegisters(DeviceMap,IOHandle,R0362_GAIN_SRC1,gain_src,2); 
			}
			else
			{
			  	
				Rgain=STTUNER_IOREG_GetRegister(DeviceMap,IOHandle,R0362_GAIN_SRC1);
				gain_src[0]=(Rgain & 0xf0) |M7_E_GAIN_SRC_HI;
				gain_src[1]=M7_E_GAIN_SRC_LO;
			  	
				STTUNER_IOREG_SetContigousRegisters(DeviceMap,IOHandle,R0362_GAIN_SRC1,gain_src,2); 
				
			}

		}
		else /* Channel Bandwidth = 8M) */
		{	 

⌨️ 快捷键说明

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