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

📄 d0362_drv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 3 页
字号:

/* includes ---------------------------------------------------------------- */
/* C libs */
#ifdef ST_OSLINUX
   #include "stos.h"
#else
#include  <stdlib.h>
#include "sttbx.h"
#endif


/* STAPI */
#include "sttuner.h"
#include "sti2c.h"
#include "stcommon.h"

#include "stevt.h"

/* local to sttuner */
#include "util.h"       /* generic utility functions for sttuner */ 
#include "dbtypes.h"    /* data types for databases */
#include "sysdbase.h"   /* functions to accesss system data */ 

#include "ioarch.h"     /* I/O for this driver */ 
#include "ioreg.h"      /* I/O for this driver */

#include "tuntdrv.h"
/* common includes */
#include "d0362_echo.h"
#include "d0362.h"
#include "d0362_drv.h"
#include "d0362_map.h"

/* common includes */

/* Current LLA revision	*/
static ST_Revision_t Revision362  = " STV0362-LLA_REL_3.0(GUI) ";

#define M6_F_GAIN_SRC_HI        0x0A
#define M6_F_GAIN_SRC_LO        0x28
#define M6_F_TRL_NOMRATE0       0x00
#define M6_F_TRL_NOMRATE8_1     0x01
#define M6_F_TRL_NOMRATE16_9    0x41

#define M7_GAIN_SRC_HI        	0x0C
#define M7_GAIN_SRC_LO        	0xE4    /*For normal IF Mode*/

#define M7_E_GAIN_SRC_HI        0x07
#define M7_E_GAIN_SRC_LO        0x6C    /* For long path IF / IQ modes */ 

#define M7_F_TRL_NOMRATE0       0x00	   	/* ok */
#define M7_F_TRL_NOMRATE8_1     0xD6   	/* ok */
#define M7_F_TRL_NOMRATE16_9    0x4B   	/* ok */


#define M8_GAIN_SRC_HI        	0x0B
#define M8_GAIN_SRC_LO        	0xB8 	/*For normal IF Mode*/ 

#define M8_E_GAIN_SRC_HI		0x08
#define M8_E_GAIN_SRC_LO		0x86	/* For long path IF / IQ modes */ 

#define M8_F_TRL_NOMRATE0       0x01	   	/* ok */
#define M8_F_TRL_NOMRATE8_1     0xAB   	/* ok */
#define M8_F_TRL_NOMRATE16_9    0x56   	/* ok */


#ifdef ST_OS21
#define UTIL_Delay(micro_sec) task_delay((signed int)(((micro_sec) + 999) / 1000) * ST_GetClocksPerSecond() / 1000)
#define Delay(x) task_delay((signed int)(ST_GetClocksPerSecond()*x));
#else
#define UTIL_Delay(micro_sec) task_delay((unsigned int)(((micro_sec) + 999) / 1000) * ST_GetClocksPerSecond() / 1000)
#define Delay(x) task_delay((unsigned int)(ST_GetClocksPerSecond()*x));
#endif

#define SystemWaitFor(x) UTIL_Delay((x*1000))

#if defined (ST_OS21) || defined(ST_OSLINUX)
#define WAIT_N_MS_362(X)     task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#else
#define WAIT_N_MS_362(X)     task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#endif

TUNTDRV_InstanceData_t *TUNTDRV_GetInstFromHandle(TUNER_Handle_t Handle);





#define DELTA 666

  #define DELTA_T 10

/* dcdc #define CPQ_LIMIT 23*/
#define CPQ_LIMIT 23

U16 CellsCoeffs_8MHz[6][5]={ 
						{0x10EF,0xE205,0x10EF,0xCE49,0x6DA7},  /* CELL 1 COEFFS */
						{0x2151,0xc557,0x2151,0xc705,0x6f93},  /* CELL 2 COEFFS */ 
						{0x2503,0xc000,0x2503,0xc375,0x7194},  /* CELL 3 COEFFS */ 
						{0x20E9,0xca94,0x20e9,0xc153,0x7194},  /* CELL 4 COEFFS */ 
						{0x06EF,0xF852,0x06EF,0xC057,0x7207},  /* CELL 5 COEFFS */ 
						{0x0000,0x0ECC,0x0ECC,0x0000,0x3647}   /* CELL 6 COEFFS */ 
					  } ;


U16 CellsCoeffs_7MHz[6][5]={ 
				{0x12CA,0xDDAF,0x12CA,0xCCEB,0x6FB1},  /* CELL 1 COEFFS */
				{0x2329,0xC000,0x2329,0xC6B0,0x725F},  /* CELL 2 COEFFS */ 
				{0x2394,0xC000,0x2394,0xC2C7,0x7410},  /* CELL 3 COEFFS */ 
				{0x251C,0xC000,0x251C,0xC103,0x74D9},  /* CELL 4 COEFFS */ 
				{0x0804,0xF546,0x0804,0xC040,0x7544},  /* CELL 5 COEFFS */ 
				{0x0000,0x0CD9,0x0CD9,0x0000,0x370A}   /* CELL 6 COEFFS */ 
			  } ;

U16 CellsCoeffs_6MHz[6][5]={ 
				{0x12CA,0xDDAF,0x12CA,0xCCEB,0x6FB1},  /* CELL 1 COEFFS */
				{0x2329,0xC000,0x2329,0xC6B0,0x725F},  /* CELL 2 COEFFS */ 
				{0x2394,0xC000,0x2394,0xC2C7,0x7410},  /* CELL 3 COEFFS */ 
				{0x251C,0xC000,0x251C,0xC103,0x74D9},  /* CELL 4 COEFFS */ 
				{0x0804,0xF546,0x0804,0xC040,0x7544},  /* CELL 5 COEFFS */ 
				{0x0000,0x0CD9,0x0CD9,0x0000,0x370A}   /* CELL 6 COEFFS */ 
			  } ;


/***********************************************************
**FUNCTION	::	Drv0362_GetLLARevision
**ACTION	::	Returns the 362 LLA driver revision
**RETURN	::	Revision362
***********************************************************/
ST_Revision_t Drv0362_GetLLARevision(void)
{
	return (Revision362);
}

/***************************************************** 
**FUNCTION	::	FE_362_Pow
**ACTION	::	Compute  x^y (where n is an integer) 
**PARAMS IN ::  number -> n
**PARAMS OUT::  NONE
**RETURN	::	x^y
*****************************************************/ 
int FE_362_Pow(int number1,int number2)
{
int i;
int result=1;

	for(i=0;i<number2;i++)
		result *=number1;

return result;
}
/*****************************************************
**FUNCTION	::	FE_362_Pow
**ACTION	::	Compute  2^n (where n is an integer) 
**PARAMS IN	::	number -> n
**PARAMS OUT::	NONE
**RETURN	::	2^2
*****************************************************/
int FE_362_PowOf2(int number)
{
	int i;
	int result=1;
	
	for(i=0;i<number;i++)
	{
		result*=2;
	}
	
}
		
		
/*****************************************************
--FUNCTION		::	FE_362_AGC_IIR_LOCK_DETECTOR_SET
--ACTION		::	Sets Good values for AGC IIR lock detector
--PARAMS IN		::	
--PARAMS OUT	::	None 
--***************************************************/
void  FE_362_AGC_IIR_LOCK_DETECTOR_SET(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)

{
		
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_LSB,0x00);
	
	/* Lock detect 1 */
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_CHOICE,0x00);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_MSB,0x06);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_AUT_AGC_TARGET_LSB,0x04);

	/* Lock detect 2 */
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_CHOICE,0x01);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_MSB,0x06);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_AUT_AGC_TARGET_LSB,0x04);
	
	/* Lock detect 3 */
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_CHOICE,0x02);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_MSB,0x01);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_AUT_AGC_TARGET_LSB,0x00);
	
	/* Lock detect 4 */
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_CHOICE,0x03);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_LOCK_DETECT_MSB,0x01);
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_AUT_AGC_TARGET_LSB,0x00);

}

/*****************************************************
--FUNCTION		::	FE_362_IIR_FILTER_INIT
--ACTION		::	
--PARAMS IN		::	
--PARAMS OUT	::	None 
--***************************************************/

void  FE_362_IIR_FILTER_INIT(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,U8 Bandwidth)

{


	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_NRST_IIR,0);


	switch (Bandwidth)
	{
	
		case STTUNER_CHAN_BW_6M:
			FE_362_FilterCoeffInit(DeviceMap,IOHandle,CellsCoeffs_6MHz);
		        break;
		
		case STTUNER_CHAN_BW_7M:
			FE_362_FilterCoeffInit(DeviceMap,IOHandle,CellsCoeffs_7MHz);
		        break;
		
		case STTUNER_CHAN_BW_8M:
			FE_362_FilterCoeffInit(DeviceMap,IOHandle,CellsCoeffs_8MHz);
		        break;	
	
	}


	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_NRST_IIR,1);   

}


/*****************************************************
--FUNCTION		::	FE_362_AGC_IIR_RESET
--ACTION		::	AGC reset procedure
--PARAMS IN		::	
--PARAMS OUT	::	None 
--***************************************************/
void FE_362_AGC_IIR_RESET(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle) 
{

	U8 com_n;

	com_n=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_COM_N);
	
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_N,0x07);
	
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_SOFT_RSTN,0x00);  
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_AGC_ON,0x00); 
	
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_SOFT_RSTN,0x01);  
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_AGC_ON,0x01);  
	
	STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_COM_N,com_n);

}

