📄 d0360minidrv.c
字号:
if(error != FE_NO_ERROR)
{
return error;
}
if ((pResult->SignalStatus == NOAGC) || (pResult->SignalStatus == NOSYMBOL) ) break;
if ((pResult->SignalStatus==LOCK_OK))
{
switch(delta_freq)
{
case 0:
pParams->prev_lock_status=LOCK_NO_OFF;
break;
case 2:
pParams->prev_lock_status=LOCK_RI_OFF;
break;
case -2:
pParams->prev_lock_status=LOCK_LE_OFF;
break;
default:
pParams->prev_lock_status=LOCK_LE_OFF;
break;
}
}
index++;
}
}
return error;
}
/*----------------------------------------------------
FUNCTION GetNoiseEstimator (18Oct01)
ACTION
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
void FE_360_GetNoiseEstimator( U32 *pNoise, U32 *pBer)
{
short unsigned int source,prf;
U32 quoz,error;
U32 snr=0;
error = ChipDemodGetField(ERROR_COUNT1_LO);
error += ChipDemodGetField(ERROR_COUNT1_HI) * 256;
error = error*100;
quoz=1;
if (!ChipDemodGetField(ERRMODE1))
{
source=ChipDemodGetField(ERR_SOURCE1);
quoz=FE_360_PowOf2(12+2*(ChipDemodGetField(NUM_EVENT1)));
switch (source)
{
case 0:
quoz=quoz*8;
prf=ChipDemodGetField(PR);
switch(prf)
{
case 0:
error=(U32)(error*(1.0/2.0)); /*gbgbcast*/
break;
case 1:
error=(U32)(error*(2.0/3.0)); /*gbgbcast*/
break;
case 2:
error=(U32)(error*(3.0/4.0)); /*gbgbcast*/
break;
case 3:
error=(U32)(error*(5.0/6.0)); /*gbgbcast*/
break;
case 4:
error=(U32)(error*(6.0/7.0)); /*gbgbcast*/
break;
case 5:
error=(U32)(error*(7.0/8.0)); /*gbgbcast*/
break;
default:
error=error;
break;
}
break;
case 1:
quoz=quoz*8;
break;
case 2:
break;
case 3:
error=error*188;
break;
default:
error=error;
break;
}
}
snr=ChipDemodGetField(CHC_SNR);
/** fix done here for the bug GNBvd20972 where pNoise is calculated in right percentage **/
*pNoise=((snr/8)*100)/32;
*pBer = error*(100000000/quoz);
return;
}
/*********************************************************
--FUNCTION :: FE_360_Tracking
--ACTION :: Once the chip is locked tracks its state
--PARAMS IN :: period/duration of tracking in seconds
:: Handle to Chip
--PARAMS OUT:: NONE
--RETURN :: NONE
--********************************************************/
void FE_360_Tracking(FE_360_InternalParams_t *pParams)
{
int change;
int locka,lockb,wd;
int pr,mod;
unsigned short int mode;
unsigned short int guard=3;
short int tempo;
/* hChip = pParams->hChip;*/
tempo=900;
change=0;
mode=(pParams->Results).Mode;
guard=(pParams->Results).Guard;
pr=(pParams->Results).Hprate;
mod=(pParams->Results).Modulation;
if (!ChipDemodGetField(TPS_LOCK) || (!ChipDemodGetField(LK)) )
{
ChipDemodSetField(OP2_VAL,0);
ChipDemodSetField(OP2_VAL,1);
ChipDemodSetField(OP2_VAL,0);
SystemWaitFor(50);
ChipDemodSetField(MODE,ChipDemodGetField(SYR_MODE));
ChipDemodSetField(GUARD,ChipDemodGetField(SYR_GUARD));
ChipDemodSetField(FORCE,1);
pParams->Echo.L1s2va3vp4 = 4;
ChipDemodSetField(CORE_ACTIVE,0);
SystemWaitFor(2);
ChipDemodSetField(CORE_ACTIVE,1);
ChipDemodSetField(OP2_VAL,0);
ChipDemodSetField(OP2_VAL,1);
SystemWaitFor(30);
ChipDemodSetField(OP2_VAL,0);
wd=300;
while ((wd>=0) && (!ChipDemodGetField(TPS_LOCK)) )
{
SystemWaitFor(24);
wd-=24;
}
locka=lockb=ChipDemodGetField(TPS_LOCK);
change=0;
if (locka)
{
if( (ChipDemodGetField(TPS_HPCODE)==pr) && (mod==ChipDemodGetField(TPS_CONST)) )
{
SystemWaitFor(100);
tempo-=80;
lockb=ChipDemodGetField(TPS_LOCK);
change=0;
}
else
change = 1;
}
if ((!lockb) && (!change))
{
ChipDemodSetField(OP2_VAL,0);
ChipDemodSetField(OP2_VAL,1);
SystemWaitFor(30);
ChipDemodSetField(OP2_VAL,0);
pParams->Echo.L1s2va3vp4 = 4;
ChipDemodSetField(CORE_ACTIVE,0);
SystemWaitFor(2);
ChipDemodSetField(CORE_ACTIVE,1);
ChipDemodSetField(OP2_VAL,0);
ChipDemodSetField(OP2_VAL,1);
SystemWaitFor(32);
ChipDemodSetField(OP2_VAL,0);
wd=300;
while ((wd>=0) && (!ChipDemodGetField(TPS_LOCK)) )
{
SystemWaitFor(32);
wd-=32;
}
if (wd>=0)
{
if( (ChipDemodGetField(TPS_HPCODE)!=pr) || (mod!=ChipDemodGetField(TPS_CONST)) ) change=1;
}
} /*end if locka */
} /* end if chipget.... */
if ( (ChipDemodGetField(TPS_LOCK ))&&(!change))
{
if ( ChipDemodGetField(SYR_GUARD) == 3)
{
/* pParams->L1s2va3vp4 = 4; */
/* it replaces the call to echo_proc */
passive_monitoring(&(pParams->Echo));
active_monitoring(&(pParams->Echo));
Echo_long_scan(&(pParams->Echo));
/* ********************************** */
/* eco_proc(hChip,&(pParams->Echo));*/
}
}
if (change)
{
if (ChipDemodGetField(TPS_CONST)==0)
{
;
}
SystemWaitFor(500);
if (ChipDemodGetField(TPS_CONST)==0)
{
SystemWaitFor(400);
}
ChipDemodSetField(MODE,ChipDemodGetField(SYR_MODE));
ChipDemodSetField(GUARD,ChipDemodGetField(SYR_GUARD));
ChipDemodSetField(FORCE,1);
ChipDemodSetField(OP2_VAL,0);
ChipDemodSetField(OP2_VAL,1);
ChipDemodSetField(OP2_VAL,0);
if (ChipDemodGetField(TPS_CONST)==0)
{
;
}
ChipDemodSetField(CORE_ACTIVE,0);
ChipDemodSetField(CORE_ACTIVE,1);
if (ChipDemodGetField(TPS_CONST)==0)
{
;
}
SystemWaitFor(400);
}
if (ChipDemodGetField(LK) )
{
pr=ChipDemodGetField(TPS_HPCODE);
mod=ChipDemodGetField(TPS_CONST);
(pParams->Results).Hprate=pr;
(pParams->Results).Modulation=mod;
}
ChipDemodSetField(FORCE,0);
return;
}
/**************************************************************************************/
/***** SET TRLNOMRATE REGISTERS *******************************/
void SET_TRLNOMRATE_REGS(short unsigned int value)
{
div_t divi;
divi=div(value,512);
ChipDemodSetField(TRL_NOMRATE_HI,divi.quot);
ChipDemodSetField(TRL_NOMRATE_LO,(divi.rem/2));
ChipDemodSetField(TRL_NOMRATE_LSB,(divi.rem%2));
}
/*************************************************************/
short unsigned int GET_TRLNOMRATE_VALUE(void)
{
short unsigned int value;
value= ChipDemodGetField(TRL_NOMRATE_HI)*512+ChipDemodGetField(TRL_NOMRATE_LO)*2+ChipDemodGetField(TRL_NOMRATE_LSB);
return value;
}
/**************************************************************/
signed int GET_TRL_OFFSET(void)
{
unsigned int u_var;
signed int s_var;
signed int i_int;
ChipDemodSetField(FREEZE,1);
/*ChipGetRegisters(hChip,R_TRL_NOMRATE1,4);*/
ChipDemodSetField(FREEZE,0);
/*s_var= 256* ChipGetFieldImage(hChip,TRL_TOFFSET_HI)+ChipGetFieldImage(hChip,TRL_TOFFSET_LO);*/
s_var= 256* ChipDemodGetField(TRL_TOFFSET_HI)+ChipDemodGetField(TRL_TOFFSET_LO);
if (s_var > 32768 ) s_var = s_var - 65536;
u_var= (512*ChipDemodGetField(TRL_NOMRATE_HI)+ChipDemodGetField(TRL_NOMRATE_LO)*2 + ChipDemodGetField(TRL_NOMRATE_LSB));
i_int=((signed)(1000000/u_var)*s_var)/2048;
return i_int;
}
void FE_360_Core_Switch(void)
{
ChipDemodSetField(CORE_ACTIVE,0);
ChipDemodSetField(CORE_ACTIVE,1);
SystemWaitFor(350);
return;
}
FE_360_SignalStatus_t FE_360_TRLNOMRATE_Tuning(void)
{
short unsigned int TRL_center,TRL_value ;
signed int OFFSET1,OFFSET2;
int i;
int Count=0;
if(ChipDemodGetField(TPS_LOCK)==1)
{
return LOCK_OK ;
}
else /** first else**/
{
TRL_center= GET_TRLNOMRATE_VALUE();
TRL_value=TRL_center;
for(i=0;i<5;i++)
{
TRL_value+=5;
SET_TRLNOMRATE_REGS(TRL_value);
FE_360_Core_Switch();
if(ChipDemodGetField(TPS_LOCK)==1)
break;
}
if (ChipDemodGetField(TPS_LOCK)==1)
return LOCK_OK;
else /**second else**/
{
TRL_value=TRL_center;
for(i=0;i<5;i++)
{
TRL_value-=5;
SET_TRLNOMRATE_REGS(TRL_value);
FE_360_Core_Switch();
if(ChipDemodGetField(TPS_LOCK)==1)
break;
}
if (ChipDemodGetField(TPS_LOCK)==1)
{
OFFSET1=GET_TRL_OFFSET();
if (OFFSET1 >=-5 && OFFSET1 <= 5)
{
return LOCK_OK;
}
else
{
if (OFFSET1>5 )
{
do
{
OFFSET2=OFFSET1;
SET_TRLNOMRATE_REGS(GET_TRLNOMRATE_VALUE()+1);
FE_360_Core_Switch();
OFFSET1= GET_TRL_OFFSET();
Count+=1;
}while (((OFFSET1>5) || (OFFSET1<-5))&&(Count<10));
return LOCK_OK;
}
else if( OFFSET1<-5 )
{
OFFSET2= OFFSET1;
do
{
OFFSET1=OFFSET2;
SET_TRLNOMRATE_REGS(GET_TRLNOMRATE_VALUE()-1);
OFFSET2= GET_TRL_OFFSET();
Count+=1;
}while (((OFFSET1>5) || (OFFSET1<-5))&&(Count<10));
/* printf(".........TRLNOMRATE VALUE HI ......%x\n",GET_TRLNOMRATE_VALUE(hChip)/512);
printf(".........TRLNOMRATE VALUE LOW ......%x\n",(GET_TRLNOMRATE_VALUE(hChip)%512)/2);
printf(".........TRLNOMRATE VALUE LOW ......%x\n",(GET_TRLNOMRATE_VALUE(hChip)%512)%2);*/
return LOCK_OK;
}
}/* end of else of if (OFFSET1==0)*/
}/* end of if (ChipDemodGetField(TPS_LOCK)==1)*/
return NOTPS;
}/* end of second else */
}/* end of first else*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -