📄 tuner.c
字号:
//#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 + -