📄 tuner.c
字号:
//#include <ansi_c.h>
//#include <utility.h>
#include "string.h"
#include "stdlib.h"
#include "gen_macros.h"
#include "tuner.h"
/*#include "RF4000Init.h"*/ // Required for RF4000 library function proto-types.
/*#include "mt2060.h"*/
#if (0)
/*****************************************************
**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;
}
#endif
TUNER_Handle_t TunerInit(TUNER_InitParams_t *hTunerInitParams)
{
TUNER_Handle_t hTuner = NULL;
U8 *DefVal;
/*
** REGISTER CONFIGURATION
** ----------------------
*/
hTuner = calloc (1,sizeof(TUNER_InitParams_t)); /* Allocation of the chip structure */
if((hTuner != NULL) && (hTunerInitParams != NULL))
{
hTuner->Model = hTunerInitParams->Model; /* Tuner model */
hTuner->NbDefVal = hTunerInitParams->NbDefVal; /* number of default values (must match number of 399 registers) */
hTuner->DefVal = hTunerInitParams->DefVal; /* pointer to table of default values */
switch(hTunerInitParams->Model)
{
case TUNER_NULL:
hTuner->StepSize = 0; /* 4 MHz StepSize */
hTuner->IF = 0; /* 479.5 MHz intermediate frequency */
hTuner->BandWidth=0;
hTuner->IQ_Wiring = TUNER_IQ_NORMAL; /* No hardware IQ invertion */
/* fill elements of external chip data structure */
hTunerInitParams->Chip->NbRegs = 1;
hTunerInitParams->Chip->NbFields = 1;
hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
hTunerInitParams->Chip->WrStart = 0;
hTunerInitParams->Chip->WrSize = 0;
hTunerInitParams->Chip->RdStart = 0;
hTunerInitParams->Chip->RdSize = 0;
hTuner->Chip = ChipOpen(hTunerInitParams->Chip);
if(hTuner->Chip != NULL)
{
/* REGISTER INITIALISATION */
/* DIVM */
ChipAddReg(hTuner->Chip,0,"NOT_A_REG",0x00,0x00,STCHIP_ACCESS_NON);
ChipAddField(hTuner->Chip,0,0,"NOT_A_FIELD",0,7,CHIP_UNSIGNED);
}
break;
#if (0)
case TUNER_RF4000:
hTuner->IF = hTunerInitParams->IF;
hTuner->BandWidth = hTunerInitParams->BandWidth;
hTuner->IQ_Wiring = hTunerInitParams->IQ_Wiring;
hTuner->StepSize = hTunerInitParams->StepSize;
if(hTunerInitParams->NbDefVal > 0)
{
hTuner->Chip = ChipOpen(hTunerInitParams->Chip);
if(hTuner->Chip != NULL)
{
if (RF4000_doInit(hTuner) == 1)
{
// Initialization error.
//printf("\nInitialization error\n");
}
}
}
break;
#endif
case TUNER_TDM1300:
/* */
hTuner->StepSize = 166667; /* 166,667 Khz StepSize */
hTuner->IF = 36130; /* 36 MHz intermediate frequency */
hTuner->BandWidth=8;
hTuner->IQ_Wiring = TUNER_IQ_NORMAL; /* No hardware IQ invertion */
/* fill elements of external chip data structure */
hTunerInitParams->Chip->NbRegs = TDM1300_NBREGS;
hTunerInitParams->Chip->NbFields = TDM1300_NBFIELDS;
hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
hTunerInitParams->Chip->WrStart = RTDM1300_P_DIV1;
hTunerInitParams->Chip->WrSize = 4;
hTunerInitParams->Chip->RdStart = RTDM1300_STATUS;
hTunerInitParams->Chip->RdSize = 1;
if(hTunerInitParams->NbDefVal == TDM1300_NBREGS)
{
hTuner->Chip = ChipOpen(hTunerInitParams->Chip);
if(hTuner->Chip != NULL)
{
DefVal = hTuner->DefVal; /* */
/* REGISTER INITIALISATION */
/* P_DIV1 */
ChipAddReg(hTuner->Chip,RTDM1300_P_DIV1,"P_DIV1",0x0000,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RTDM1300_P_DIV1,FTDM1300_FIX,"FIX",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_P_DIV1,FTDM1300_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);
/* P_DIV2 */
ChipAddReg(hTuner->Chip,RTDM1300_P_DIV2,"P_DIV2",0x0001,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RTDM1300_P_DIV2,FTDM1300_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);
/* CTRL1 */
ChipAddReg(hTuner->Chip,RTDM1300_CTRL1,"CTRL1",0x0002,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ONE,"ONE",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_D_A,"D_A",6,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ZERO,"ZERO",4,2,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_ATC,"ATC",3,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL1,FTDM1300_R_AL,"R_AL",0,3,CHIP_UNSIGNED);
/* CTRL2 */
ChipAddReg(hTuner->Chip,RTDM1300_CTRL2,"CTRL2",0x0003,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_CP,"CP",5,3,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP5,"SP5",4,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP4,"SP4",3,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_CTRL2,FTDM1300_SP123,"SP123",0,3,CHIP_UNSIGNED);
/* STATUS */
ChipAddReg(hTuner->Chip,RTDM1300_STATUS,"STATUS",0x0004,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_POR,"POR",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FL,"FL",6,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_ZERO2,"ZERO2",5,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FONE,"FONE",4,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_AGC,"AGC",3,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RTDM1300_STATUS,FTDM1300_FIX2,"FIX2",0,3,CHIP_UNSIGNED);
}
}
break;
case TUNER_DTT7592:
/* */
hTuner->StepSize = 166667; /* 166,667 Khz StepSize */
hTuner->IF = 36000; /* 36 MHz intermediate frequency */
hTuner->BandWidth=8;
hTuner->BandSelect=Band_UHF;
hTuner->IQ_Wiring = TUNER_IQ_NORMAL; /* No hardware IQ invertion */
/* fill elements of external chip data structure */
hTunerInitParams->Chip->NbRegs = DTT7592_NBREGS;
hTunerInitParams->Chip->NbFields = DTT7592_NBFIELDS;
hTunerInitParams->Chip->ChipMode = STCHIP_MODE_NOSUBADR;
hTunerInitParams->Chip->WrStart = RDTT7592_P_DIV1;
hTunerInitParams->Chip->WrSize = 4;
hTunerInitParams->Chip->RdStart = RDTT7592_STATUS;
hTunerInitParams->Chip->RdSize = 1;
if(hTunerInitParams->NbDefVal == DTT7592_NBREGS)
{
hTuner->Chip = ChipOpen(hTunerInitParams->Chip);
if(hTuner->Chip != NULL)
{
DefVal = hTuner->DefVal; /* */
/* REGISTER INITIALISATION */
/* P_DIV1 */
ChipAddReg(hTuner->Chip,RDTT7592_P_DIV1,"P_DIV1",0x0000,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RDTT7592_P_DIV1,FDTT7592_FIX,"FIX",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_P_DIV1,FDTT7592_N_MSB,"N_MSB",0,7,CHIP_UNSIGNED);
/* P_DIV2 */
ChipAddReg(hTuner->Chip,RDTT7592_P_DIV2,"P_DIV2",0x0001,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RDTT7592_P_DIV2,FDTT7592_N_LSB,"N_LSB",0,8,CHIP_UNSIGNED);
/* CTRL */
ChipAddReg(hTuner->Chip,RDTT7592_CTRL,"CTRL",0x0002,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_ONE,"ONE",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_CP,"CP",6,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_T,"T",3,3,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_RS,"RS",1,2,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_CTRL,FDTT7592_ZERO,"ZERO",0,1,CHIP_UNSIGNED);
/* BW_AUX */
ChipAddReg(hTuner->Chip,RDTT7592_BW_AUX,"BW_AUX",0x0003,*DefVal++,STCHIP_ACCESS_W);
ChipAddField(hTuner->Chip,RDTT7592_BW_AUX,FDTT7592_ATC,"ATC",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_BW_AUX,FDTT7592_BW_AUX,"BW_AUX",0,6,CHIP_UNSIGNED);
/* STATUS */
ChipAddReg(hTuner->Chip,RDTT7592_STATUS,"STATUS",0x0004,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_POR,"POR",7,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_FL,"FL",6,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_ONES,"ONES",4,2,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_AGC,"AGC",3,1,CHIP_UNSIGNED);
ChipAddField(hTuner->Chip,RDTT7592_STATUS,FDTT7592_A,"A",0,3,CHIP_UNSIGNED);
}
}
break;
case TUNER_MT2060:
hTuner->StepSize = 50000; /* 50 Khz StepSize */
hTuner->IF = 36000; /* 36 MHz intermediate frequency */
hTuner->FirstIF =1220; /* In MHz */
hTuner->BandWidth=8;
hTuner->IQ_Wiring = TUNER_IQ_NORMAL; /* No hardware IQ invertion */
/* fill elements of external chip data structure */
hTunerInitParams->Chip->NbRegs = MT2060_NBREGS;
hTunerInitParams->Chip->NbFields = MT2060_NBFIELDS;
hTunerInitParams->Chip->ChipMode = STCHIP_MODE_SUBADR_8;
hTunerInitParams->Chip->WrStart = RMT2060_LO1C_1;
hTunerInitParams->Chip->WrSize = 17;
hTunerInitParams->Chip->RdStart = RMT2060_PART_REV;
hTunerInitParams->Chip->RdSize = 18;
if(hTunerInitParams->NbDefVal == MT2060_NBREGS)
{
hTuner->Chip = ChipOpen(hTunerInitParams->Chip);
if(hTuner->Chip != NULL)
{
DefVal = hTuner->DefVal; /* */
/* REGISTER INITIALISATION */
/* PART_REV */
ChipAddReg(hTuner->Chip,RMT2060_PART_REV,"PART_REV",0x0000,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RMT2060_PART_REV,FMT2060_PART_REV,"PART_REV",0,8,CHIP_UNSIGNED);
/* LO1C_1 */
ChipAddReg(hTuner->Chip,RMT2060_LO1C_1,"LO1C_1",0x0001,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_LO1C_1,FMT2060_LO1C_1,"LO1C_1",0,8,CHIP_UNSIGNED);
/* LO1C_2 */
ChipAddReg(hTuner->Chip,RMT2060_LO1C_2,"LO1C_2",0x0002,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_LO1C_2,FMT2060_LO1C_2,"LO1C_2",0,8,CHIP_UNSIGNED);
/* LO2C_1 */
ChipAddReg(hTuner->Chip,RMT2060_LO2C_1,"LO2C_1",0x0003,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_LO2C_1,FMT2060_LO2C_1,"LO2C_1",0,8,CHIP_UNSIGNED);
/* LO2C_2 */
ChipAddReg(hTuner->Chip,RMT2060_LO2C_2,"LO2C_2",0x0004,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_LO2C_2,FMT2060_LO2C_2,"LO2C_2",0,8,CHIP_UNSIGNED);
/* LO2C_3 */
ChipAddReg(hTuner->Chip,RMT2060_LO2C_3,"LO2C_3",0x0005,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_LO2C_3,FMT2060_LO2C_3,"LO2C_3",0,8,CHIP_UNSIGNED);
/* LO_STATUS */
ChipAddReg(hTuner->Chip,RMT2060_LO_STATUS,"LO_STATUS",0x0006,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RMT2060_LO_STATUS,FMT2060_LO_STATUS,"LO_STATUS",0,8,CHIP_UNSIGNED);
/* FM_FREQ */
ChipAddReg(hTuner->Chip,RMT2060_FM_FREQ,"FM_FREQ",0x0007,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RMT2060_FM_FREQ,FMT2060_FM_FREQ,"FM_FREQ",0,8,CHIP_UNSIGNED);
/* MISC_STATUS */
ChipAddReg(hTuner->Chip,RMT2060_MISC_STATUS,"MISC_STATUS",0x0008,*DefVal++,STCHIP_ACCESS_R);
ChipAddField(hTuner->Chip,RMT2060_MISC_STATUS,FMT2060_MISC_STATUS,"MISC_STATUS",0,8,CHIP_UNSIGNED);
/* MISC_CTRL_1 */
ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_1,"MISC_CTRL_1",0x0009,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_MISC_CTRL_1,FMT2060_MISC_CTRL_1,"MISC_CTRL_1",0,8,CHIP_UNSIGNED);
/* MISC_CTRL_2 */
ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_2,"MISC_CTRL_2",0x000a,*DefVal++,STCHIP_ACCESS_WR);
ChipAddField(hTuner->Chip,RMT2060_MISC_CTRL_2,FMT2060_MISC_CTRL_2,"MISC_CTRL_2",0,8,CHIP_UNSIGNED);
/* MISC_CTRL_3 */
ChipAddReg(hTuner->Chip,RMT2060_MISC_CTRL_3,"MISC_CTRL_3",0x000b,*DefVal++,STCHIP_ACCESS_WR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -