📄 tmbsl10023.c
字号:
//-----------------------------------------------------------------------------
// $Header:
// (C) Copyright 2002 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: tmbsl10023.c
//
// DESCRIPTION: Function for the silicon demodulator TDA10023
//
// DOCUMENT REF: <References to specification or other documents related to
// this module>
//
// NOTES:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Standard include files:
//-----------------------------------------------------------------------------
//
#include "tmbslDemodCab.h"
//-----------------------------------------------------------------------------
// Project include files:
//-----------------------------------------------------------------------------
//
#include "debug.h"
#include "tmbsl10023local.h"
#include "Z_os_api.h"
//-----------------------------------------------------------------------------
// Types and defines:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Global data:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Internal Prototypes:
//-----------------------------------------------------------------------------
//
/*
char LVLTable[15] = {68,67,63,59,56,55,54,54,53,53,52,52,51,51,50};
char LVLDisTable[17] = {49,49,49,48,47,46,46,45,44,44,42,42,41,40,39,38,37};
char LVLIndexTable[17] = {121,122,123,125,129,132,134,136,139,142,148,151,158,165,172,186,190};
*/
tmErrorCode_t tmbsl10023GetIQ (tmUnitSelect_t demodUnit, UInt32 *puIQ);
tmErrorCode_t tmbsl10023GetCOEF (tmUnitSelect_t demodUnit, Int32 *plCoef);
tmErrorCode_t Tda10023WriteInit(tm10023object_t *psObject);
Bool Tda10023WriteRF (tm10023object_t *psObject, UInt32 *puRF);
Bool Tda10023WriteSR (tm10023object_t *psObject, UInt32 *puSR);
Bool Tda10023WriteQAM (tm10023object_t *psObject, UInt32 uMod);
Bool Tda10023WriteNextScan (tm10023object_t *psObject);
Bool Tda10023ResetAll (tm10023object_t *psObject);
Bool Tda10023InitTick (tm10023object_t *psObject, UInt16 wTime);
Bool Tda10023WaitTick (tm10023object_t *psObject);
Bool Tda10023ReadAFC (tm10023object_t *psObject, Int32 *plAfc);
UInt16 Tda10023_AlgoCalcTimer( tm10023object_t *psObject, UInt32 uNbSymbol);
tmhalFEManagerStatus_t Tda10023_MainAlgo (tm10023object_t *psObject, UInt16 *pAlgoTimer);
tmhalFEManagerStatus_t Tda10023_AlgoGain(tm10023object_t *psObject, UInt16 *pAlgoTimer);
tmhalFEManagerStatus_t Tda10023_AlgoMod( tm10023object_t *psObject);
tmhalFEManagerStatus_t Tda10023_AlgoClkOffset( tm10023object_t *psObject);
//-----------------------------------------------------------------------------
// Exported functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Initialization functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023Init:
//
// DESCRIPTION: create an instance of a TDA10023 demodulator
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Init(
tmUnitSelect_t demodUnit, // I: Demodulator unit number
tmbslDcParam_t sParam // I: setup parameters
)
{
//----------------------
// test input parameters
//----------------------
// test the max number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// return if already initialized
if(g10023Instance[demodUnit].sApiFlags.iInit == True)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
//----------------
// init the object
//----------------
// initialize the object
g10023Instance[demodUnit].sApiFlags.iInit = True;
g10023Instance[demodUnit].uDemodHwAdd = sParam.uHwAddress;
g10023Instance[demodUnit].systemFunc = sParam.systemFunc;
g10023Instance[demodUnit].tunerFunc = sParam.tunerFunc;
g10023Instance[demodUnit].eTunerUnit = sParam.eTunerUnit;
// call init function here to prevent calling SetConfig if the default values are OK
return Tda10023WriteInit(&g10023Instance[demodUnit]);
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023DeInit:
//
// DESCRIPTION: destroy an instance of a TDA10023 tuner
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023DeInit (
tmUnitSelect_t demodUnit // I: Demod unit number
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//-------------------------
// De-initialize the object
//-------------------------
g10023Instance[demodUnit].sApiFlags.iInit = False;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023GetSWVersion:
//
// DESCRIPTION: Return the version of this device
//
// RETURN: TM_OK
//
// NOTES: Values defined in the tm10023local.h file
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetSWVersion (
ptmSWVersion_t pSWVersion // I: Receives SW Version
)
{
pSWVersion->compatibilityNr = TDA10023_BSL_COMP_NUM;
pSWVersion->majorVersionNr = TDA10023_BSL_MAJOR_VER;
pSWVersion->minorVersionNr = TDA10023_BSL_MINOR_VER;
return TM_OK;
}
//-----------------------------------------------------------------------------
// Configuration functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023SetPowerState:
//
// DESCRIPTION: Set the power state of the 10023
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetPowerState(
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 > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
switch (ePowerState)
{
case tmPowerStandby:
uByte = TDA10023_GPR_STDBY_BIT;
break;
case tmPowerOn:
uByte = 0;
break;
}
// program the chip
if (g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_GPR_IND, TDA10023_GPR_STDBY_BIT,
uByte) != 1)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023GetPowerState:
//
// DESCRIPTION: Set the power state of the 10023
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetPowerState(
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 > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
if (g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_GPR_IND, 1,
&uByte) != 1)
return TM_ERR_IIC_ERR;
if (uByte & TDA10023_GPR_STDBY_BIT)
*pPowerState = tmPowerStandby;
else
*pPowerState = tmPowerOn;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023SetConfig:
//
// DESCRIPTION: Set the config of the 10023
//
// 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
tmbsl10023SetConfig(
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 puBytes[2];
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//--------------
// set the value
//--------------
switch((tm10023cfgIndex_t)uItemId)
{
case DEFAULT:
// default hardware config
g10023Instance[demodUnit].sConfig.uXtalFreq = XTALL_DEF;
g10023Instance[demodUnit].sConfig.bIFMax = IFMAX_DEF;
g10023Instance[demodUnit].sConfig.bIFMin = IFMIN_DEF;
g10023Instance[demodUnit].sConfig.bTUNMax = TUNMAX_DEF;
g10023Instance[demodUnit].sConfig.bTUNMin = TUNMIN_DEF;
g10023Instance[demodUnit].sConfig.bAGCtreshold = AGCTRESHOLD_DEF;
g10023Instance[demodUnit].sConfig.bEqualType = EQUALTYPE_DEF;
g10023Instance[demodUnit].sConfig.bPolaPWM1 = POLAPWM1_DEF;
g10023Instance[demodUnit].sConfig.bPolaPWM2 = POLAPWM2_DEF;
g10023Instance[demodUnit].sConfig.bClkOffsetRange = CLKOFFSETRANGE_DEF;
g10023Instance[demodUnit].sConfig.bTUN_IQSwap = IQSWAP_DEF;
g10023Instance[demodUnit].sConfig.bOUT_OClk1 = OCLK1_DEF;
g10023Instance[demodUnit].sConfig.bOUT_bParaSer1 = PARASER1_DEF;
g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1 = MSBFIRST1_DEF;
g10023Instance[demodUnit].sConfig.bOUT_ModeABC1 = MODEABC1_DEF;
g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1 = PARADIV1_DEF;
g10023Instance[demodUnit].sConfig.bOUT_OClk2 = OCLK2_DEF;
g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2 = MSBFIRST2_DEF;
g10023Instance[demodUnit].sConfig.bSwDyn = SWDYN_DEF;
g10023Instance[demodUnit].sConfig.bSwStep = SWSTEP_DEF;
g10023Instance[demodUnit].sConfig.bModeDvbMcns = MODE_DVB_DEF;
g10023Instance[demodUnit].sConfig.uTUN_IF = IF_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = CU1216_PLLMFACTOR_DVB_DEF; //PLLMFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = CU1216_PLLNFACTOR_DVB_DEF; //PLLNFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = CU1216_PLLPFACTOR_DVB_DEF; //PLLPFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bBERdepth = BERDEPTH_DVB_DEF;
g10023Instance[demodUnit].sConfig.bFsampling = FSAMPLING_DEF;
break;
case DVBMCNS:
g10023Instance[demodUnit].sConfig.bModeDvbMcns = (UInt8)uValue;
if(g10023Instance[demodUnit].sConfig.bModeDvbMcns)
{
// MCNS mode
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = PLLMFACTOR_MCNS_DEF;
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = PLLNFACTOR_MCNS_DEF;
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = PLLPFACTOR_MCNS_DEF;
g10023Instance[demodUnit].sConfig.bBERdepth = BERDEPTH_MCNS_DEF;
g10023Instance[demodUnit].sConfig.uTUN_IF = IF_MCNS_DEF;
if (g10023Instance[demodUnit].sConfig.uXtalFreq == CU1216_XTALL_FREQ_28)
{
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = CU1216_PLLMFACTOR_MCNS_DEF;
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = CU1216_PLLNFACTOR_MCNS_DEF;
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = CU1216_PLLPFACTOR_MCNS_DEF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -