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

📄 ll_tun0360.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			case TUNER_PLL_TECC2849PG:
				Tuner->WrBuffer[0] = (unsigned char) ( (nbsteps >> 8) & 0x7f );
				Tuner->WrBuffer[1] = (unsigned char) ( (nbsteps >> 0) & 0xff );
			break;
			#endif
			/*******Tuner TDCC2345**************************/
			#ifdef STTUNER_DRV_TER_TUN_TDCC2345
			case TUNER_PLL_TDCC2345:
				Tuner->WrBuffer[0] = (unsigned char) ( (nbsteps >> 8) & 0x7f );
				Tuner->WrBuffer[1] = (unsigned char) ( (nbsteps >> 0) & 0xff );
			break;
			#endif
#endif			
			default:
				Tuner->Error = TNR_PLL_ERR;
			break ;
		}
		
		#ifdef HOST_PC
		TunerReadWrite( Tuner,WRITE);  
		#else
		
		TunerReadWrite((TUNER_Handle_t)Tuner,WRITE); 
		#endif
		
	}
}


/*****************************************************
**FUNCTION	::	LL_TunerGetNbSteps
**ACTION	::	Get the number of steps of the tuner
**PARAMS IN	::	NONE
**PARAMS OUT::	NONE  
**RETURN	::	Number of steps, 0 if an error occur
*****************************************************/
int LL_TunerGetNbSteps(TUNTDRV_InstanceData_t* Tuner)
{
	int nbsteps = 0;
	if(!Tuner->Error)
	{
	
	        switch (Tuner->PLLType)
		{
#ifdef STTUNER_BASIC			
			#ifdef STTUNER_DRV_TER_TUN_TDLB7
			case TUNER_PLL_TDLB7:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
				nbsteps |= ((int)Tuner->WrBuffer[2] & 0x00000060)<<16L;
			break ;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TDEB2
			case TUNER_PLL_TDEB2:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break ;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_DTT7572
			case TUNER_PLL_DTT7572:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TDA6650
			case TUNER_PLL_TDA6650:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TDM1316
			case TUNER_PLL_TDM1316:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_EAL2780
			case TUNER_PLL_EAL2780:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#if defined(STTUNER_DRV_TER_TUN_DTT7578) || defined (STTUNER_DRV_TER_TUN_DTT7592)
			
			case TUNER_PLL_DTT7578:
			case TUNER_PLL_DTT7592:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
				
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_ENG47402G1
			
			case TUNER_PLL_ENG47402G1:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_ED5058
			
			case TUNER_PLL_ED5058:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
				nbsteps=nbsteps;
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_MIVAR
			case TUNER_PLL_MIVAR:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TDED4
			case TUNER_PLL_TDED4:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_DTT7102
			case TUNER_PLL_DTT7102:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TECC2849PG
			case TUNER_PLL_TECC2849PG:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
			#ifdef STTUNER_DRV_TER_TUN_TDCC2345
			case TUNER_PLL_TDCC2345:
				nbsteps	 = ((int)Tuner->WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner->WrBuffer[1] & 0x000000FF);
			break;
			#endif
#endif			
			default:
				Tuner->Error = TNR_PLL_ERR;
			break;
		}
	}
	else
	{
	/*	dbg_counter++;*/
		/*if (!(dbg_counter % 8 )) printf("NO ACK \n");*/
	}
		
	return nbsteps;
}


/*****************************************************
**FUNCTION	::	LL_TunerGetFrequency
**ACTION	::	Get the frequency of the tuner
**PARAMS IN	::	NONE  
**PARAMS OUT::	NONE  
**RETURN	::	frequency of the tuner (KHz), 0 if an error occur 
*****************************************************/
int LL_TunerGetFrequency(TUNTDRV_InstanceData_t* Tuner)
{
	int frequency = 0;
	
	if(Tuner->StepSize>0)
	{
		
		  frequency = ((LL_TunerGetNbSteps(Tuner)*(Tuner->StepSize/2)) - 500*Tuner->IF)/500	;
	          frequency *= Tuner->FreqFactor;
		
	}
	else
		Tuner->Error = TNR_STEP_ERR;
	
	return frequency; 
}


/*****************************************************
**FUNCTION	::	LL_TunerSetFrequency
**ACTION	::	Set the frequency of the tuner
**PARAMS IN	::	frequency ==> the frequency of the tuner (KHz) 
**PARAMS OUT::	NONE  
**RETURN	::	real tuner frequency, 0 if an error occur 
*****************************************************/

/*ST_ErrorCode_t	tuner_tuntdrv_SetFrequency(TUNER_Handle_t  Handle,U32 frequency,(U32*)&returned_freq); */
 ST_ErrorCode_t LL_TunerSetFrequency(TUNTDRV_InstanceData_t* Tuner,U32 frequency,U32* returned_freq)  

{
	#ifdef STTUNER_BASIC
	#if defined (STTUNER_DRV_TER_TUN_TDLB7)||defined (STTUNER_DRV_TER_TUN_TDEB2)||defined (STTUNER_DRV_TER_TUN_DTT7572)||defined (STTUNER_DRV_TER_TUN_EAL2780)||defined(STTUNER_DRV_TER_TUN_DTT7578) || defined(STTUNER_DRV_TER_TUN_DTT7592)||defined (STTUNER_DRV_TER_TUN_TDA6650)||defined (STTUNER_DRV_TER_TUN_TDM1316)||defined (STTUNER_DRV_TER_TUN_ENG47402G1)||defined (STTUNER_DRV_TER_TUN_ED5058)||defined (STTUNER_DRV_TER_TUN_MIVAR)||defined (STTUNER_DRV_TER_TUN_TDED4)||defined (STTUNER_DRV_TER_TUN_DTT7102)||defined (STTUNER_DRV_TER_TUN_TECC2849PG)||defined (STTUNER_DRV_TER_TUN_TDCC2345)
	int 	chargepump = 0,		
		channel_size,
		Atc;
					
		#endif
		#ifdef STTUNER_DRV_TER_TUN_ENG47402G1
		int	loc_CB;
		#endif
#endif		
	/*Code added for stb4K*/
	
	int nbsteps = 0;
	
	
	
	
	
	
	#ifdef STTUNER_ATCBIT_TUNER_ENABLE
	int loop = 0;
	int FL = 0;
	#endif
	/*Code added for MT2060*/
	Tuner->Error=TNR_NO_ERR;
	
	if(Tuner->StepSize > 0)
	{
		
		switch(Tuner->TunerType)
		{
#ifdef STTUNER_BASIC	
		#ifdef STTUNER_DRV_TER_TUN_TDLB7
		case  	STTUNER_TUNER_TDLB7:
  				chargepump = (unsigned char) ( (frequency < (782000 + Tuner->IF) ) ?
                0x40 :   /* C="01",RE=0,RTS=0,Pn=0 */
                0x80 );  /* C="10",RE=0,RTS=0,Pn=0 */
				Tuner->WrBuffer[3] = chargepump;  
		break;		
		#endif
			
			
		#ifdef STTUNER_DRV_TER_TUN_TDEB2
		case  	STTUNER_TUNER_TDEB2:
				channel_size=Tuner->ChannelBW;
				#ifdef HOST_PC
				UsrRdInt("CHANNEL_WIDTH",&channel_size); 			
				#endif
  				if 		(frequency <= 230000) 	chargepump=(unsigned char)0x02;
				else if (frequency <= 824000) 	chargepump=(unsigned char)0x08;
				else 							chargepump=(unsigned char)0x88;
				if (channel_size==8) (chargepump=chargepump|4); 				
				Tuner->WrBuffer[3] = chargepump;  
		break;		
				
		#endif

			
		#ifdef STTUNER_DRV_TER_TUN_DTT7572
		case  	STTUNER_TUNER_DTT7572:
				if (frequency <= 89000) chargepump=(unsigned char)0x05;
				else if (frequency <= 114000) chargepump=(unsigned char)0x45;
				else if (frequency <= 134000) chargepump=(unsigned char)0x85;
				else if (frequency <= 146000) chargepump=(unsigned char)0xC5;
				
				else if (frequency <= 264000) chargepump=(unsigned char)0x06;
				else if (frequency <= 344000) chargepump=(unsigned char)0x46;
				else if (frequency <= 404000) chargepump=(unsigned char)0x86;
				else if (frequency <= 430000) chargepump=(unsigned char)0xC6;
				
				else if (frequency <= 714000) chargepump=(unsigned char)0x43;
				else if (frequency <= 814000) chargepump=(unsigned char)0x83;
				else if (frequency <= 860000) chargepump=(unsigned char)0xC3;
				else  chargepump=(unsigned char)0x83;
				Tuner->WrBuffer[3] = (unsigned char) chargepump;  
		break;		
		#endif

			
		#ifdef STTUNER_DRV_TER_TUN_EAL2780
		case  	STTUNER_TUNER_EAL2780:
				chargepump=(unsigned char)0x8C;
				Tuner->WrBuffer[2] = (unsigned char) chargepump;  				
				Tuner->WrBuffer[3] = (unsigned char) (0x40);
		#endif

			
		#if defined(STTUNER_DRV_TER_TUN_DTT7578) || defined(STTUNER_DRV_TER_TUN_DTT7592)
		case  	STTUNER_TUNER_DTT7578 :
		case    STTUNER_TUNER_DTT7592 :
				if 		(frequency <= 230000) chargepump=(unsigned char)0xB4;/* modifs of the spec */
				else if (frequency <= 699000) chargepump=(unsigned char)0xBC;
				else if (frequency <= 799000) chargepump=(unsigned char)0xF4;
				else if (frequency <= 860000) chargepump=(unsigned char)0xFC;
				else  chargepump=(unsigned char)0xFC;
				switch(Tuner->StepSize)
					{
					case 50000:
		
					chargepump=(chargepump&0xC9);	
					
					break;
					case 31250:
					chargepump=(chargepump&0xC9);
					chargepump=chargepump|((0x1)<<1);
					break;
					
					case 166667:
					chargepump=(chargepump&0xF9);
					chargepump=chargepump|(2<<1);
					break;

					case 62500:
					chargepump=(chargepump&0xF9);
					chargepump=chargepump|(3<<1);					
					break;

					case 125000:
					chargepump=(chargepump&0xC9);
					chargepump=chargepump|(0x3<<4);					
					break;

					case 142860:
					chargepump=(chargepump&0xC9);
					chargepump=chargepump|(0x3<<4);					
					chargepump=chargepump|(0x1<<1);/* RSA RSB */
					break;
					}
				Tuner->WrBuffer[2] = (unsigned char) chargepump;  
	
				channel_size=Tuner->ChannelBW;
				#ifdef HOST_PC
				UsrRdInt("CHANNEL_WIDTH",&channel_size); 			
				#endif
				
				if (frequency<=68000) 	   Tuner->WrBuffer[3] = (unsigned char) 0x01; /* VHF   I */ 
				else if (frequency<=228000) Tuner->WrBuffer[3] = (unsigned char) 0x02; /* VHF III */
				else 					   Tuner->WrBuffer[3] = (unsigned char) 0x08; /*   UHF   */
  						
  				if (channel_size==7) Tuner->WrBuffer[3]= ( (Tuner->WrBuffer[3]) | (0x10));
  					
				/* Tuner->WrBuffer[4] = (unsigned char) Tuner->Address; */
				Tuner->WrSubBuffer[2]= 	((chargepump & 0xC7)|(3<<3));
				Atc=1;
				#ifdef HOST_PC
				UsrRdInt("Atc",&Atc); 			
				#endif
				Tuner->WrSubBuffer[3] = (unsigned char) (0x20 | (Atc<<7));
				
				/******* ATC Implementation*****/
				
				#ifdef STTUNER_ATCBIT_TUNER_ENABLE
				TunerReadWrite((TUNER_Handle_t)Tuner,WRITE); /* Write the initial tuner*/
				/*** Now making ATC bit = 1 ******/
				if (frequency < 735000)
				{
				   Tuner->WrBuffer[2]= 0x9C;/*** Enabling Auxillary Byte to
				                                 be written over BandSwitch
				                                 byte*****/
				}
				else
				{
				   Tuner->WrBuffer[2]= 0xDC;/*** Enabling Auxillary Byte to
				                                 be written over BandSwitch
				                                 byte*****/   
				}
				 
				Tuner->WrBuffer[3]= 0xA0;/*** Making ATC bit 1 to make AGC
				                              current high . This is recommendable
				                              during channel select and search
				                              mode *****/
			        #endif
			/*******************************************************/
			break;	
			#endif

		#ifdef STTUNER_DRV_TER_TUN_TDA6650
		case  	STTUNER_TUNER_TDA6650:
					#ifdef HOST_PC
					UsrRdInt("Atc",&Atc); 			
					#endif
				chargepump=(unsigned char)0xC8;
				switch(Tuner->StepSize)
					{
					case 50000:
		
					chargepump=(chargepump|0x3);	
					
					break;
					
					case 166667:
					
					chargepump=chargepump|(2);
					break;

					case 62500:
					chargepump=chargepump;
					break;

					case 125000:
					chargepump=chargepump|(0x4);					
					break;

					case 142860:
					chargepump=chargepump|(0x1);/* RSA RSB */
					break;
					}
				Tuner->WrBuffer[2]    = (unsigned char) chargepump;  
				Tuner->WrSubBuffer[2] = (unsigned char) chargepump;  	
				Tuner->WrBuffer[3]    = (unsigned char) 0xC4;  								
				if (frequency<=68000) 	    Tuner->WrSubBuffer[3] = (unsigned char) (0xC1); /* VHF   I */ 
				else if (frequency<=228000) Tuner->WrSubBuffer[3] = (unsigned char) (0xC2); /* VHF III */
				else 					    Tuner->WrSubBuffer[3] = (unsigned char) (0xC4); /*   UHF   */
				Tuner->WrBuffer[4]    = (unsigned char)((Tuner->WrBuffer[2] & 0x80)|(0x3)|(Atc<<3));
				Tuner->WrSubBuffer[4] = (unsigned char)( Tuner->WrBuffer[4]& (0xF7)); 		/*   UHF   */
  		break;	
		#endif

		#ifdef STTUNER_DRV_TER_TUN_TDM1316
		case  	STTUNER_TUNER_TDM1316:
					#ifdef HOST_PC
					UsrRdInt("Atc",&Atc); 			
					#endif
				chargepump=(unsigned char)0xC8;
				switch(Tuner->StepSize)
					{
					case 50000:
		
					chargepump=(chargepump|0x3);	
					
					break;

⌨️ 快捷键说明

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