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

📄 tuner.c

📁 STV0299 Minituner driver, for ST chipset
💻 C
📖 第 1 页 / 共 5 页
字号:

                ChipSetFieldImage(hTuner, FIX2476_TM, 1);
				ChipSetRegisters(hTuner,RIX2476_NHIGH,4);
				WAIT_N_MS(6);
				
				TunerGetStatus(hTuner);
				
			break;
			
			default:
			break;
		}
	}
		
	return error;
}

U32 TunerGetFrequency(STCHIP_Handle_t hTuner)
{
	TUNER_Params_t hTunerParams = NULL;
	U32 frequency = 0;
	U32 stepsize;
	U32 nbsteps;
	U32 divider = 0;
	U32 swallow;
	U32 psd2;	
	
	hTunerParams = (TUNER_Params_t) hTuner->pData;
	
	if(hTuner && hTunerParams && !hTuner->Error)	
	{
		switch(hTunerParams->Model)
		{
			case TUNER_VG0011:
				ChipGetRegisters(hTuner,RTUNERSAT_TUNING_LSB,2);
				divider = (ChipGetFieldImage(hTuner,FTUNERSAT_N_MSB)<<8)+ChipGetFieldImage(hTuner,FTUNERSAT_N_LSB);
				frequency = divider*1000;
			break;
			
			case TUNER_HZ1184:
				divider =   (ChipGetFieldImage(hTuner,FHZ1184_N_HSB)<<10)
				          + (ChipGetFieldImage(hTuner,FHZ1184_N_MSB)<<3)
				          + ChipGetFieldImage(hTuner,FHZ1184_N_LSB); 
				          
				swallow = ChipGetFieldImage(hTuner,FHZ1184_A);
				nbsteps = divider*32 + swallow;
				stepsize = 2*(hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FHZ1184_R))));
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;
			break;
			
			case TUNER_MAX2116:
				nbsteps =   (ChipGetFieldImage(hTuner,FMAX2116_N_MSB)<<8) 
						  + ChipGetFieldImage(hTuner,FMAX2116_N_LSB);
				
				stepsize = hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FMAX2116_R)+1));	
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;  
			break;
			
			case TUNER_SU1200:
				nbsteps =   (ChipGetFieldImage(hTuner,FSU1200_N_HSB)<<15)
				          + (ChipGetFieldImage(hTuner,FSU1200_N_MSB)<<8)
				          + ChipGetFieldImage(hTuner,FSU1200_N_LSB); 
				          
				stepsize = hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FSU1200_R) + 1));
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;
			break;
			
			case TUNER_TBMU301:
				nbsteps =   (ChipGetFieldImage(hTuner,FTBMU301_N_HSB)<<15)
				          + (ChipGetFieldImage(hTuner,FTBMU301_N_MSB)<<8)
				          + ChipGetFieldImage(hTuner,FTBMU301_N_LSB); 
				          
				stepsize = hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FTBMU301_R) + 1));
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;
			break;
			
			case TUNER_IX2410:
				nbsteps =  32 * ( (ChipGetFieldImage(hTuner,FIX2410_N_MSB)<<3) 
						  + ChipGetFieldImage(hTuner,FIX2410_N_LSB) ) 
						  + ChipGetFieldImage(hTuner,FIX2410_SDIV);
				
				stepsize = hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FIX2410_R)+2));	
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;  
			break;
			
			case TUNER_STB6000:
				divider =	(ChipGetFieldImage(hTuner,FSTB6000_N_MSB)<<1) 
							+ ChipGetFieldImage(hTuner,FSTB6000_N_LSB);
							
				swallow = ChipGetFieldImage(hTuner,FSTB6000_A);
				nbsteps = divider*16 + swallow;	/* N x P + A ; P=16*/			
				stepsize =  2*(hTunerParams->Reference / ChipGetFieldImage(hTuner,FSTB6000_R)); /* 2 x Fr / R */
				
				/*frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;*/ /* 2 x Fr x (PxN + A)/R */
				frequency = (nbsteps * (stepsize>>(ChipGetFieldImage(hTuner,FSTB6000_ODIV)+1)))/1000; /* 2 x Fr x (PxN + A)/R */
			break;
			
			case TUNER_STB6100:
				
				TunerRead(hTuner);
				swallow=(ChipGetFieldImage(hTuner,FSTB6100_NF_MSB)<<8)  /*Nf val*/
						+ChipGetFieldImage(hTuner,FSTB6100_NF_LSB);
				
				
				/*Ni = floor (fVCO / (fXTAL * P))*/
				divider=ChipGetFieldImage(hTuner,FSTB6100_NI); /*NI val*/
				psd2=ChipGetFieldImage(hTuner,FSTB6100_PSD2);
				
				frequency=(((1+psd2)*(hTunerParams->Reference/1000)*swallow)/PowOf2(9));
				frequency+=(hTunerParams->Reference/1000) * (divider)*(1+psd2);
				/*Flo=Fxtal*P*(Ni+Nf/2^9) . P=DIV2+1 */
				
				frequency=frequency/((ChipGetFieldImage(hTuner,FSTB6100_ODIV)+1)*2);
				 
				
			break;
			
			case TUNER_IX2476:
				nbsteps =  32 * ( (ChipGetFieldImage(hTuner,FIX2476_N_MSB)<<3) 
						  + ChipGetFieldImage(hTuner,FIX2476_N_LSB) ) 
						  + ChipGetFieldImage(hTuner,FIX2476_A);
				
				stepsize = hTunerParams->Reference / (PowOf2(ChipGetFieldImage(hTuner,FIX2476_REF)+2));	
				frequency = (nbsteps * stepsize)/1000 - hTunerParams->IF;  
			break;
			
			default:
				
			break;
		}
	}
	
	return frequency;
}


TUNER_Error_t TunerSetBandwidth(STCHIP_Handle_t hTuner,U32 Bandwidth)
{
	TUNER_Params_t hTunerParams = NULL;
	TUNER_Error_t error = TUNER_NO_ERR; 
	U8 u8;
	S32 filter;
	
	hTunerParams = (TUNER_Params_t) hTuner->pData;
	
	if(hTuner && hTunerParams)	
	{
		switch(hTunerParams->Model)
		{
			case TUNER_VG0011:
				u8=((Bandwidth-5000000)/2000000) & 0x1f;
				ChipSetField(hTuner,FTUNERSAT_CF,u8);
				ChipSetField(hTuner,FTUNERSAT_CALRC_STRT,1);
			break;
			
			case TUNER_TBMU301:
				/* No settable filter */
			break;
			
			case TUNER_HZ1184:
				if(Bandwidth < 20000000)
					u8 = 2;
				else if(Bandwidth >= 60000000)
					u8 = 10;
				else
					u8 = (Bandwidth - 10000000)/5000000 + 1;
				
				ChipSetFieldImage(hTuner,FHZ1184_PD2,0x01 & (u8>>3));
				ChipSetFieldImage(hTuner,FHZ1184_PD3,0x01 & (u8>>2));
				ChipSetFieldImage(hTuner,FHZ1184_PD4,0x01 & (u8>>1));
				ChipSetFieldImage(hTuner,FHZ1184_PD5,0x01 & u8);
				
				error = TunerWrite(hTuner);
			break;
			
			case TUNER_MAX2116:
				u8 = ChipGetFieldImage(hTuner,FMAX2116_M);
				
				if(u8)
				{
					filter = ((((S32)Bandwidth /2)/((S32)hTunerParams->Reference / (1000*u8))) * 1000 - 4000000)/145100 + 1;
					
					if(filter < 0)
						filter = 0;
					else if(filter > 0x7F)
						filter = 0x7F;
				}
				else
					filter = 0;
					
				ChipSetFieldImage(hTuner,FMAX2116_F_OUT,filter);
					
				error = TunerWrite(hTuner);      
			break;
			
			case TUNER_SU1200:
				ChipSetFieldImage(hTuner,FSU1200_P0,Bandwidth < 16000000);    
				
				error = TunerWrite(hTuner);
			break;
			
			case TUNER_IX2410:
				if(Bandwidth < 20000000)
					u8 = 3;
				else if(Bandwidth >= 60000000)
					u8 = 13;
				else
					u8 = (Bandwidth - 20000000)/4000000 + 3;
				
				ChipSetFieldImage(hTuner,FIX2410_PD2,0x01 & (u8>>3));
				ChipSetFieldImage(hTuner,FIX2410_PD3,0x01 & (u8>>2));
				ChipSetFieldImage(hTuner,FIX2410_PD4,0x01 & (u8>>1));
				ChipSetFieldImage(hTuner,FIX2410_PD5,0x01 & u8);
				
				error = TunerWrite(hTuner);
			break;
			
			case TUNER_STB6000:
				if(Bandwidth == 0)
				{
					ChipSetFieldImage(hTuner,FSTB6000_FCL,0);
					TunerWrite(hTuner);
				
				}
				else
				{
					if((Bandwidth/2) > 26000000)
						u8 = 31;
					else
						u8 = (Bandwidth/2)/1000000 + 5; 
				
					ChipSetFieldImage(hTuner,FSTB6000_FCL,0);
					TunerWrite(hTuner);
					ChipSetFieldImage(hTuner,FSTB6000_F,u8);
					error = TunerWrite(hTuner);  
					WAIT_N_MS(10);
					ChipSetFieldImage(hTuner,FSTB6000_FCL,7);
					TunerWrite(hTuner);
				}
			break;
			
			case TUNER_STB6100:
				if((Bandwidth/2) > 36000000)   /*F[4:0] BW/2 max =31+5=36 mhz for F=31*/
					u8 = 31;
				else if((Bandwidth/2) < 5000000) /* BW/2 min = 5Mhz for F=0 */
					u8 = 0;
				else							 /*if 5 < BW/2 < 36*/
					u8 = (Bandwidth/2)/1000000 - 5;
				
				ChipSetFieldImage(hTuner,FSTB6100_FCCK,(hTunerParams->Reference/1000000)); /* FCL_Clk=FXTAL/FCL=1Mhz */
				TunerWrite(hTuner);
				ChipSetFieldImage(hTuner,FSTB6100_F,u8);
				error = TunerWrite(hTuner);  
				ChipSetFieldImage(hTuner,FSTB6100_FCCK,0); /*FCL turned off*/
				TunerWrite(hTuner);
			
			break;
			
			case TUNER_IX2476:
				if(Bandwidth < 20000000)
					u8 = 3;
				else if(Bandwidth >= 60000000)
					u8 = 13;
				else
					u8 = (Bandwidth - 20000000)/4000000 + 3;
				
				ChipSetFieldImage(hTuner,FIX2476_PD2,0x01 & (u8>>3));
				ChipSetFieldImage(hTuner,FIX2476_PD3,0x01 & (u8>>2));
				ChipSetFieldImage(hTuner,FIX2476_PD4,0x01 & (u8>>1));
				ChipSetFieldImage(hTuner,FIX2476_PD5,0x01 & u8);
				
				error = TunerWrite(hTuner);
			break;
			
			default:
			break;
		}
	}
	
	return error;
}

U32 TunerGetBandwidth(STCHIP_Handle_t hTuner)
{
	TUNER_Params_t hTunerParams = NULL;
	U32 bandwidth = 0;
	U8 u8 = 0;
	
	hTunerParams =  (TUNER_Params_t) hTuner->pData;
	
	if(hTuner && hTunerParams)	
	{
		switch(hTunerParams->Model)
		{
			case TUNER_VG0011:
				bandwidth = (ChipGetField(hTuner,FTUNERSAT_CF)+5)*2000000; /* x2 for ZIF tuner */  	
			break;
			
			case TUNER_HZ1184:
				u8 = (ChipGetFieldImage(hTuner,FHZ1184_PD2) << 3)  +
					(ChipGetFieldImage(hTuner,FHZ1184_PD3) << 2)  +
					(ChipGetFieldImage(hTuner,FHZ1184_PD4) << 1)  +
					ChipGetFieldImage(hTuner,FHZ1184_PD5);
					
				bandwidth = (10000000 + (u8-2) * 2500000)*2; /* x2 for ZIF tuner */
			break;
			
			case TUNER_MAX2116:
				TunerRead(hTuner);
				u8 = ChipGetFieldImage(hTuner,FMAX2116_M);
				if(u8)
					bandwidth = ((hTunerParams->Reference / (u8*1000)) *
								((4000000 + 145100 * ChipGetFieldImage(hTuner,FMAX2116_F_IN))/1000))*2; /* x2 for ZIF tuner */ 
				else
					bandwidth = 0;
			break;
			
			case TUNER_SU1200:
				TunerRead(hTuner);
				if(ChipGetFieldImage(hTuner,FSU1200_P0))
					bandwidth = 16000000;
				else
					bandwidth = 60000000;
			break;
			
			case TUNER_TBMU301:
				bandwidth = 60000000;
			break;
			
			case TUNER_IX2410:
				u8 = (ChipGetFieldImage(hTuner,FIX2410_PD2) << 3)  +
					(ChipGetFieldImage(hTuner,FIX2410_PD3) << 2)  +
					(ChipGetFieldImage(hTuner,FIX2410_PD4) << 1)  +
					ChipGetFieldImage(hTuner,FIX2410_PD5);
					
				bandwidth = 20000000 + (u8-3) * 4000000; /* x2 for ZIF tuner */
			break;
			
			case TUNER_STB6000:
				u8 = ChipGetFieldImage(hTuner,FSTB6000_F);
				
				if(u8<5)
					bandwidth = 1000000;
				else
					bandwidth = (u8-5)*2000000;	/* x2 for ZIF tuner */	
			break;
			
			case TUNER_STB6100:
				
				TunerRead(hTuner);
				u8 = ChipGetFieldImage(hTuner,FSTB6100_F);

⌨️ 快捷键说明

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