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

📄 tuner.c

📁 STV0299 Minituner driver, for ST chipset
💻 C
📖 第 1 页 / 共 5 页
字号:
//#include "globaldefs.h"

/* standard/CVI includes */
#include "string.h"
#include "stdlib.h"

/* application includes */
#include "tuner.h"
#include "gen_macros.h"

static U32 MAX2116_LOOKUP[10][4]=	{/* low			high	  vco   div/2 */
										850000,		931600,		4,		0,    
										931600,		1037000,	5,		0,    
										1037000,	1126000,	6,		0,    
										1126000,	1217000,	0,		1,    
										1217000,	1356000,	1,		1,
										1356000,	1513000,	2,		1,
										1513000,	1671000,	3,		1,
										1671000,	1864000,	4,		1,
										1864000,	2072000,	5,		1,
										2072000,	2247000,	6,		1
									};
									
static U32 IX2410_LOOKUP[10][4]=	{/* low			high	  vco   div/2 */
										950000,		970000,		5,		1,
										970000,		1065000,	6,		1,    
										1065000,	1170000,	7,		1,    
										1170000,	1300000,	1,		0,
										1300000,	1445000,	2,		0,
										1445000,	1607000,	3,		0,
										1607000,	1778000,	4,		0,
										1778000,	1942000,	5,		0,
										1942000,	2131000,	6,		0,
										2131000,	2150000,	7,		0
									};
									
static U32 IX2476_LOOKUP[8][4]=		{/* low			high	  vco   div/2 */
										950000,		1065000,	6,		1,    
										1065000,	1170000,	7,		1,    
										1170000,	1300000,	1,		0,
										1300000,	1445000,	2,		0,
										1445000,	1607000,	3,		0,
										1607000,	1778000,	4,		0,
										1778000,	1942000,	5,		0,
										1942000,	2150000,	6,		0
									};
									
static U32 STB6K_LOOKUP[11][3]=		{/* low			high	  osm */
										950000,		1000000,	0xA,
										1000000,	1075000,	0xC,  
										1075000,	1200000,	0x0,  
										1200000,	1300000,	0x1,
										1300000,	1370000,	0x2,
										1370000,	1470000,	0x4,
										1470000,	1530000,	0x5,
										1530000,	1650000,	0x6,
										1650000,	1800000,	0x8,
										1800000,	1950000,	0xA,
										1950000,	2150000,	0xC
									};
									
static U32 TUNERSAT_LOOKUP[4][5]=	{/* low			high		div4	rdiv	presc32 */
										950000,		992000,		1,		1,		0,
										992000,		1300000,	1,  	1,		1,
										1300000,	1984000,	0,  	2,		0,
										1984000,	2150000,	0,		2,		1
									};
									
/* Default values for sharp VG1011 tuner registers	*/
U8 DefVG0011Val[VG0011_NBREGS]=		{0x34,0x7C,0x95,0x80,0x00};
	
/* Default values for sharp HZ1184 tuner registers	*/
U8 DefHZ1184Val[HZ1184_NBREGS]=		{0x22,0x10,0x86,0x8a,0x00};	

/* Default values for maxim 2116 tuner registers	*/
U8 DefMAX2116Val[MAX2116_NBREGS]=	{0x00,0x84,0xb7,0x30,0x29,0x42,0x06,0x14,0x29};

/* Default values for philips SU1200 tuner registers	*/
U8 DefSU1200Val[SU1200_NBREGS]=		{0x08,0x52,0x81,0xE0,0x00};

/* Default values for samsung TBMU301 tuner registers	*/
U8 DefTBMU301Val[TBMU301_NBREGS]=	{0x08,0x52,0x81,0xC0,0x00};

/* Default values for Sharp IX2410 tuner registers	*/
U8 DefIX2410Val[IX2410_NBREGS]=		{0x12,0x50,0xd2,0x28,0x00};

/* Default values for Sharp IX2476 tuner registers	*/
U8 DefIX2476Val[IX2476_NBREGS]=		{0x09,0x60,0xf5,0x2c,0x00};

/* Default values for rf magic STB6000 tuner registers	*/ 
#ifndef STB6000_30MHZ
	/* reference divider is set to 4 */ 
	U8 DefSTB6000Val[STB6000_NBREGS]={0x01,0x7a,0x3c,0x6c,0x04,0x07,0x9e,0xdf,0xd0,0x50,0xfb,0x4f,0x81};
#else
	/* reference divider is set to 30 to keep 1Mhz tuner step */  
	U8 DefSTB6000Val[STB6000_NBREGS]={0x01,0x7a,0x3c,0x6c,0x1e,0x07,0x9e,0xdf,0xd0,0x50,0xfb,0x4f,0x81};	
#endif

/* Default values for rf magic STB6100 tuner registers	*/
U8 DefSTB6100Val[STB6100_NBREGS]=	{0x80,0x9c,0x4a,0x26,0x3c,0x3b,0xcd,0xdc,0x8f,0x4d,0xeb,0xde};

/* Default values for tuner sat */
U8 DefTUNERSATVal[TUNERSAT_NBREGS]= {0x07,0xa3,0x92,0x37,0x05,0x00,0x00,0x05};


/*****************************************************
**FUNCTION	::	PowOf2
**ACTION	::	Compute  2^n (where n is an integer) 
**PARAMS IN	::	number -> n
**PARAMS OUT::	NONE
**RETURN	::	2^n
*****************************************************/
static U32 PowOf2(U32 number)
{
	U32 i;
	U32 result=1;
	
	for(i=0;i<number;i++)
		result*=2;
		
	return result;
}

STCHIP_Handle_t TunerInit(TUNER_Model_t Model,char *TunerName,U8 TunerI2cAddress,STCHIP_Handle_t RepeaterHost)
{
	TUNER_Params_t	hTunerParams = NULL;
	STCHIP_Info_t	ChipInfo;
	STCHIP_Handle_t hTuner = NULL;
	
    U8             *DefVal;

    /*
    **   REGISTER CONFIGURATION
    **     ----------------------
    */
    hTunerParams = calloc (1,sizeof(TUNER_InitParams_t));	/* Allocation of the chip structure	*/ 
    
    if(hTunerParams != NULL)
    {
    	hTunerParams->Model		= Model;    		/* Tuner model */
    	strcpy(ChipInfo.Name,TunerName);			/* Tuner name */
    	ChipInfo.RepeaterHost = RepeaterHost;		/* Repeater host */
		ChipInfo.Repeater = FALSE;					/* Tuner has no embedded repeater */
		ChipInfo.RepeaterFn = NULL;				    /* see above */
		ChipInfo.I2cAddr = TunerI2cAddress;			/* Init tuner I2C address */
    	ChipInfo.pData = hTunerParams;				/* Store tunerparams pointer into Chip structure */
        	    
    	switch(hTunerParams->Model)
    	{
    		case TUNER_NULL:
    			/* dummy tuner only used when no tuner is required */
    			hTunerParams->Reference = 0;				/* 0 MHz reference */
    			hTunerParams->IF = 0; 					/* 0 MHz intermediate frequency */
    			hTunerParams->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    			
    			/* fill elements of external chip data structure */
			    ChipInfo.NbRegs   = 1;
			    ChipInfo.NbFields = 1;
			    ChipInfo.ChipMode = STCHIP_MODE_NOSUBADR;
			    ChipInfo.WrStart  = 0;
			    ChipInfo.WrSize   = 0;     
			    ChipInfo.RdStart  = 0;     
			    ChipInfo.RdSize   = 0; 
			    
			    hTuner = ChipOpen(&ChipInfo);

		        if(hTuner != NULL)
				{
					/*	REGISTER INITIALISATION	*/
					/*	NOT_A_REG	*/
					ChipAddReg(hTuner,0,"NOT_A_REG",0x00,0x00,STCHIP_ACCESS_NON);  
					ChipAddField(hTuner,0,0,"NOT_A_FIELD",0,7,CHIP_UNSIGNED);
				}
    		break;
    		
    		case TUNER_VG0011:
    			/* 						*/
    			hTunerParams->Reference = 16000000;	/* 16 MHz reference */
    			hTunerParams->IF = 0; 				/* 0 MHz intermediate frequency */
    			hTunerParams->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
			
			    /* fill elements of external chip data structure */
			    ChipInfo.NbRegs   = TUNERSAT_NBREGS;
			    ChipInfo.NbFields = TUNERSAT_NBFIELDS;
			    ChipInfo.ChipMode = STCHIP_MODE_SUBADR_8;
			    ChipInfo.WrStart  = 0;
			    ChipInfo.WrSize   = 0;     
			    ChipInfo.RdStart  = 0;     
			    ChipInfo.RdSize   = 0;     

			    hTuner = ChipOpen(&ChipInfo);

		        if(hTuner != NULL)
				{
					DefVal = DefTUNERSATVal; /*  */    
					/*	REGISTER INITIALISATION	*/
					/*	TUNING_LSB	*/
					ChipAddReg(hTuner,RTUNERSAT_TUNING_LSB,"TUNING_LSB",0x0000,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_TUNING_LSB,FTUNERSAT_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);

					/*	TUNING_MSB	*/
					ChipAddReg(hTuner,RTUNERSAT_TUNING_MSB,"TUNING_MSB",0x0001,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_TUNING_MSB,FTUNERSAT_RDIV,"RDIV",6,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_TUNING_MSB,FTUNERSAT_ODIV,"ODIV",4,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_TUNING_MSB,FTUNERSAT_N_MSB,"N_MSB",0,4,CHIP_UNSIGNED);

					/*	CONTROL1	*/
					ChipAddReg(hTuner,RTUNERSAT_CONTROL1,"CONTROL1",0x0002,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_CONTROL1,FTUNERSAT_CALVCOSTRT,"CALVCOSTRT",7,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL1,FTUNERSAT_DIV4SEL,"DIV4SEL",6,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL1,FTUNERSAT_PRESC32ON,"PRESC32ON",5,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL1,FTUNERSAT_CF,"CF",0,5,CHIP_UNSIGNED);

					/*	CONTROL2	*/
					ChipAddReg(hTuner,RTUNERSAT_CONTROL2,"CONTROL2",0x0003,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_LCP,"LCP",6,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_XTALOUT,"XTALOUT",5,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_XTALON,"XTALON",4,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_CALOFF,"CALOFF",3,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_LPT,"LPT",2,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_RX,"RX",1,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL2,FTUNERSAT_SYN,"SYN",0,1,CHIP_UNSIGNED);

					/*	CONTROL3	*/
					ChipAddReg(hTuner,RTUNERSAT_CONTROL3,"CONTROL3",0x0004,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_CONTROL3,FTUNERSAT_DIVTEST,"DIVTEST",6,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL3,FTUNERSAT_CPTEST,"CPTEST",4,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_CONTROL3,FTUNERSAT_BBGAIN,"BBGAIN",0,4,CHIP_UNSIGNED);

					/*	STATUS1	*/
					ChipAddReg(hTuner,RTUNERSAT_STATUS1,"STATUS1",0x0005,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_STATUS1,FTUNERSAT_COMP,"COMP",7,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS1,FTUNERSAT_SEL,"SEL",1,6,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS1,FTUNERSAT_LOCK,"LOCK",0,1,CHIP_UNSIGNED);

					/*	STATUS2	*/
					ChipAddReg(hTuner,RTUNERSAT_STATUS2,"STATUS2",0x0006,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_STATUS2,FTUNERSAT_RON,"RON",7,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS2,FTUNERSAT_RCCA_LOFF,"RCCA_LOFF",6,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS2,FTUNERSAT_RC,"RC",0,6,CHIP_UNSIGNED);

					/*	STATUS3	*/
					ChipAddReg(hTuner,RTUNERSAT_STATUS3,"STATUS3",0x0007,*DefVal++,STCHIP_ACCESS_WR);
					ChipAddField(hTuner,RTUNERSAT_STATUS3,FTUNERSAT_RDK,"RDK",2,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS3,FTUNERSAT_CALTIME,"CALTIME",1,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RTUNERSAT_STATUS3,FTUNERSAT_CALRC_STRT,"CALRC_STRT",0,1,CHIP_UNSIGNED);
				}
			break;
			
			case TUNER_HZ1184:
				/* 						*/
    			hTunerParams->Reference = 4000000;			/* 4 MHz reference */
    			hTunerParams->IF = 0; 						/* 0 MHz intermediate frequency */
    			hTunerParams->IQ_Wiring = TUNER_IQ_INVERT;   /* No hardware IQ invertion */
    			
			    /* fill elements of external chip data structure */
			    ChipInfo.NbRegs   = HZ1184_NBREGS;
			    ChipInfo.NbFields = HZ1184_NBFIELDS;
			    ChipInfo.ChipMode = STCHIP_MODE_NOSUBADR;
				ChipInfo.WrStart  = RHZ1184_DIVM;
			    ChipInfo.WrSize   = 4;     
			    ChipInfo.RdStart  = RHZ1184_STATUS;     
			    ChipInfo.RdSize   = 1;     
			    
			    hTuner = ChipOpen(&ChipInfo);

		        if(hTuner != NULL)
				{
					DefVal = DefHZ1184Val; 
				
					/*	REGISTER INITIALISATION	*/
					/*	DIVM	*/
					ChipAddReg(hTuner,RHZ1184_DIVM,"DIVM",0x01,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RHZ1184_DIVM,FHZ1184_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);

					/*	DIVL	*/
					ChipAddReg(hTuner,RHZ1184_DIVL,"DIVL",0x02,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RHZ1184_DIVL,FHZ1184_N_LSB,"N_LSB",5,3,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_DIVL,FHZ1184_A,"A",0,5,CHIP_UNSIGNED);

					/*	CTRL1	*/
					ChipAddReg(hTuner,RHZ1184_CTRL1,"CTRL1",0x03,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RHZ1184_CTRL1,FHZ1184_N_HSB,"N_HSB",5,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL1,FHZ1184_PD5,"PD5",4,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL1,FHZ1184_PD4,"PD4",3,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL1,FHZ1184_R,"R",0,3,CHIP_UNSIGNED);

					/*	CTRL2	*/
					ChipAddReg(hTuner,RHZ1184_CTRL2,"CTRL2",0x04,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_CP,"CP",6,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_RE,"RE",5,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_RTS,"RTS",4,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_PD3,"PD3",3,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_PD2,"PD2",2,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_PD1,"PD1",1,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_CTRL2,FHZ1184_PD0,"PD0",0,1,CHIP_UNSIGNED);

					/*	STATUS	*/
					ChipAddReg(hTuner,RHZ1184_STATUS,"STATUS",0x05,*DefVal++,STCHIP_ACCESS_R);
					ChipAddField(hTuner,RHZ1184_STATUS,FHZ1184_POR,"POR",7,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_STATUS,FHZ1184_LOCK,"LOCK",6,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RHZ1184_STATUS,FHZ1184_MA,"MA",1,2,CHIP_UNSIGNED);
				}
			break;
			
			case TUNER_MAX2116:
				/* 						*/
    			hTunerParams->Reference = 4000000;			/* 4 MHz reference */
    			hTunerParams->IF = 0; 						/* 0 MHz intermediate frequency */
    			hTunerParams->IQ_Wiring = TUNER_IQ_NORMAL;   /* No hardware IQ invertion */
    			
			    /* fill elements of external chip data structure */
			    ChipInfo.NbRegs   = MAX2116_NBREGS;
			    ChipInfo.NbFields = MAX2116_NBFIELDS;
			    ChipInfo.ChipMode = STCHIP_MODE_NOSUBADR;
			    ChipInfo.WrStart  = RMAX2116_SUBADR;
			    ChipInfo.WrSize   = 7;     
			    ChipInfo.RdStart  = RMAX2116_STATUS;     
			    ChipInfo.RdSize   = 2;  
			    
			    hTuner = ChipOpen(&ChipInfo);

		        if(hTuner != NULL)
				{
					DefVal = DefMAX2116Val;
				
					/*	REGISTER INITIALISATION	*/
					/*	SUBADR	*/
					ChipAddReg(hTuner,RMAX2116_SUBADR,"SUBADR",0x00,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RMAX2116_SUBADR,FMAX2116_SUBADR,"SUBADR",0,8,CHIP_UNSIGNED);

					/*	NHIGH	*/
					ChipAddReg(hTuner,RMAX2116_NHIGH,"NHIGH",0x01,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RMAX2116_NHIGH,FMAX2116_DIV2,"DIV2",7,1,CHIP_UNSIGNED);
					ChipAddField(hTuner,RMAX2116_NHIGH,FMAX2116_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);

					/*	NLOW	*/
					ChipAddReg(hTuner,RMAX2116_NLOW,"NLOW",0x02,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RMAX2116_NLOW,FMAX2116_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);

					/*	R_CP_VCO	*/
					ChipAddReg(hTuner,RMAX2116_R_CP_VCO,"R_CP_VCO",0x03,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RMAX2116_R_CP_VCO,FMAX2116_R,"R",5,3,CHIP_UNSIGNED);
					ChipAddField(hTuner,RMAX2116_R_CP_VCO,FMAX2116_CP,"CP",3,2,CHIP_UNSIGNED);
					ChipAddField(hTuner,RMAX2116_R_CP_VCO,FMAX2116_VCO,"VCO",0,3,CHIP_UNSIGNED);

					/*	FILT_OUT	*/
					ChipAddReg(hTuner,RMAX2116_FILT_OUT,"FILT_OUT",0x04,*DefVal++,STCHIP_ACCESS_W);
					ChipAddField(hTuner,RMAX2116_FILT_OUT,FMAX2116_F_OUT,"F_OUT",0,7,CHIP_UNSIGNED);

					/*	LPF_DAC	*/

⌨️ 快捷键说明

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