📄 tuner.c
字号:
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 + -