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

📄 cx24108_tuner.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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 + -