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

📄 tun0299.c

📁 stv0299资料
💻 C
📖 第 1 页 / 共 2 页
字号:
		
		
		return Tuner.BandWidth[Tuner.SelectBW];  
	}
	else return 0;
}



/*****************************************************
**FUNCTION	::	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 TunerGetNbSteps(void)
{
	int nbsteps = 0;
	unsigned int Ncnt,Acnt,Prescaler;

	if(!Tuner.Error)
	{
		switch (Tuner.PLL)
		{
			case PLL_5522:
			case PLL_5655:
				nbsteps	= ((int)Tuner.WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= (int)Tuner.WrBuffer[1] & 0x000000FF;
			break ;

			case PLL_5659:
				nbsteps	 = ((int)Tuner.WrBuffer[0] & 0x0000007F)<<8L;
				nbsteps	|= ((int)Tuner.WrBuffer[1] & 0x000000FF);
				nbsteps	|= (((int)Tuner.WrBuffer[2] & 0x00000060 )<<10L);
			break;
			
			case PLL_TUA6100:
				Prescaler = (Tuner.WrBuffer[1] & 0x40) ? 64 : 32;	/* Prescaler = 64 if high 32 if low */
				Ncnt =	(((int)Tuner.WrBuffer[1] & 0x3)<<9)|
						(((int)Tuner.WrBuffer[2] & 0xFF)<<1)|
						(((int)Tuner.WrBuffer[3] & 0x80)>>7);	/* N counter value */
				Acnt =	(int)Tuner.WrBuffer[3] & 0x7F;			/* A counter value */
				nbsteps = (Prescaler * Ncnt) + Acnt; 
			break;
			
			default:
				Tuner.Error = TNR_PLL_ERR;
			break;
		}
	}
	
	return nbsteps;
}

/*****************************************************
**FUNCTION	::	TunerSetNbSteps
**ACTION	::	Set the number of steps of the tuner
**PARAMS IN	::	nbsteps ==> number of steps of the tuner
**PARAMS OUT::	NONE  
**RETURN	::	NONE
*****************************************************/
void TunerSetNbSteps(int nbsteps)
{
	unsigned int Ncnt,Acnt,Prescaler;
	int freq;

	if(!Tuner.Error)
	{
		switch(Tuner.PLL)
		{
			case PLL_5522:
			case PLL_5655:
				Tuner.WrBuffer[0]= (unsigned char)((nbsteps & 0x00007F00)>>8);
				Tuner.WrBuffer[1]= (unsigned char)(nbsteps & 0x000000FF);
			break ;

			case PLL_5659:
				Tuner.WrBuffer[0]= (unsigned char)((nbsteps & 0x00007F00)>>8);
				Tuner.WrBuffer[1]= (unsigned char)(nbsteps & 0x000000FF );
            /* VICKY - 010300 - corrected the programmble counter loading */
#if   0
				Tuner.WrBuffer[2]= (unsigned char)((((long)Tuner.WrBuffer[2])&0xFF9F)|(nbsteps>>10));
#else
				Tuner.WrBuffer[2]= (unsigned char)((((long)Tuner.WrBuffer[2])&0xFF9F)| ( ( nbsteps >> 10 ) & 0x60 ) );
#endif
			break;
			
			case PLL_TUA6100:
				Prescaler = (Tuner.WrBuffer[1] & 0x40) ? 64 : 32;	/* Prescaler = 64 if high 32 if low */
				Ncnt = nbsteps / Prescaler;							/* N counter = nbsteps / Prescaler	*/
				Acnt = nbsteps - (Ncnt * Prescaler);				/* A counter = nbsteps - N counter * Prescaler	*/
				
				Tuner.WrBuffer[1]= Tuner.WrBuffer[1]|((unsigned char)((Ncnt & 0x600)>>9));
				Tuner.WrBuffer[2]= (unsigned char)((Ncnt & 0x1FE)>>1);
				Tuner.WrBuffer[3]= (unsigned char)(((Ncnt & 0x01)<<7)|(Acnt & 0x7F));
				
				freq = TunerGetFrequency();
				
				Tuner.WrBuffer[1] = (Tuner.WrBuffer[1] & 0x7F) | ((freq>1525000) ? 0x80 : 0x00); /* VCO switching */ 
				Tuner.WrBuffer[1] = (Tuner.WrBuffer[1] & 0xCF) | ((freq>1430000) ? 0x00 : 0x20); /* N-counter value switching */  
			break;

			default:
				Tuner.Error = TNR_PLL_ERR;
			break ;
		}
		TunerReadWrite(WRITE);         
	}
}

/*****************************************************
**FUNCTION	::	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 TunerGetFrequency(void)
{
	int frequency = 0;
	
	if(Tuner.StepSize>0)
	{
		frequency = ((TunerGetNbSteps()*(Tuner.StepSize/2)) - 500*Tuner.IF)/500	;
		frequency *= Tuner.FreqFactor;
	}
	else
		Tuner.Error = TNR_STEP_ERR;
	
	return frequency; 
}


/*****************************************************
**FUNCTION	::	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 
*****************************************************/
int TunerSetFrequency(int frequency)
{
	int nbsteps = 0,
		chargepump = 0,
		bandwidth =0;
	
	TunerResetError();
	
	if(Tuner.StepSize > 0)
	{
		switch(Tuner.Type)
		{
			case TNR_EVALMAX:
				if(frequency < 1450000)
					chargepump = 0x40;
				else if(frequency < 2000000)
					chargepump = 0x80;
				else
					chargepump = 0xC0;
				
				Tuner.WrBuffer[3] = (Tuner.WrBuffer[3] & 0x3F) | chargepump;  
			   break;
			
			case TNR_VZ1011:
			case TNR_VG1011:
            /* VICKY - 010300 - band selection */
				if ( frequency < 1450000 )
            {
               /* low-band */
				   Tuner . WrBuffer [ 3 ] |= 0x08;
            }
            else
            {
				   Tuner . WrBuffer [ 3 ] &= ~0x08;
            }
            break;

	   /* Added by LP on 13/10/00 to optimize tuning process */
	         case TNR_DST7900:
			 #ifdef USE_PHILIPS_ZIF
			 if(frequency < 1500000)
					chargepump = 0x40;
				else if(frequency < 2000000)
					chargepump = 0x80;
				else
					chargepump = 0xC0;

			 Tuner.WrBuffer[3] = (Tuner.WrBuffer[3] & 0x3F) | chargepump;
			 #endif
			 break;
		  
	  /* Added by LP on 13/10/00 to optimize tuning process */
	         case TNR_SU1200:
			    if(frequency < 1500000)
					chargepump = 0x40;
				else if(frequency < 2000000)
					chargepump = 0x80;
				else
					chargepump = 0xC0;

			 Tuner.WrBuffer[3] = (Tuner.WrBuffer[3] & 0x3F) | chargepump;
			 break;

			default:
			   break;
		}
		
		nbsteps = (frequency * 500) / Tuner.FreqFactor;
		nbsteps = (nbsteps + (500 * Tuner.IF)) / (Tuner.StepSize / 2);
		
		TunerSetNbSteps(nbsteps);
	}

#if   0
   printf ( "TUNER_SET => R[%d] S[%d]\n",
         frequency,
	      TunerGetFrequency ( ) );
#endif

	return TunerGetFrequency();
}

#define  MAX_NO_OF_TUNER_RETRIES    3

/*****************************************************
**FUNCTION	::	TunerReadWrite
**ACTION	::	Read or write the tuner and put/use data in RdBuffer/WrBuffer
**PARAMS IN	::	mode ==> READ or WRITE 
**PARAMS OUT::	NONE  
**RETURN	::	NONE
*****************************************************/
void TunerReadWrite(int mode)
{
   int   iRetryCount;
/* LP - 26/06/00 - Spy added to trace retries - Delete in final version */
   int   Spy = 0;
	int status = 0;
	unsigned char subadr;

#if   0	
   if ( mode == WRITE )
   {
      printf ( "TunerData [%02X %02X %02X %02X]\n",
            Tuner . WrBuffer [ 0 ],
            Tuner . WrBuffer [ 1 ],
            Tuner . WrBuffer [ 2 ],
            Tuner . WrBuffer [ 3 ] );
   }
#endif
   
	if(!Tuner.Error)
	{
      iRetryCount = 0;
      Spy = MAX_NO_OF_TUNER_RETRIES;
      while ( iRetryCount < MAX_NO_OF_TUNER_RETRIES )
      {
		   if ( Tuner . Repeator )
			   RegSetField ( I2CT, 1 );
		
		   if ( mode == WRITE )
			   status = I2cReadWrite(WRITE,Tuner.Address,Tuner.WrBuffer,Tuner.WrSize);   
		   else
		   {
			   switch(Tuner.PLL)
			   {
				   case PLL_TUA6100:
					   subadr = 0x80;
					   status = I2cReadWrite(WRITE,Tuner.Address,&subadr,1);
					   if(Tuner.Repeator)
						   RegSetField(I2CT,1);
				   default:
					   status = I2cReadWrite(READ,Tuner.Address,Tuner.RdBuffer,Tuner.RdSize);
				      break;
			   }
		   }

		   if ( status == 0 )
         {
            Tuner.Error = TNR_NO_ERR;
            break;
         }

         ++iRetryCount;
			Tuner.Error = TNR_ACK_ERR;
	   }
   }
}


/*****************************************************
**FUNCTION	::	TunerGetTunerLock
**ACTION	::	Read the tuner state
**PARAMS IN	::	NONE 
**PARAMS OUT::	NONE  
**RETURN	::	1 if lock, 0 otherwyse
*****************************************************/
int TunerGetTunerLock(void)
{
	unsigned char byte;
	
	TunerResetError(); 
	
	TunerReadWrite(READ);
	
	if(!Tuner.Error)
	{
		switch(Tuner.PLL)
		{
			case PLL_TUA6100:
				byte = 0x80;
			break;
			
			default:
				byte = 0x40;
			break;
		}
		
		if(Tuner.RdBuffer[0] & byte)
			return 1;
	    else
			return 0;
	}
	else
		return 0;
}

/*{{{ PrintTunerInfo ()*/
void  PrintTunerInfo ( void )
{
   TUNER_PROP     stTunerProp;

   int   iTemp;

   TunerGetProperties ( &stTunerProp );
   
   do_report ( severity_info, "Tuner Info\n===========\n" );
   
   do_report ( severity_info, "Name         => %s\n",
         stTunerProp . Name );
   do_report ( severity_info, "Addr         => %02X\n",
         stTunerProp . Address );
   do_report ( severity_info, "PLL Type     => %d\n",
         stTunerProp . PLL );
   do_report ( severity_info, "IQ           => %d\n",
         stTunerProp . I_Q );
   do_report ( severity_info, "FreqFactor   => %d\n",
         stTunerProp . FreqFactor );
   do_report ( severity_info, "StepSize     => %d\n",
         stTunerProp . StepSize );
   do_report ( severity_info, "IF           => %d\n",
         stTunerProp . IF );
   do_report ( severity_info, "I2C Repeater => %s\n",
         stTunerProp . Repeator ? "ON" : "OFF" );

   do_report ( severity_info, "Tuner Params (W) [%d] =>",
         stTunerProp . WrSize );
   for ( iTemp = 0; iTemp < stTunerProp . WrSize; ++iTemp )
   {
      do_report ( severity_info, " %02X",
            stTunerProp . WrBuffer [ iTemp ] );
   }
   do_report ( severity_info, "\n" );

   do_report ( severity_info, "Tuner Params (R) [%d] =>",
         stTunerProp . RdSize );
   for ( iTemp = 0; iTemp < stTunerProp . RdSize; ++iTemp )
   {
      do_report ( severity_info, " %02X",
            stTunerProp . RdBuffer [ iTemp ] );
   }
   do_report ( severity_info, "\n" );

   do_report ( severity_info, "Tuner BW  (%d) =>",
         TUN_MAX_BW );
   for ( iTemp = 0; iTemp < TUN_MAX_BW; ++iTemp )
   {
      do_report ( severity_info, " %d",
            stTunerProp . BandWidth [ iTemp ] );
   }
   do_report ( severity_info, "\n" );

   do_report ( severity_info, "Curr Steps   => %ld\n",
         TunerGetNbSteps () );

   do_report ( severity_info, "Curr Freq    => %ld, %ld\n",
         TunerGetFrequency (),
         5150000 - TunerGetFrequency () );

   do_report ( severity_info, "Error        => %d\n",
         TunerGetError () );

   do_report ( severity_info, "\n" );
}
/*}}}*/

/*{{{ TunerGetType ()*/
TUNER_TYPE  TunerGetType ( void )
{
   return   Tuner . Type;
}
/*}}}*/

/*{{{ TunerGetStepSize ()*/
int   TunerGetStepSize ( void )
{
   #ifndef USE_PHILIPS_ZIF
   if ( Tuner . StepSize <= 0 || Tuner . StepSize > 125000 )
      return   125000;
   #endif

   return   Tuner . StepSize;
}
/*}}}*/

⌨️ 快捷键说明

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