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

📄 stv0399drv.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
#define COSHIPAPI_NIM
#include "cs_qpsk.h"
#include "cs_i2c.h"
#include "cs_os.h"
//#include "cs_serial.h"
#include "cs_gpio.h"
#include "cs_frnpublic.h"
#include "CS_typedef.h"
#include "CSHDI_typedef.h"
#include "cs_assert.h"

#include "stv0399drv.h"

//#define CSNIM_DEBUG

#define	STV0399ADDRESS	0xD0

#define STV0399_CHIPID	0xB0

#define STV0399REG_ID				0x00
#define STV0399REG_ACR				0x02
#define STV0399REG_F22FR			0x03
#define STV0399REG_DACR1			0x04
#define STV0399REG_DACR2			0x05
#define STV0399REG_DiSEqC			0x06
#define STV0399REG_DiSEqC_FIFO		0x07
#define STV0399REG_DiSEqC_STATUS	0x08
#define STV0399REG_IOCFG1			0x0A
#define STV0399REG_IOCFG2			0x0B
#define STV0399REG_AGC0C			0x0C
#define STV0399REG_AGC0R			0x0D
#define STV0399REG_AGC1C			0x0E
#define STV0399REG_DCOFF			0x0F

#define STV0399REG_RTC				0x10
#define STV0399REG_AGC1R			0x11
#define STV0399REG_AGC2O			0x13
#define STV0399REG_TLSR				0x14	
#define STV0399REG_CFD				0x15	
#define STV0399REG_ACLC				0x16	
#define STV0399REG_BCLC				0x17	
#define STV0399REG_R8PSK			0x18	
#define STV0399REG_LDT				0x19	
#define STV0399REG_LDT2				0x1A	
#define STV0399REG_AGC0CMD			0x1B	
#define STV0399REG_AGC0I			0x1C	
#define STV0399REG_AGC1S			0x1D	
#define STV0399REG_AGC1P			0x1E	

#define STV0399REG_TLIR				0x20	
#define STV0399REG_AGC2I1			0x21	
#define STV0399REG_AGC2I2			0x22	
#define STV0399REG_RTF				0x23
#define STV0399REG_VSTATUS			0x24	
#define STV0399REG_LDI				0x25	
#define STV0399REG_ECNTM			0x26	
#define STV0399REG_ECNTL			0x27	
#define STV0399REG_SFRH				0x28	
#define STV0399REG_SFRM				0x29	
#define STV0399REG_SFRL				0x2A	
#define STV0399REG_CFRM				0x2B	
#define STV0399REG_CFRL				0x2C	
#define STV0399REG_NIRH				0x2D	
#define STV0399REG_NIRL				0x2E	
#define STV0399REG_VERROR			0x2F
	
#define STV0399REG_FECM				0x30	
#define STV0399REG_VTH0				0x31	
#define STV0399REG_VTH1				0x32	
#define STV0399REG_VTH2				0x33	
#define STV0399REG_VTH3				0x34	
#define STV0399REG_VTH4				0x35	
#define STV0399REG_VTH5				0x36	
#define STV0399REG_PR				0x37	
#define STV0399REG_VSEARCH			0x38	
#define STV0399REG_RS				0x39	
#define STV0399REG_RSOUT			0x3A	
#define STV0399REG_ERRCNTL			0x3B	
#define STV0399REG_VITPROG			0x3C	
#define STV0399REG_ERRCNTL2			0x3D	
#define STV0399REG_ECNTM2			0x3E	
#define STV0399REG_ECNTL2			0x3F	
#define STV0399REG_DIVOUT			0x40	
#define STV0399REG_LPFCR			0x41	
#define STV0399REG_DIVCTRL			0x42	
#define STV0399REG_SYNTH1			0x43	
#define STV0399REG_SYNTH2			0x44	
#define STV0399REG_SYNTH3			0x45	
#define STV0399REG_SYNTCTRL			0x46	
#define STV0399REG_SYNTCTRL2		0x47	
#define STV0399REG_SYSCTRL			0x48	
#define STV0399REG_AGC1EP			0x49	
#define STV0399REG_AGC1ES			0x4A	

//int g_CSQPSKLockFlag = 1;

static BYTE g_bHWResetGPIOIndex[MAX_TUNER_NUM]= { 0xFF, 0xFF};
static BYTE g_bTSOutputFormat[MAX_TUNER_NUM]= { 0, 0};

static HCSHANDLE	g_hdlSTV0399I2C[MAX_TUNER_NUM]= { 0, 0};

#define STV0399_BETA_MASK		0x3F
#define STV0399_CFD_ON_MASK		0x80

#define STV0399_SYM_MASK		0x01

#define STV0399_MODE_COEF_MASK	0x08

#define STV0399_CF_MASK			0x80
#define STV0399_LK_MASK			0x08

#define		STV0399_N_BYP_MASK		0x40
#define		STV0399_A_DIS_MASK		0x04

#define	STV0399_VLOW_MASK		0x02
#define	STV0399_VHIGH_MASK		0x20

#define STV0399_PLL_FACTOR_MASK 0x08
#define STV0399_CMD_MASK		0x08
#define STV0399_RESET_SYNT_MASK 0x02

#define STV0399_MD_MASK			0x1F
#define STV0399_FILTER_MASK		0x3F

#define STV0399_ERRMODE_MASK	0x80

#define STV0399_MODE_8PSK_MASK	0x80


#define STV0399_TUNERSTEP	3500000
#define STV0399_SEARCHRANGE	5000000
#define STV0399_ROLLOFF		35

typedef enum
{
	STV0399_X,
	STV0399_E
} STV0399Tuner_Type_t;


typedef enum
{
	CSQPSK_NO_CARRIER,
	CSQPSK_CF,
	CSQPSK_LK
} STV0399LOCK_STATE_t;
	typedef enum
	{
		VCO_TOO_HIGH,			/* VCO selected is too high */
		VCO_TOO_LOW,			/* VCO selected is too low	*/
		VCO_LOCKED				/* VCO locked				*/
	} STV0399VCO_STATE_t;


	typedef enum
	{
		NOAGC1=0,
		AGC1OK,
		NOTIMING,
		ANALOGCARRIER,
		TIMING_OK,
		NOAGC2,
		AGC2OK,
		NOCARRIER,
		CARRIEROK,
		NODATA,
		FALSELOCK,
		DATAOK,
		OUTOFRANGE,
		RANGEOK
	} STV0399SIGNALTYPE_t;

	typedef enum
	{
		FE_1_2	= 1,
		FE_2_3	= 1<<1,   
		FE_3_4	= 1<<2,   
		FE_5_6	= 1<<3,
		FE_6_7	= 1<<4,
		FE_7_8	= 1<<5,
		FE_8_9	= 1<<6
	}STV0399Rate_t;

typedef enum
{
	FE_IERR_NO,				/*	no error		*/
	FE_IERR_I2C,			/*	I2C error		*/
	FE_IERR_ZERODIV,		/*	division by zero	*/
	FE_IERR_PARAM,			/*	wrong parameters	*/
	FE_IERR_UNKNOWN			/*	unknown error	*/
} STV0399ErrorType_t;

typedef enum
{
	FE_IERRLOC_NOWHERE,		/*	no location		*/
	FE_IERRLOC_SRHINIT,		/*	in SearchInit	*/
	FE_IERRLOC_SRHRUN,		/*	in SearchRun	*/
	FE_IERRLOC_SRHTERM		/*	in SearchTerm	*/
} STV0399Location_t;
	typedef enum
	{
		COUNTER1 = 0,
		COUNTER2 = 1
	} STV0399ERRORCOUNTER_t;

typedef struct
{
	STV0399ErrorType_t Type;	/* Error type	*/
	STV0399Location_t Location;	/* Error location	*/
} STV0399InternalError_t;

	typedef enum
	{
	  	FE_MOD_BPSK,
	  	FE_MOD_QPSK,
	  	FE_MOD_8PSK
	} STV0399Modulation_t;
	typedef enum
	{
		FE_BAND_LOW,
		FE_BAND_HIGH
	} STV0399Bands_t;

	typedef enum
	{
		FE_POL_HORIZONTAL	= 1,
		FE_POL_VERTICAL		= 1<<1
	}STV0399Polarization_t;
	typedef struct
	{
		int Locked;						/* Transponder locked					*/
		DWORD Frequency;						/* transponder frequency (in KHz)		*/
		DWORD SymbolRate;						/* transponder symbol rate  (in Mbds)	*/
		STV0399Modulation_t Modulation;		/* modulation							*/
		STV0399Polarization_t Polarization;	/* Polarization							*/
		STV0399Bands_t Band;				/* Band									*/
		STV0399Rate_t Rate;					/* puncture rate 						*/       
		int Power;							/* Power of the RF signal (dBm)			*/			
		DWORD	C_N;							/* Carrier to noise ratio				*/
		DWORD	BER;							/* Bit error rate						*/
	} STV0399SignalInfo_t;

int EVM[MAX_TUNER_NUM];

/* structures -------------------------------------------------------------- */
/*	Internal result structure	*/
typedef struct
{
	STV0399SIGNALTYPE_t      SignalType;	/*	Type of founded signal	*/
	STV0399Polarization_t    Polarization;	/*	Polarization	*/
	STV0399Rate_t            PunctureRate;	/*	Puncture rate found	*/
	DWORD                      Frequency;		/*	Transponder frequency (KHz)	*/
	DWORD                      SymbolRate; 	/*	Symbol rate (Bds)	*/
} STV0399InternalResults_t;


typedef struct
{
	STV0399SIGNALTYPE_t State;	/*	Current state of the search algorithm */

	DWORD	Frequency,			/*	Current tuner frequency (KHz) */
			SymbolRate,			/*	Symbol rate (Bds) */
			MasterClock,		/*	Master clock frequency (Hz) */
			BaseFreq,			/*	Start tuner frequency (KHz) */
			Quartz;				/*	Quartz frequency (Hz) */
	int		FreqOffset,			/*	Frequency offset (Hz) for spurious workaround */
			Mclk,				/*	Divider factor for masterclock (binary value) */
			SearchRange,		/*	Search range (Hz) */
			SubRange,			/*	Current sub range (Hz) */
			TunerStep,			/*	Tuner step (Hz) */
			TunerOffset,		/*	Tuner offset relative to the carrier (Hz) */
			TunerBW,			/*	Current bandwidth of the tuner (Hz) */
			RollOff;			/*	Current RollOff of the filter (x100) */

	short int		DerotFreq,			/*	Current frequency of the derotator (Hz) */
			DerotPercent,		/*	Derotator step (in thousands of symbol rate) */
			DerotStep,			/*	Derotator step (binary value) */
			Direction,			/*	Current search direction */
			Tagc1,				/*	Agc1 time constant (ms) */
			Tagc2,				/*	Agc2 time constant (ms) */
			Ttiming,			/*	Timing loop time constant (ms) */
			Tderot,				/*	Derotator time constant (ms) */
			Tdata,				/*	Data recovery time constant (ms) */
			SubDir;				/*	Direction of the next sub range */

	STV0399InternalResults_t	Results;	/* Results of the search	*/
	STV0399InternalError_t		Error;		/* Last error encountered	*/
}STV0399InternalParams_t;
    typedef enum STTUNER_Modulation_e
    {
        STTUNER_MOD_NONE   = 0x00,  /* Modulation unknown */
        STTUNER_MOD_ALL    = 0x3FF, /* Logical OR of all MODs */
        STTUNER_MOD_QPSK   = 1,
        STTUNER_MOD_8PSK   = (1 << 1),
        STTUNER_MOD_QAM    = (1 << 2),
        STTUNER_MOD_4QAM   = (1 << 3),
        STTUNER_MOD_16QAM  = (1 << 4),
        STTUNER_MOD_32QAM  = (1 << 5),
        STTUNER_MOD_64QAM  = (1 << 6),
        STTUNER_MOD_128QAM = (1 << 7),
        STTUNER_MOD_256QAM = (1 << 8),
        STTUNER_MOD_BPSK   = (1 << 9)
    }
    STTUNER_Modulation_t;
#define MIN(x,y) ((x) < (y)) ? (x) : (y)
#define MAX(x,y) ((x) > (y)) ? (x) : (y)
#define ABS(X)   ((X)<0 ?   (-X) : (X))
#define STV0399_CFMASK	0x80

//=========================================================================================
#define STV0399MAXLOOKUPSIZE	50
// For 0399E
#define MINIMUM_GAP 18000 /* Minimum gap size between master clock Harmonic and tuner frequency (KHz) */
#define MINIMUM_GAP_low 10000
#define MINIMUM_GAP_2 33000


typedef struct
{
	int nRealValue;	/*	real value (10000 x C/N or power )	*/
	int nRegValue;	/*	register value (C/N estimator value or AGC1 integrator value )	*/
} STV0399LookPoint_t;

	/*	Lookup table definition	*/
typedef struct
{
	int nSize;		/*	Size of the lookup table	*/
	STV0399LookPoint_t pTable[STV0399MAXLOOKUPSIZE]; 	/*	Lookup table	*/
} STV0399LookUp_t;
//#define TUNER_TYPE_ADD   0x7FFFFDFE

static BYTE g_b22KMode[MAX_TUNER_NUM]= { 0, 0};
static DWORD g_dwPatchSemID[MAX_TUNER_NUM]= { 0, 0};
int g_Tuner_Type[MAX_TUNER_NUM];

//=========================================================================================
//#ifdef STV0399E_DRV
static STV0399LookUp_t STV0399ERFLookUp = 
{
	16,
	{
		-100,	-200,
		-150,	-190,
		-200,	-140,
		-250,	-85,
		-300,	-35,
		-350,	10,
		-400,	65,
		-450,	120,
		-500,	170,
		-550,	220,
		-600,	275,
		-650,	325,
		-700,	370,
		-750,	420,
		-800,	435,
		-840,	475
	}
};
											
static STV0399LookUp_t STV0399ECN_LookUp =	
{
	20,
	{
		15,		9600,
		20,		9450,
		30,		9000,
		40,		8250,
		50,		7970,
		60,		7360,
		70,		6770,
		80,		6200,
		90,		5670,
		100,	5190,
		110,	4740,
		120,	4360,
		130,	4010,
		140,	3710,
		150,	3440,
		160,	3210,
		170,	3020,
		180,	2860,
		190,	2700,
		200,	2600
	}
};

static STV0399ESignalQuality_LookUp[20][2] =	{
												    10,	 15,
													20,	 21,
													30,	 27,
													40,	 33,
													50,	 39,
													60,	 45,
													70,	 51,
													80,	 57,
													90,	 63,
													100, 69,
													110, 75,
													120, 81,
													130, 87,
													140, 93,
													150,100,
													160,100,
													170,100,
													180,100,
													190,100,
													200,100
												};
//#else
static STV0399LookUp_t STV0399RFLookUp = 
{
	15,
	{
		-100,	-200,
		-150,	-190,
		-200,	-140,
		-250,	-90,
		-300,	-40,
		-350,	10,
		-400,	60,
		-450,	110,
		-500,	140,
		-550,	190,
		-600,	235,
		-650,	285,
		-700,	340,
		-750,	390,
		-800,	440
	}
};
											
static STV0399LookUp_t STV0399CN_LookUp =	
{
	20,
	{
		15,		9600,
		20,		9450,
		30,		9000,
		40,		8250,
		50,		7970,
		60,		7360,
		70,		6770,
		80,		6200,
		90,		5670,
		100,	5190,
		110,	4740,
		120,	4360,
		130,	4010,
		140,	3710,
		150,	3440,

⌨️ 快捷键说明

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