/*********************************************************
--FUNCTION	::	FE_362_FilterCoeffInit
--ACTION	::	Apply filter coeffs values
				
--PARAMS IN	::	Handle to the Chip
--PARAMS OUT::	NONE
--********************************************************/
void FE_362_FilterCoeffInit(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,U16 CellsCoeffs[][5])		
{			

	S32 i,j;
		
		for(i=1;i<=6;i++)
		{
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_IIR_CELL_NB,i-1);   
				
			for(j=1;j<=5;j++)
			{
				STTUNER_IOREG_SetField(DeviceMap,IOHandle,(F0362_IIR_CX_COEFF1_MSB+2*(j-1)), MSB(CellsCoeffs[i-1][j-1]));
				STTUNER_IOREG_SetField(DeviceMap,IOHandle,(F0362_IIR_CX_COEFF1_LSB+2*(j-1)), LSB(CellsCoeffs[i-1][j-1])); 
		
			}
		
		}

}


/*****************************************************
--FUNCTION	::	FE_362_WaitTuner
--ACTION	::	Wait for tuner locked
--PARAMS IN	::	TimeOut	->	Maximum waiting time (in ms) 
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void FE_362_WaitTuner(STTUNER_tuner_instance_t *TunerInstance,U32 TimeOut, BOOL *TunerLocked )
{
	int Time=0;	 
	ST_ErrorCode_t Error;
	*TunerLocked = FALSE;
	while(!*TunerLocked && (Time<TimeOut))
	{
		WAIT_N_MS_362(1);
		Error = (TunerInstance->Driver->tuner_IsTunerLocked)(TunerInstance->DrvHandle, TunerLocked); 
		Time++;
	}
	Time--;
}



/*****************************************************
--FUNCTION	::	FE_362_Algo
--ACTION	::	Search for Signal, Timing, Carrier and then data at a given Frequency, 
--				in a given range:

--PARAMS IN	::	
--PARAMS OUT::	
--RETURN	::	Type of the founded signal (if any)

--REMARKS   ::  This function is supposed to replace FE_362_SearchRun according
--				to last findings on SYR block
--***************************************************/
FE_362_SignalStatus_t FE_362_Algo(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_362_SearchParams_t *pParams,STTUNER_Handle_t TopLevelHandle)
{
	FE_362_SignalStatus_t ret_flag;	
	S16 wd,ii,tempo;
	U16 ppm,try,u_var,mode,guard,seuil;
	U8 v_search,Rvsearch;	
	try=0;
	do
	{
			ret_flag=LOCKOK_362;     
	
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_MODE,pParams->Mode);
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_GUARD,pParams->Guard);		
			STTUNER_IOREG_SetField(DeviceMap,IOHandle, F0362_FORCE,pParams->Force);
	
			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_CORE_ACTIVE,0);
			WAIT_N_MS_362(5);


			STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0362_CORE_ACTIVE,1);

			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_AGC_LOCK);
			wd=70;
		
			while ((u_var==0) && (wd>0))
			{
				WAIT_N_MS_362(10);	
				wd-=10;
				u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_AGC_LOCK);
			}
			
			if(!u_var)
			{
				ret_flag=NOAGC_362;
				
				break;
			}
			#ifdef STTUNER_DEBUG_LOCK_STAGES
			STTBX_Print(("\n AGC LOCKED \n"));
			#endif	
			
			wd=120; /* dcdc modifs gbgb */
			
			
			u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_SYR_LOCK);
	
			while ( (!u_var) && (wd>0))
			{
				WAIT_N_MS_362(5);
				wd-=5;
				u_var=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_SYR_LOCK);
			}
			if(!u_var)
			{
				ret_flag=NOSYMBOL_362;				
				#ifdef STTUNER_DEBUG_LOCK_STAGES
                                STTBX_Print(("\n SYMBOL NOT LOCKED \n"));
                                #endif
                              
				break;
			}
			#ifdef STTUNER_DEBUG_LOCK_STAGES
                        STTBX_Print(("\n SYMBOL LOCKED \n"));
                        #endif
                     
          	mode =STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_SYR_MODE) ;
			guard=STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0362_SYR_GUARD);
			
			if(mode == STTUNER_MODE_2K)
			{
			   STTUNER_IOREG_SetRegister(DeviceMap,IOHandle,R0362_CHP_TAPS,0x01); /***For 2k mode the chp_taps reg. must
			                                               ***always set to 0x01***/
			}
			else
			{
			   STTUNER_IOREG_SetRegister(DeviceMap,IOHandle,R0362_CHP_TAPS,0x03);/***For 8k mode the chp_taps reg. must
			                                               ***always set to 0x03***/
			   		  
			}			
			tempo=30<<(2*mode);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -