📄 d0360_drv.c
字号:
mod=Result->Modulation;
if (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK) || (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,LK)) )
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
SystemWaitFor(50);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,MODE,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_MODE));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,GUARD,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,1);
Result->Echo.L1s2va3vp4 = 4;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
SystemWaitFor(2);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
SystemWaitFor(30);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
wd=300;
while ((wd>=0) && (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)) )
{
SystemWaitFor(24);
wd-=24;
}
locka=lockb=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK);
change=0;
if (locka)
{
if(Result->hier==STTUNER_HIER_LOW_PRIO)
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
if( (/*(STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE)*/pr_temp==pr) && (mod==STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)) )
{
SystemWaitFor(100);
tempo-=80;
lockb=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK);
change=0;
}
else
change = 1;
}
if ((!lockb) && (!change))
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
SystemWaitFor(30);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
Result->Echo.L1s2va3vp4 = 4;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
SystemWaitFor(2);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
SystemWaitFor(32);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
wd=300;
while ((wd>=0) && (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)) )
{
SystemWaitFor(32);
wd-=32;
}
if (wd>=0)
{
if(Result->hier==STTUNER_HIER_LOW_PRIO)
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
if( (/*STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE)*/pr_temp!=pr) || (mod!=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)) ) change=1;
}
} /*end if locka */
} /* end if chipget.... */
if ( (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK ))&&(!change))
{
if ( STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD) == 3)
{
/* pParams->L1s2va3vp4 = 4; */
/* it replaces the call to echo_proc */
passive_monitoring(DeviceMap,IOHandle,&(Result->Echo));
active_monitoring(DeviceMap,IOHandle,&(Result->Echo));
Echo_long_scan(DeviceMap,IOHandle,&(Result->Echo));
/* ********************************** */
/* eco_proc(DeviceMap,IOHandle,&(pParams->Echo));*/
}
}
if (change)
{
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
SystemWaitFor(500);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
SystemWaitFor(400);
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,MODE,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_MODE));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,GUARD,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
SystemWaitFor(400);
}
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,LK) )
{
if(Result->hier==STTUNER_HIER_LOW_PRIO)
{
Result->Lprate=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
Result->Hprate=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
/* pr=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);*/
mod=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST);
/*(pParams->Results).Hprate=pr;*/
Result->Modulation=mod;
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,0);
return;
}
/**************************************************************************************/
/***** SET TRLNOMRATE REGISTERS *******************************/
void SET_TRLNOMRATE_REGS(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,short unsigned int value)
{
div_t divi;
divi=div(value,512);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,TRL_NOMRATE_HI,divi.quot);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,TRL_NOMRATE_LO,(divi.rem/2));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,TRL_NOMRATE_LSB,(divi.rem%2));
}
/*************************************************************/
short unsigned int GET_TRLNOMRATE_VALUE(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
short unsigned int value;
value= STTUNER_IOREG_GetField(DeviceMap,IOHandle,TRL_NOMRATE_HI)*512+STTUNER_IOREG_GetField(DeviceMap,IOHandle,TRL_NOMRATE_LO)*2+STTUNER_IOREG_GetField(DeviceMap,IOHandle,TRL_NOMRATE_LSB);
return value;
}
/**************************************************************/
signed int GET_TRL_OFFSET(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
unsigned int u_var;
signed int s_var;
signed int i_int;
U8 trl_ctl1[5]={0};
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FREEZE,1);
STTUNER_IOREG_GetContigousRegisters(DeviceMap,IOHandle,R_TRL_CTL,5,trl_ctl1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FREEZE,0);
s_var= 256* trl_ctl1[4]+trl_ctl1[3];
if (s_var > 32768 ) s_var = s_var - 65536;
u_var= (512*trl_ctl1[2]+trl_ctl1[1]*2 + (trl_ctl1[0]&0x80)>>7);
i_int=((signed)(1000000/u_var)*s_var)/2048;
return i_int;
}
void FE_360_Core_Switch(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
SystemWaitFor(350);
return;
}
FE_360_SignalStatus_t FE_360_TRLNOMRATE_Tuning(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
short unsigned int TRL_center,TRL_value ;
signed int OFFSET1,OFFSET2;
int i;
int Count=0;
if(STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)==1)
{
return LOCK_OK ;
}
else /** first else**/
{
TRL_center= GET_TRLNOMRATE_VALUE(DeviceMap,IOHandle);
TRL_value=TRL_center;
for(i=0;i<5;i++)
{
TRL_value+=5;
SET_TRLNOMRATE_REGS(DeviceMap,IOHandle,TRL_value);
FE_360_Core_Switch(DeviceMap,IOHandle);
if(STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)==1)
break;
}
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,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(DeviceMap,IOHandle,TRL_value);
FE_360_Core_Switch(DeviceMap,IOHandle);
if(STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)==1)
break;
}
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)==1)
{
OFFSET1=GET_TRL_OFFSET(DeviceMap,IOHandle);
if (OFFSET1 >=-5 && OFFSET1 <= 5)
{
return LOCK_OK;
}
else
{
if (OFFSET1>5 )
{
do
{
OFFSET2=OFFSET1;
SET_TRLNOMRATE_REGS(DeviceMap,IOHandle,GET_TRLNOMRATE_VALUE(DeviceMap,IOHandle)+1);
FE_360_Core_Switch(DeviceMap,IOHandle);
OFFSET1= GET_TRL_OFFSET(DeviceMap,IOHandle);
Count+=1;
}while (((OFFSET1>5) || (OFFSET1<-5))&&(Count<10));
return LOCK_OK;
}
else if( OFFSET1<-5 )
{
OFFSET2= OFFSET1;
do
{
OFFSET1=OFFSET2;
SET_TRLNOMRATE_REGS(DeviceMap,IOHandle,GET_TRLNOMRATE_VALUE(DeviceMap,IOHandle)-1);
OFFSET2= GET_TRL_OFFSET(DeviceMap,IOHandle);
Count+=1;
}while (((OFFSET1>5) || (OFFSET1<-5))&&(Count<10));
/* STTBX_Print(".........TRLNOMRATE VALUE HI ......%x\n",GET_TRLNOMRATE_VALUE(hChip)/512);
STTBX_Print(".........TRLNOMRATE VALUE LOW ......%x\n",(GET_TRLNOMRATE_VALUE(hChip)%512)/2);
STTBX_Print(".........TRLNOMRATE VALUE LOW ......%x\n",(GET_TRLNOMRATE_VALUE(hChip)%512)%2);*/
return LOCK_OK;
}
}/* end of else of if (OFFSET1==0)*/
}/* end of if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)==1)*/
return NOTPS;
}/* end of second else */
}/* end of first else*/
}
/************** Get TPS Cell ID********************/
ST_ErrorCode_t FE_360_GETCELLID(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,Cell_Id_Value * cell_id )
{
BOOL CELL_ID_FOUND_LSB,
CELL_ID_FOUND_MSB;
ST_ErrorCode_t Error = ST_NO_ERROR;
int FrameId , Cell_1, Cell_2,Cell_id;
int Counter=0;
int Tempbuf_MSB[2] = {0};
int Tempbuf_LSB[2] = {0};
int Counter_MSB =0 , Counter_LSB =0 , Tempbuf_MSB_Fill_Flag =0 ,Tempbuf_LSB_Fill_Flag=0;
U8 tps_rcvd1[7]={0};
CELL_ID_FOUND_LSB=FALSE;
CELL_ID_FOUND_MSB=FALSE;
cell_id->lsb=0;
cell_id->msb=0;
task_delay((ST_GetClocksPerSecond()/1000)*200);
for(Counter =0 ;Counter <= 600 ; Counter++)
{
#ifndef ST_OSLINUX
task_lock();
#endif
STTUNER_IOREG_GetContigousRegisters(DeviceMap,IOHandle,R_TPS_RCVD1,7,tps_rcvd1);
FrameId = ((tps_rcvd1[6]&0x03)&0x03);
Cell_1=tps_rcvd1[4];
Cell_2=tps_rcvd1[5];
#ifndef ST_OSLINUX
task_unlock();
#endif
task_delay((ST_GetClocksPerSecond()/1000)*6);
Cell_id= (Cell_1>>6)+(Cell_2<<2);
if (CELL_ID_FOUND_MSB ==FALSE)
{
if((FrameId==1) ||(FrameId==3))
{
if ( Counter_MSB == 0)
{
if(Tempbuf_MSB_Fill_Flag ==0)
{
Tempbuf_MSB[0]= Cell_id;
Tempbuf_MSB_Fill_Flag ++;
}
else
{
Tempbuf_MSB[1] = Cell_id;
if (Tempbuf_MSB[0] == Tempbuf_MSB[1] )
{
Counter_MSB ++;
}
else
{
Counter_MSB = 0;
Tempbuf_MSB_Fill_Flag = 0 ;
}
}
}/* end of Counter_MSB == 0 */
else
{
Tempbuf_MSB[1] = Cell_id;
if (Tempbuf_MSB[0] == Tempbuf_MSB[1] )
{
Counter_MSB ++;
if ( Counter_MSB > 3)
{
CELL_ID_FOUND_MSB = TRUE ;
cell_id->msb = Tempbuf_MSB[1];
}
}
else
{
Counter_MSB = 0;
Tempbuf_MSB_Fill_Flag = 0 ;
}
}
}/* end of frameid if */
}
if (CELL_ID_FOUND_LSB ==FALSE)
{
if((FrameId==0) || (FrameId==2))
{
if ( Counter_LSB == 0)
{
if(Tempbuf_LSB_Fill_Flag ==0)
{
Tempbuf_LSB[0]= Cell_id;
Tempbuf_LSB_Fill_Flag ++;
}
else
{
Tempbuf_LSB[1] = Cell_id;
if (Tempbuf_LSB[0] == Tempbuf_LSB[1] )
{
Counter_LSB ++;
}
else
{
Counter_LSB = 0;
Tempbuf_LSB_Fill_Flag = 0 ;
}
}
}/* end of Counter_LSB == 0 */
else
{
Tempbuf_LSB[1] = Cell_id;
if (Tempbuf_LSB[0] == Tempbuf_LSB[1] )
{
Counter_LSB ++;
if ( Counter_LSB > 3 )
{
CELL_ID_FOUND_LSB = TRUE ;
cell_id->lsb = Tempbuf_LSB[1];
}
}
else
{
Counter_LSB = 0;
Tempbuf_LSB_Fill_Flag = 0 ;
}
}/* end of else of if Counter_LSB == 0 */
}/* end of if((FrameId==0) || (FrameId==2)) */
} /* end of if (CELL_ID_FOUND_LSB ==FALSE) */
task_delay((ST_GetClocksPerSecond()/1000)*0);
if ((CELL_ID_FOUND_MSB ==TRUE ) && (CELL_ID_FOUND_LSB ==TRUE ))
{
break;
}
}/* for loop */
if ((CELL_ID_FOUND_MSB ==FALSE ) && (CELL_ID_FOUND_LSB ==FALSE ))
{
Error = ST_ERROR_TIMEOUT ;
}
return Error;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -