📄 tmbsl10086.c
字号:
tmErrorCode_t
tmbsl10086SetConfig(
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
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//--------------
// set the value
//--------------
switch((tm10086cfgIndex_t)uItemId)
{
// Board config
case BOARD:
// default hardware config
g10086Instance[demodUnit].sConfig.uXtall = OM57XX_XTAL_DEF;
g10086Instance[demodUnit].sConfig.bPLL_M_Factor = OM57XX_PLLMFACTOR_DEF;
g10086Instance[demodUnit].sConfig.bPLL_P_Factor = OM57XX_PLLPFACTOR_DEF;
g10086Instance[demodUnit].sConfig.bBerDepth = OM57XX_BERDEPTH_DEF;
g10086Instance[demodUnit].sConfig.bSearchRange = OM57XX_SEARCHRANGE_DEF;
g10086Instance[demodUnit].sConfig.bPolaAGC = OM57XX_POLAGC_DEF;
g10086Instance[demodUnit].sConfig.bIQ_Swapped = OM57XX_IQSWAPPED_DEF;
g10086Instance[demodUnit].sConfig.bOUT1_ModeABC = OM57XX_MODEABC1_DEF;
g10086Instance[demodUnit].sConfig.bOUT1_ParaSer = OM57XX_PARASER1_DEF;
g10086Instance[demodUnit].sConfig.bOUT1_POClk = OM57XX_POCLK1_DEF;
g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst = OM57XX_MSBFIRST1_DEF;
g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv = OM57XX_PARBDIV1_DEF;
g10086Instance[demodUnit].sConfig.bOUT2_ModeAB = OM57XX_MODEAB2_DEF;
g10086Instance[demodUnit].sConfig.bOUT2_POClk = OM57XX_POCLK2_DEF;
g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst = OM57XX_MSBFIRST2_DEF;
// specific soft config
// none
// specific board config
switch (uValue & 0xffff0000)
{
case OM5751_BOARD_DEF:
case OM5752_BOARD_DEF:
g10086Instance[demodUnit].sConfig.bIQ_Swapped = 1;
g10086Instance[demodUnit].sConfig.bZIFTuner = 1;
break;
case OM5756_BOARD_DEF:
g10086Instance[demodUnit].sConfig.bIQ_Swapped = 0;
g10086Instance[demodUnit].sConfig.bZIFTuner = 1;
break;
case OM5761_BOARD_DEF:
g10086Instance[demodUnit].sConfig.uXtall = 16000000;
g10086Instance[demodUnit].sConfig.bPLL_M_Factor = 11;
g10086Instance[demodUnit].sConfig.bPLL_P_Factor = OM57XX_PLLPFACTOR_DEF;
g10086Instance[demodUnit].sConfig.bIQ_Swapped = 0;
g10086Instance[demodUnit].sConfig.bZIFTuner = 0;
break;
case CUSTOM_BOARD_DEF:
// do nothing more than setting the default values
break;
default:
// board not supported
return TM_ERR_NOT_SUPPORTED;
}
// store board
g10086Instance[demodUnit].sConfig.uBoard = uValue;
break;
case DSSDVB:
g10086Instance[demodUnit].sConfig.bDSS_DVB = (UInt8)uValue;
break;
case XTALL:
g10086Instance[demodUnit].sConfig.uXtall = uValue;
break;
case PLLMFACTOR:
g10086Instance[demodUnit].sConfig.bPLL_M_Factor = (UInt8)uValue;
break;
case PLLPFACTOR:
g10086Instance[demodUnit].sConfig.bPLL_P_Factor = (UInt8)uValue;
break;
case BERDEPTH:
g10086Instance[demodUnit].sConfig.bBerDepth = (UInt8)uValue;
break;
case SEARCHRANGE:
g10086Instance[demodUnit].sConfig.bSearchRange = (UInt8)uValue;
break;
case POLAAGC:
g10086Instance[demodUnit].sConfig.bPolaAGC = (UInt8)uValue;
break;
case IQSWAPPED:
g10086Instance[demodUnit].sConfig.bIQ_Swapped = (UInt8)uValue;
break;
case OUT1MODEABC:
g10086Instance[demodUnit].sConfig.bOUT1_ModeABC = (UInt8)uValue;
break;
case OUT1PARASER:
g10086Instance[demodUnit].sConfig.bOUT1_ParaSer = (UInt8)uValue;
break;
case OUT1POCLK:
g10086Instance[demodUnit].sConfig.bOUT1_POClk = (UInt8)uValue;
break;
case OUT1MSBFIRST:
g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst = (UInt8)uValue;
break;
case OUT1PARBDIV:
g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv = (UInt8)uValue;
break;
case OUT2MODEAB:
g10086Instance[demodUnit].sConfig.bOUT2_ModeAB = (UInt8)uValue;
break;
case OUT2POCLK:
g10086Instance[demodUnit].sConfig.bOUT2_POClk = (UInt8)uValue;
break;
case OUT2MSBFIRST:
g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst = (UInt8)uValue;
break;
case ZIFTUNER:
g10086Instance[demodUnit].sConfig.bZIFTuner = (UInt8)uValue;
break;
case SRMAX:
g10086Instance[demodUnit].sConfig.uStartSymbolRate = uValue;
break;
case SRMIN:
g10086Instance[demodUnit].sConfig.uStopSymbolRate = uValue;
break;
case SRMAXMARGIN:
g10086Instance[demodUnit].sConfig.uSrMaxMargin = uValue;
break;
case SRMINMARGIN:
g10086Instance[demodUnit].sConfig.uSrMinMargin = uValue;
break;
case DELTATHRESHOLD:
g10086Instance[demodUnit].sConfig.uDeltaThreshold = uValue;
break;
// backdoor functions
case FEINIT:
// init
Tda10086WriteInit(&g10086Instance[demodUnit]);
break;
case SWITCH:
if (uValue)
// open switch
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CLEAR_IND,
TDA10086_CLEAR_IICTRL_MSK,
TDA10086_CLEAR_IICTRL_MSK);
else
// close switch
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CLEAR_IND,
TDA10086_CLEAR_IICTRL_MSK,
0);
break;
default:
return TM_ERR_BAD_PARAMETER;
}
// start algo
g10086Instance[demodUnit].bStartAlgo = True;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086GetConfig:
//
// DESCRIPTION: Get the config of the 10086
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetConfig(
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uItemId, // I: Identifier of the item to check
UInt32* puValue // O: Value of the item
)
{
UInt32 uByte, puByte[2];
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Core function
//----------------------
// get the value
switch((tm10086cfgIndex_t)uItemId)
{
// Board config
case BOARD:
*puValue = g10086Instance[demodUnit].sConfig.uBoard;
break;
case DSSDVB:
*puValue = g10086Instance[demodUnit].sConfig.bDSS_DVB;
break;
case XTALL:
*puValue = g10086Instance[demodUnit].sConfig.uXtall;
break;
case PLLMFACTOR:
*puValue = g10086Instance[demodUnit].sConfig.bPLL_M_Factor;
break;
case PLLPFACTOR:
*puValue = g10086Instance[demodUnit].sConfig.bPLL_P_Factor;
break;
case BERDEPTH:
*puValue = g10086Instance[demodUnit].sConfig.bBerDepth;
break;
case SEARCHRANGE:
*puValue = g10086Instance[demodUnit].sConfig.bSearchRange;
break;
case POLAAGC:
*puValue = g10086Instance[demodUnit].sConfig.bPolaAGC;
break;
case IQSWAPPED:
*puValue = g10086Instance[demodUnit].sConfig.bIQ_Swapped;
break;
case OUT1MODEABC:
*puValue = g10086Instance[demodUnit].sConfig.bOUT1_ModeABC;
break;
case OUT1PARASER:
*puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParaSer;
break;
case OUT1POCLK:
*puValue = g10086Instance[demodUnit].sConfig.bOUT1_POClk;
break;
case OUT1MSBFIRST:
*puValue = g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst;
break;
case OUT1PARBDIV:
*puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv;
break;
case OUT2MODEAB:
*puValue = g10086Instance[demodUnit].sConfig.bOUT2_ModeAB;
break;
case OUT2POCLK:
*puValue = g10086Instance[demodUnit].sConfig.bOUT2_POClk;
break;
case OUT2MSBFIRST:
*puValue = g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst;
break;
case ZIFTUNER:
*puValue = g10086Instance[demodUnit].sConfig.bZIFTuner;
break;
case SRMAX:
*puValue = g10086Instance[demodUnit].sConfig.uStartSymbolRate;
break;
case SRMIN:
*puValue = g10086Instance[demodUnit].sConfig.uStopSymbolRate;
break;
case SRMAXMARGIN:
*puValue = g10086Instance[demodUnit].sConfig.uSrMaxMargin;
break;
case SRMINMARGIN:
*puValue = g10086Instance[demodUnit].sConfig.uSrMinMargin;
break;
case DELTATHRESHOLD:
*puValue = g10086Instance[demodUnit].sConfig.uDeltaThreshold;
break;
// backdoor functions
case IDENTITY:
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_IDENTITY_IND,
1,
&uByte);
if (uByte != 0xE1)
*puValue = False;
else
*puValue = True;
break;
case READSYNC:
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_SYNC_IND,
1,
puValue);
break;
case READIQ:
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_ISYMB_IND,
2,
puByte);
*puValue = puByte[0] << 10 | puByte[1] << 2;
break;
case READAGCAD:
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_VAGCA_IND,
1,
&uByte);
*puValue = uByte << 8;
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_VAGCN_IND,
1,
&uByte);
*puValue |= uByte;
break;
case GETNBOFUNIT:
*puValue = TDA10086_MAX_UNITS;
break;
case RSSI:
Tda10086GetRssi(&g10086Instance[demodUnit], puValue);
break;
default:
return TM_ERR_BAD_PARAMETER;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086Write
//
// DESCRIPTION: this function writes bytes in the demod registers.
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086Write (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uIndex, // I: Start index to write
UInt32 uNbBytes, // I: Number of bytes to write
UInt32* puBytes // I: Pointer on an array of bytes
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Core function
//----------------------
if (g10086Instance[demodUnit].systemFunc.SY_Write(
g10086Instance[demodUnit].uDemodHwAdd,
uIndex,
uNbBytes,
puBytes) != uNbBytes)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086WriteBit
//
// DESCRIPTION: this function writes a bit to the mask position
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -