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

📄 d0360_drv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -