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

📄 hamaro_cx24108.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
/* HAMARO_cx24108.c (rosie) */

/*+++ *******************************************************************\
*
*   Copyright and Disclaimer:
*
*       ---------------------------------------------------------------
*       ALL SOFTWARE, APPLICATIONS, DOCUMENTATION, OR MATERIALS        
*       FURNISHED HEREIN IS PROVIDED *AS IS*.  CONEXANT DOES NOT MAKE  
*       ANY WARRANTIES, EITHER EXPRESS OR IMPLIED, AND HEREBY EXPRESSLY
*       DISCLAIMS ANY AND ALL SUCH WARRANTIES TO THE EXTENT PERMITTED  
*       BY LAW, INCLUDING, SPECIFICALLY, ANY IMPLIED WARRANTY ARISING  
*       BY STATUTE OR OTHERWISE IN LAW OR FROM A COURSE OF DEALING OR  
*       USAGE OF TRADE.  CONEXANT DOES NOT MAKE ANY WARRANTIES, EITHER 
*       EXPRESS OR IMPLIED, AND HEREBY EXPRESSLY DISCLAIMS ANY AND ALL 
*       SUCH WARRANTIES WITH RESPECT TO ALL SOFTWARE, APPLICATIONS,    
*       DOCUMENTATION, AND MATERIALS INCLUDING ALL IMPLIED WARRANTIES  
*       OF MERCHANTABILITY, OR OF MERCHANTABLE QUALITY, OR OF FITNESS  
*       FOR ANY PURPOSE, PARTICULAR, SPECIFIC OR OTHERWISE, OR OF      
*       NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OF OTHERS,     
*       RELATING TO THE SOFTWARE, APPLICATIONS, OPERATION,             
*       DOCUMENTATION, DATA OR RESULTS GENERATED BY THE OPERATION OR   
*       USE THEREOF, AND MATERIALS PROVIDED HEREIN.  THE ENTIRE RISK AS
*       TO THE SUBSTANCE, QUALITY AND PERFORMANCE OF SOFTWARE,         
*       APPLICATIONS, AND DOCUMENTATION DESCRIBING SUCH SOFTWARE       
*       REMAINS WITH THE BUYER.                                        
*                                                                      
*       REGARDLESS OF WHETHER ANY REMEDY SET FORTH HEREIN FAILS OF ITS 
*       ESSENTIAL PURPOSE OR OTHERWISE, CONEXANT SHALL NOT BE LIABLE   
*       FOR ANY EXEMPLARY, SPECIAL, PUNITIVE, SPECULATIVE, INDIRECT,   
*       CONSEQUENTIAL OR INCIDENTAL DAMAGES OF ANY KIND (INCLUDING     
*       WITHOUT LIMITATION LOST PROFITS, LOSS OF INCOME, LOSS OF       
*       GOODWILL, OR OTHER TANGIBLE OR INTANGIBLE BUSINESS LOSS)       
*       ARISING OUT OF OR IN CONNECTION WITH, DIRECTLY OR INDIRECTLY,  
*       SOFTWARE, APPLICATIONS, DOCUMENTATION, OR ANY SERVICES OR      
*       MATERIALS PROVIDED HEREUNDER, OR USE OR INABILITY TO USE THE   
*       SOFTWARE, EVEN IF CONEXANT HAS BEEN ADVISED OF THE POSSIBILITY 
*       OF SUCH DAMAGES.                                               
*
*       Copyright (c) 2001 Conexant Systems, Inc.
*       All Rights Reserved.
*       ---------------------------------------------------------------
*
*   Module Revision Id:
*
*       $Header: hamaro_cx24108.c, 13, 2006-11-11 1:49:44, Sunbey (VSS Migration)$
*
*   Abstract:
*
*       Contains CX24108-specific software.
*
\******************************************************************* ---*/

#include <string.h>                    /* ANSI Standard */
#include <time.h>                      /* ANSI Standard */

#include "hamaro.h"                     /* Hamaro include files, ordered */

# if HAMARO_INCLUDE_ROSIE
/*******************************************************************************************************/
/* _HAMARO_TUNER_CX24108_powerup() */
/*******************************************************************************************************/
BOOL        _HAMARO_TUNER_CX24108_powerup(    /* performs tuner power-up reset */
HAMARO_NIM         *nim)                      /* pointer to nim */
{
  int     err = 0;
  
  unsigned long   ulTemp;
  unsigned long   ulTemp2;

  nim->tuner.cx24108.device_temp_met = False;           /* tuner op. temp not yet met */

  /* set the default settings */
  _HAMARO_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;
    HAMARO_OS_Wait(nim,HAMARO_CX24108_MSTOTEMP);
  }

  /* calculate what lsb of A reg is "worth" at div/2 setting, in Khz */
  if (_HAMARO_TUNER_CX24108_vco_na(nim,(2L),&ulTemp) == False)  err++;
  if (_HAMARO_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);

}  /* _HAMARO_TUNER_CX24108_powerup() */


/*******************************************************************************************************/
/* _HAMARO_TUNER_CX24108_initialize() */
/*******************************************************************************************************/
void  _HAMARO_TUNER_CX24108_initialize(       /* initializes the tuner */
HAMARO_NIM   *nim)                            /* pointer to nim */
{
  int  i;

  memset(&nim->tuner.cx24108.tunerparms,CNULL,sizeof(HAMARO_TUNERPARMS));

  /* set default settings */
  nim->tuner.cx24108.CPCPolarity = (int)HAMARO_CPC_POLARITY_NEG;
  nim->tuner.cx24108.vcono = 1;
  nim->tuner.cx24108.vcodiv = HAMARO_VCODIV2;
  nim->tuner.cx24108.R = HAMARO_RDIV_10;               /* not prog'd to tuner -- see RefDivider variable */
  nim->tuner.cx24108.testmode = 0;
  nim->tuner.cx24108.BPPercentage = HAMARO_CX24108_BPDEFAULT;
  nim->vcoedgecnt = 1;

  /* init charge-pump current (CPC) settings */
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO1D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO1D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO1D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO1D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO1D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO2D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO2D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO2D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO2D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO2D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO3D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO3D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO3D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO3D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO3D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO4D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO4D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO4D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO4D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO4D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO5D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO5D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO5D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO5D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO5D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO6D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO6D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO6D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO6D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO6D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO7D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO7D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO7D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO7D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO7D2].HighPercentage = HAMARO_CX24108_CPC_HIPCT;

  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO8D2].low = HAMARO_CX24108_CPC_LOW;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO8D2].mid = HAMARO_CX24108_CPC_MED;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO8D2].high = HAMARO_CX24108_CPC_HIGH;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO8D2].LowPercentage = HAMARO_CX24108_CPC_LOWPCT;
  nim->tuner.cx24108.tunerparms.CPC[HAMARO_VCO8D2].HighPercentage = HAMARO_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[HAMARO_CX24108_MSPS_1_TO_5].VCASlope = HAMARO_VCAS_52_0DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_1_TO_5].VCAOffset = HAMARO_VCAO_98_5DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_1_TO_5].VGA1Offset = HAMARO_VGA1_30_0DB;  
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_1_TO_5].VGA2Offset = HAMARO_VGA2_14DB;

  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_5_TO_15].VCASlope = HAMARO_VCAS_57_0DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_5_TO_15].VCAOffset = HAMARO_VCAO_98_5DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_5_TO_15].VGA1Offset = HAMARO_VGA1_33_0DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_5_TO_15].VGA2Offset = HAMARO_VGA2_14DB;

  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_15_TO_45].VCASlope = HAMARO_VCAS_59_5DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_15_TO_45].VCAOffset = HAMARO_VCAO_98_5DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_15_TO_45].VGA1Offset = HAMARO_VGA1_36_0DB;
  nim->tuner.cx24108.tunerparms.SLP[HAMARO_CX24108_MSPS_15_TO_45].VGA2Offset = HAMARO_VGA2_11DB;

  /* init the tuner vco_edge structure (l/u edges from 6/13 computations) */
  nim->tuner.cx24108.vco_edge[HAMARO_VCO1D2].lower = 2050UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO1D2].upperthresh = 2390UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO2D2].lower = 2250UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO2D2].upperthresh = 2640UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO3D2].lower = 2480UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO3D2].upperthresh = 2920UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO4D2].lower = 2750UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO4D2].upperthresh = 3240UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO5D2].lower = 3080UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO5D2].upperthresh = 3540UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO6D2].lower = 3335UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO6D2].upperthresh = 3840UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO7D2].lower = 3600UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO7D2].upperthresh = 4150UL*HAMARO_M/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO8D2].lower = 3915UL*HAMARO_M/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO8D2].upperthresh = HAMARO_min((2150UL*HAMARO_M),(4520UL*HAMARO_M/2UL));

  /* init the tuner vco_edge struct for div4 values: vc06/d4, vc07/d4, vc08/d4 */
  nim->tuner.cx24108.vco_edge[HAMARO_VCO6D4].lower = nim->tuner.cx24108.vco_edge[HAMARO_VCO6D2].lower/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO6D4].upperthresh = nim->tuner.cx24108.vco_edge[HAMARO_VCO6D2].upperthresh/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO7D4].lower = nim->tuner.cx24108.vco_edge[HAMARO_VCO7D2].lower/2UL;
  nim->tuner.cx24108.vco_edge[HAMARO_VCO7D4].upperthresh = nim->tuner.cx24108.vco_edge[HAMARO_VCO7D2].upperthresh/2UL;

  nim->tuner.cx24108.vco_edge[HAMARO_VCO8D4].lower = HAMARO_max((1019UL*HAMARO_M),(nim->tuner.cx24108.vco_edge[HAMARO_VCO8D2].lower/2UL));
  nim->tuner.cx24108.vco_edge[HAMARO_VCO8D4].upperthresh = HAMARO_max((1075UL*HAMARO_M),(nim->tuner.cx24108.vco_edge[HAMARO_VCO8D2].upperthresh/2UL));

  /* set all frequencies into Hz from khz */
  for (i = (int)HAMARO_VCO1D2 ; i < (int)HAMARO_VCO8D4+1 ; i++)
  {
    nim->tuner.cx24108.vco_edge[i].lower *= HAMARO_M;
    nim->tuner.cx24108.vco_edge[i].upperthresh *= HAMARO_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 */
  _HAMARO_TUNER_CX24108_adjust(nim);

  /* init the tuner breakpoint structure */
  for (i = 0 ; i < HAMARO_CX24108_BPCNT ; i++)  
    nim->tuner.cx24108.vco_bp[i].percentage = (int)nim->tuner.cx24108.BPPercentage;

  /* recalculate breakpoints */
  _HAMARO_TUNER_CX24108_calc_bp(nim);

  /* configure the tuner I/O interface with default settings */
  _HAMARO_TUNER_CX24108_defaultsettings(nim);

  return;

}  /* _HAMARO_TUNER_CX24108_initialize() */


/*******************************************************************************************************/
/* _HAMARO_TUNER_CX24108_setgainparms() */
/*******************************************************************************************************/
BOOL        _HAMARO_TUNER_CX24108_setgainparms(  /* copies caller's HAMARO_TUNERPARMS struct into nim */
HAMARO_NIM         *nim,                         /* nim pointer */
HAMARO_TUNERPARMS  *tunerparms)                  /* caller's HAMARO_TUNERPARMS struct that will overwrite nim's struct */
{
  /* copy caller's tunerparms settings into nim */  
  if (tunerparms != NULL)
  {
    memcpy(&nim->tuner.cx24108.tunerparms,tunerparms,sizeof(HAMARO_TUNERPARMS));
    return(True);
  }

  HAMARO_DRIVER_SET_ERROR(nim,HAMARO_BAD_PARM);
  return(False);

}  /* _Tuner_CX24108_setgainparms() */


/*******************************************************************************************************/
/* _HAMARO_TUNER_CX24108_band_info() */
/*******************************************************************************************************/
BOOL           _HAMARO_TUNER_CX24108_band_info(    /* function to calc and return band-select prog bits to caller */
HAMARO_NIM            *nim,                        /* pointer to nim */
unsigned long  Fr,                          /* Fr (Freq. Receive) input */
unsigned int   *bandbin,                    /* binary bits to program band-select for Fr */
unsigned int   *vcodivbin,                  /* binary bit to program vco divider in band-select for Fr */
HAMARO_VCOSET         *vcoset,                     /* vco chosen for Fr */
HAMARO_VCODIV         *vcodiv,                     /* vco divider chosen for Fr */
HAMARO_VCONO          *vcono,                      /* vco number chosen (always 1..8) */
unsigned long  *tunpll)                     /* calculated generic tuner pll programming setting */
{
  int  i;
  int  j;
  int  start_pt;

  unsigned long  vco_len;
  unsigned long  srm;

  static HAMARO_VCONO  _vcono[] =  {(unsigned char)HAMARO_VCO1D2,(unsigned char)HAMARO_VCO2D2,(unsigned char)HAMARO_VCO3D2,(unsigned char)HAMARO_VCO4D2,(unsigned char)HAMARO_VCO5D2,(unsigned char)HAMARO_VCO6D2,
                             (unsigned char)HAMARO_VCO7D2,(unsigned char)HAMARO_VCO8D2,(unsigned char)HAMARO_VCO6D2,(unsigned char)HAMARO_VCO7D2,(unsigned char)HAMARO_VCO8D2};

  static HAMARO_VCONO  _vcosearchorder[] =
                            {(unsigned char)HAMARO_VCO1D2,(unsigned char)HAMARO_VCO2D2,(unsigned char)HAMARO_VCO3D2,(unsigned char)HAMARO_VCO4D2,
                             (unsigned char)HAMARO_VCO5D2,(unsigned char)HAMARO_VCO6D2,(unsigned char)HAMARO_VCO7D2,(unsigned char)HAMARO_VCO8D2,
                             (unsigned char)HAMARO_VCO8D4,(unsigned char)HAMARO_VCO7D4,(unsigned char)HAMARO_VCO6D4};

  static HAMARO_VCOSET _vcoset[] = {HAMARO_VCO1D2,HAMARO_VCO2D2,HAMARO_VCO3D2,HAMARO_VCO4D2,HAMARO_VCO5D2,HAMARO_VCO6D2,HAMARO_VCO7D2,HAMARO_VCO8D2,HAMARO_VCO6D4,HAMARO_VCO7D4,HAMARO_VCO8D4};
  static HAMARO_VCODIV _vcodiv[] = {HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV2,HAMARO_VCODIV4,HAMARO_VCODIV4,HAMARO_VCODIV4};

  static unsigned int   _bandbin[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x20,0x40,0x80};
  static int    _vcodivbin[] = {-1,-1,1,-1,0};  /* 2=0x01, 4=0x00 */

  /* set the starting search pt.  If div/4, then start at the div/4 vcos */
  start_pt = HAMARO_CX24108_START_DIV2;

⌨️ 快捷键说明

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