📄 cx24108_tuner.c
字号:
/* cobra_cx24108.c (rosie) */
/****************************************************************************
* Conexant QPSK driver (internal mode) *
* Copyright ? Shenzhen Coship Electronics Co.,LTD. *
* All rights reserved. *
* Author: Sunfugong *
* Create Date: 2005/7/20 *
* Update: 2005/8/01 Sunfugong *
*****************************************************************************/
//#include "warnfix.h"
#include <string.h> /* ANSI Standard */
#include <time.h> /* ANSI Standard */
#define COBRAEXT // dont' remove it when it has cx24108_gbls.h
#include "cx24143_all.h" /* Cobra include files, ordered */
/*******************************************************************************************************/
/* _TUNER_CX24108_powerup() */
/*******************************************************************************************************/
BOOL _TUNER_CX24108_powerup( /* performs tuner power-up reset */
NIM *nim) /* pointer to nim */
{
int err = 0;
ULONG ulTemp;
ULONG ulTemp2;
nim->tuner.cx24108.device_temp_met = False; /* tuner op. temp not yet met */
/* set the default settings */
_TUNER_CX24108_initialize(nim);
/* wait until chip reaches operating temperature */
if (nim->tuner.cx24108.device_temp_met == False)
{
nim->tuner.cx24108.device_temp_met = True;
OS_Wait(nim,CX24108_MSTOTEMP);
}
/* calculate what lsb of A reg is "worth" at div/2 setting, in Khz */
if (_TUNER_CX24108_vco_na(nim,(2L),&ulTemp) == False) err++;
if (_TUNER_CX24108_vco_na(nim,(1L),&ulTemp2) == False) err++;
nim->tuner.cx24108.lsba = ulTemp - ulTemp2;
nim->lsba_adj = 0;
if (err == 0) return(True);
return(False);
} /* _TUNER_CX24108_powerup() */
/*******************************************************************************************************/
/* _TUNER_CX24108_initialize() */
/*******************************************************************************************************/
#ifdef DEBUG_SCAN_LOSE_CHANNEL
void _TUNER_CX24108_initialize( /* initializes the tuner */
NIM *nim) /* pointer to nim */
{
int i;
memset(&nim->tuner.cx24108.tunerparms,CNULL,sizeof(TUNERPARMS));
/* set default settings */
nim->tuner.cx24108.CPCPolarity = (int)CPC_POLARITY_NEG;
nim->tuner.cx24108.vcono = 1;
nim->tuner.cx24108.vcodiv = VCODIV2;
nim->tuner.cx24108.R = RDIV_10; /* not prog'd to tuner -- see RefDivider variable */
nim->tuner.cx24108.testmode = 0;
nim->tuner.cx24108.BPPercentage = CX24108_BPDEFAULT;
nim->vcoedgecnt = 1;
/* init charge-pump current (CPC) settings */
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].HighPercentage = CX24108_CPC_HIPCT;
/* init tuner slope settings for 1..5, 5..15, 15..45 MSPS */
/* (recommended default values -- cx24108 data sheet) */
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VCASlope = VCAS_52_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VGA1Offset = VGA1_30_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VGA2Offset = VGA2_14DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VCASlope = VCAS_57_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VGA1Offset = VGA1_33_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VGA2Offset = VGA2_14DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VCASlope = VCAS_59_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VGA1Offset = VGA1_36_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VGA2Offset = VGA2_11DB;
/* init the tuner vco_edge structure (l/u edges from 6/13 computations) */
/* init the tuner vco_edge structure (l/u edges from 6/13 computations) */
nim->tuner.cx24108.vco_edge[VCO1D2].lower = 1075*M;
nim->tuner.cx24108.vco_edge[VCO1D2].upperthresh = 1178*M;
nim->tuner.cx24108.vco_edge[VCO2D2].lower = 1178*M;
nim->tuner.cx24108.vco_edge[VCO2D2].upperthresh = 1296*M;
nim->tuner.cx24108.vco_edge[VCO3D2].lower = 1296*M;
nim->tuner.cx24108.vco_edge[VCO3D2].upperthresh = 1432*M;
nim->tuner.cx24108.vco_edge[VCO4D2].lower = 1432*M;
nim->tuner.cx24108.vco_edge[VCO4D2].upperthresh = 1576*M;
nim->tuner.cx24108.vco_edge[VCO5D2].lower = 1576*M;
nim->tuner.cx24108.vco_edge[VCO5D2].upperthresh = 1718*M;
nim->tuner.cx24108.vco_edge[VCO6D2].lower = 1718*M;
nim->tuner.cx24108.vco_edge[VCO6D2].upperthresh = 1856*M;
nim->tuner.cx24108.vco_edge[VCO7D2].lower = 1856*M;
nim->tuner.cx24108.vco_edge[VCO7D2].upperthresh = 2036*M;
nim->tuner.cx24108.vco_edge[VCO8D2].lower = 2036*M;
nim->tuner.cx24108.vco_edge[VCO8D2].upperthresh = 2150*M;
/* init the tuner vco_edge struct for div4 values: vc06/d4, vc07/d4, vc08/d4 */
nim->tuner.cx24108.vco_edge[VCO6D4].lower = 0;
nim->tuner.cx24108.vco_edge[VCO6D4].upperthresh = 0;
nim->tuner.cx24108.vco_edge[VCO7D4].lower = nim->tuner.cx24108.vco_edge[VCO7D2].lower/2UL;
nim->tuner.cx24108.vco_edge[VCO7D4].upperthresh = nim->tuner.cx24108.vco_edge[VCO7D2].upperthresh/2UL;
nim->tuner.cx24108.vco_edge[VCO8D4].lower = nim->tuner.cx24108.vco_edge[VCO8D2].lower/2UL;
nim->tuner.cx24108.vco_edge[VCO8D4].upperthresh = nim->tuner.cx24108.vco_edge[VCO8D2].upperthresh/2UL;
/* set all frequencies into Hz from khz */
for (i = (int)VCO1D2 ; i < (int)VCO8D4+1 ; i++)
{
nim->tuner.cx24108.vco_edge[i].lower *= M;
nim->tuner.cx24108.vco_edge[i].upperthresh *= M;
/* determine the estimated vco lengths, used in vco high-edge calculations (these vco lengths should hold ~ True) */
nim->tuner.cx24108.vco_len[i] = (nim->tuner.cx24108.vco_edge[i].upperthresh - nim->tuner.cx24108.vco_edge[i].lower);
}
/* adjust pre-set vco's if below 2150/2 */
_TUNER_CX24108_adjust(nim);
/* init the tuner breakpoint structure */
for (i = 0 ; i < CX24108_BPCNT ; i++)
nim->tuner.cx24108.vco_bp[i].percentage = (int)nim->tuner.cx24108.BPPercentage;
/* recalculate breakpoints */
_TUNER_CX24108_calc_bp(nim);
/* configure the tuner I/O interface with default settings */
_TUNER_CX24108_defaultsettings(nim);
return;
} /* _TUNER_CX24108_initialize() */
#else
void _TUNER_CX24108_initialize( /* initializes the tuner */
NIM *nim) /* pointer to nim */
{
int i;
memset(&nim->tuner.cx24108.tunerparms,CNULL,sizeof(TUNERPARMS));
/* set default settings */
nim->tuner.cx24108.CPCPolarity = (int)CPC_POLARITY_NEG;
nim->tuner.cx24108.vcono = 1;
nim->tuner.cx24108.vcodiv = VCODIV2;
nim->tuner.cx24108.R = RDIV_10; /* not prog'd to tuner -- see RefDivider variable */
nim->tuner.cx24108.testmode = 0;
nim->tuner.cx24108.BPPercentage = CX24108_BPDEFAULT;
nim->vcoedgecnt = 1;
/* init charge-pump current (CPC) settings */
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO1D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO2D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO3D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO4D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO5D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO6D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO7D2].HighPercentage = CX24108_CPC_HIPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].low = CX24108_CPC_LOW;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].mid = CX24108_CPC_MED;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].high = CX24108_CPC_HIGH;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].LowPercentage = CX24108_CPC_LOWPCT;
nim->tuner.cx24108.tunerparms.CPC[VCO8D2].HighPercentage = CX24108_CPC_HIPCT;
/* init tuner slope settings for 1..5, 5..15, 15..45 MSPS */
/* (recommended default values -- cx24108 data sheet) */
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VCASlope = VCAS_52_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VGA1Offset = VGA1_30_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_1_TO_5].VGA2Offset = VGA2_14DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VCASlope = VCAS_57_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VGA1Offset = VGA1_33_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_5_TO_15].VGA2Offset = VGA2_14DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VCASlope = VCAS_59_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VCAOffset = VCAO_98_5DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VGA1Offset = VGA1_36_0DB;
nim->tuner.cx24108.tunerparms.SLP[CX24108_MSPS_15_TO_45].VGA2Offset = VGA2_11DB;
/* init the tuner vco_edge structure (l/u edges from 6/13 computations) */
nim->tuner.cx24108.vco_edge[VCO1D2].lower = 2050UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO1D2].upperthresh = 2390UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO2D2].lower = 2250UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO2D2].upperthresh = 2640UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO3D2].lower = 2480UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO3D2].upperthresh = 2920UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO4D2].lower = 2750UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO4D2].upperthresh = 3240UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO5D2].lower = 3080UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO5D2].upperthresh = 3540UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO6D2].lower = 3335UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO6D2].upperthresh = 3840UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO7D2].lower = 3600UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO7D2].upperthresh = 4150UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO8D2].lower = 3915UL*M/2UL;
nim->tuner.cx24108.vco_edge[VCO8D2].upperthresh = min((2150UL*M),(4520UL*M/2UL));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -