?? tmbsl10046.c
字號:
//-----------------------------------------------------------------------------
// $Header:
// (C) Copyright 2001 Philips Semiconductors, All rights reserved
//
// This source code and any compilation or derivative thereof is the sole
// property of Philips Corporation and is provided pursuant to a Software
// License Agreement. This code is the proprietary information of Philips
// Corporation and is confidential in nature. Its use and dissemination by
// any party other than Philips Corporation is strictly limited by the
// confidential information provisions of the Agreement referenced above.
//-----------------------------------------------------------------------------
// FILE NAME: tmbsl10046.c
//
// DESCRIPTION: Function for the silicon demodulator TDA10046
//
// DOCUMENT REF: <References to specification or other documents related to
// this module>
//
// NOTES: 1.11 03/29/02 12:37:09
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Standard include files:
//-----------------------------------------------------------------------------
//
#include "..\..\Include\tmbslDemodTer.h"
#include <math.h> // for log10 in tmbsl10046GetSNR()
//-----------------------------------------------------------------------------
// Project include files:
//-----------------------------------------------------------------------------
//
#include "debug.h"
#include "tmbsl10046local.h"
//-----------------------------------------------------------------------------
// Types and defines:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Global data:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Internal Prototypes:
//-----------------------------------------------------------------------------
//
tmErrorCode_t tmbsl10046GetCBER (tmUnitSelect_t demodUnit, UInt32 *puCBER);
tmErrorCode_t tmbsl10046GetIQ (tmUnitSelect_t demodUnit, UInt32 *puIQ);
tmErrorCode_t tmbsl10046GetFreqResp (tmUnitSelect_t demodUnit, UInt32 *puFreqResp);
tmErrorCode_t tmbsl10046GetImpulResp (tmUnitSelect_t demodUnit, UInt32 *puImpulResp);
tmErrorCode_t tmbsl10046GetConfidence (tmUnitSelect_t demodUnit, UInt32 *puConfidence);
tmErrorCode_t Tda10046WriteInit(tm10046object_t *psObject);
Bool Tda10046WriteRF (tm10046object_t *psObject, UInt32 uRF, tmhalFERfOffset_t eRFO);
Bool Tda10046WriteNextScan (tm10046object_t *psObject);
Bool Tda10046WriteNextOffset (tm10046object_t *psObject);
Bool Tda10046ResetAll (tm10046object_t *psObject);
Bool Tda10046UseTPSbit (tm10046object_t *psObject);
Bool Tda10046InitTick (tm10046object_t *psObject, UInt16 wTime);
Bool Tda10046WaitTick (tm10046object_t *psObject);
//-----------------------------------------------------------------------------
// Exported functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Initialization functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046Init:
//
// DESCRIPTION: create an instance of a TDA10046 demodulator
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046Init(
tmUnitSelect_t demodUnit, // I: Demodulator unit number
tmbslDtParam_t sParam // I: setup parameters
)
{
//----------------------
// test input parameters
//----------------------
// test the max number
if (demodUnit > TDA10046_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// return if already initialized
if(g10046Instance[demodUnit].sApiFlags.iInit == True)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
//----------------
// init the object
//----------------
// initialize the object
g10046Instance[demodUnit].sApiFlags.iInit = True;
g10046Instance[demodUnit].uDemodHwAdd = sParam.uHwAddress;
g10046Instance[demodUnit].systemFunc = sParam.systemFunc;
g10046Instance[demodUnit].tunerFunc = sParam.tunerFunc;
g10046Instance[demodUnit].eTunerUnit = sParam.eTunerUnit;
// call init function here to prevent calling SetConfig if the default values are OK
return Tda10046WriteInit(&g10046Instance[demodUnit]);
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046DeInit:
//
// DESCRIPTION: destroy an instance of a TDA10046 tuner
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046DeInit (
tmUnitSelect_t demodUnit // I: Demod unit number
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10046_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10046Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//-------------------------
// De-initialize the object
//-------------------------
g10046Instance[demodUnit].sApiFlags.iInit = False;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046GetSWVersion:
//
// DESCRIPTION: Return the version of this device
//
// RETURN: TM_OK
//
// NOTES: Values defined in the tm10046local.h file
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetSWVersion (
ptmSWVersion_t pSWVersion // I: Receives SW Version
)
{
pSWVersion->compatibilityNr = TDA10046_BSL_COMP_NUM;
pSWVersion->majorVersionNr = TDA10046_BSL_MAJOR_VER;
pSWVersion->minorVersionNr = TDA10046_BSL_MINOR_VER;
return TM_OK;
}
//-----------------------------------------------------------------------------
// Configuration functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046SetPowerState:
//
// DESCRIPTION: Set the power state of the 10046
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetPowerState(
tmUnitSelect_t demodUnit, // I: demodUnit number
tmPowerState_t ePowerState // I: Power state of the device
)
{
UInt32 uByte;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10046_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10046Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
switch (ePowerState)
{
case tmPowerStandby:
uByte = TDA10046_CONFC4_ICSTDBY_BIT;
break;
case tmPowerOn:
uByte = 0;
break;
}
// program the chip
if (g10046Instance[demodUnit].systemFunc.SY_WriteBit(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_CONF_C4_IND, TDA10046_CONFC4_ICSTDBY_BIT,
uByte) != 1)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046GetPowerState:
//
// DESCRIPTION: Set the power state of the 10046
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetPowerState(
tmUnitSelect_t demodUnit, // I: demodUnit number
ptmPowerState_t pPowerState // O: Receives current power state
)
{
UInt32 uByte;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10046_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10046Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
if (g10046Instance[demodUnit].systemFunc.SY_Read(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_CONF_C4_IND, 1,
&uByte) != 1)
return TM_ERR_IIC_ERR;
if (uByte & TDA10046_CONFC4_ICSTDBY_BIT)
*pPowerState = tmPowerStandby;
else
*pPowerState = tmPowerOn;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046SetConfig:
//
// DESCRIPTION: Set the config of the 10046
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_BAD_PARAMETER
// TM_OK
//
// NOTES: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetConfig(
tmUnitSelect_t demodUnit, // I: demodUnit number
UInt32 uItemId, // I: Identifier of the item to modify
UInt32 uValue // I: Value to set for the config item
)
{
UInt32 puByteBuffer[2];
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10046_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10046Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//--------------
// set the value
//--------------
switch((tm10046cfgIndex_t)uItemId)
{
case BOARD:
// default hardware config
g10046Instance[demodUnit].sConfig.uXtall = OM57XX_XTALL_DEF;
g10046Instance[demodUnit].sConfig.bPLL_MFactor = OM57XX_PLLMFACTOR_DEF;
g10046Instance[demodUnit].sConfig.bPLL_NFactor = OM57XX_PLLPFACTOR_DEF;
g10046Instance[demodUnit].sConfig.bPLL_PFactor = OM57XX_PLLPFACTOR_DEF;
g10046Instance[demodUnit].sConfig.bBerDepth = OM57XX_BERDEPTH_DEF;
g10046Instance[demodUnit].sConfig.bIQ_Swapped = OM57XX_IQSWAPPED_DEF;
g10046Instance[demodUnit].sConfig.bExtOffset = OM57XX_EXTOFFSET_DEF;
g10046Instance[demodUnit].sConfig.bOffset125k = OM57XX_OFFSET125K_DEF;
g10046Instance[demodUnit].sConfig.uIF = OM57XX_IF_DEF;
g10046Instance[demodUnit].sConfig.bWatchdog = OM57XX_WATCHDOG_DEF;
g10046Instance[demodUnit].sConfig.bNbRetry = OM57XX_NBRETRY_DEF;
g10046Instance[demodUnit].sConfig.bPulseKiller = OM57XX_PULSEKILLER_DEF;
g10046Instance[demodUnit].sConfig.bXtall100ppm = OM57XX_XTALL100PPM_DEF;
g10046Instance[demodUnit].sConfig.bAgcTun = OM57XX_AGCTUN_DEF;
g10046Instance[demodUnit].sConfig.bAgcPolaTun = OM57XX_AGCPOLATUN_DEF;
g10046Instance[demodUnit].sConfig.bAgcPolaIf = OM57XX_AGCPOLAIF_DEF;
g10046Instance[demodUnit].sConfig.bAgcTunMax = OM57XX_AGCTUNMAX_DEF;
g10046Instance[demodUnit].sConfig.bAgcTunMin = OM57XX_AGCTUNMIN_DEF;
g10046Instance[demodUnit].sConfig.bAgcIfMax = OM57XX_AGCIFMAX_DEF;
g10046Instance[demodUnit].sConfig.bAgcIfMin = OM57XX_AGCIFMIN_DEF;
g10046Instance[demodUnit].sConfig.bOUT_Poclk = OM57XX_OUTPOCLK_DEF;
g10046Instance[demodUnit].sConfig.bOUT_ParaSer = OM57XX_OUTPARASER_DEF;
g10046Instance[demodUnit].sConfig.bOUT_MsbLsb = OM57XX_OUTMSBLSB_DEF;
g10046Instance[demodUnit].sConfig.bOUT_ModeAB = OM57XX_OUTMODEAB_DEF;
g10046Instance[demodUnit].sConfig.bOUT_ParaDiv = OM57XX_OUTPARADIV_DEF;
// specific soft config
switch (uValue & 0x000000ff)
{
case 0x00:
g10046Instance[demodUnit].sConfig.bOffset125k = 0;
break;
case 0x01:
g10046Instance[demodUnit].sConfig.bOffset125k = 1;
break;
default:
return TM_ERR_NOT_SUPPORTED;
}
// specific board config
switch (uValue & 0xffff0000)
{
case OM5748_BOARD_DEF:
// sub-board
switch(uValue & 0xff00)
{
case 0x0000:
g10046Instance[demodUnit].sConfig.uIF = 36166666;
g10046Instance[demodUnit].sConfig.bAgcTun = 0;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0xff;
break;
case 0x0100:
g10046Instance[demodUnit].sConfig.uIF = 36000000;
g10046Instance[demodUnit].sConfig.bAgcTun = 0;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0xff;
break;
case 0x0200:
case 0x0300:
g10046Instance[demodUnit].sConfig.uIF = 36166666;
g10046Instance[demodUnit].sConfig.bAgcTun = 1;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0x75;
break;
case 0x0400:
g10046Instance[demodUnit].sConfig.uIF = 36125000;
g10046Instance[demodUnit].sConfig.bAgcTun = 1;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0x80;
break;
case 0x0500:
g10046Instance[demodUnit].sConfig.uIF = 36166666;
g10046Instance[demodUnit].sConfig.bAgcTun = 0;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0xff;
break;
case 0x0600:
g10046Instance[demodUnit].sConfig.uIF = 36130000;
g10046Instance[demodUnit].sConfig.bAgcTun = 0;
g10046Instance[demodUnit].sConfig.bAgcIfMax = 0xff;
break;
case 0x0700:
g10046Instance[demodUnit].sConfig.uIF = 36166666;
g10046Instance[demodUnit].sConfig.bAgcTun = 1;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -