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