📄 tmbsl10023.c
字号:
// set the tuner Low pass filter width selection
g10023Instance[demodUnit].tunerFunc.setCfgFunc(
g10023Instance[demodUnit].eTunerUnit,
tmhalFETunerBandwidth , 7000000);
}
else
{
// DVB mode
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = PLLMFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = PLLNFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = PLLPFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bBERdepth = BERDEPTH_DVB_DEF;
g10023Instance[demodUnit].sConfig.uTUN_IF = IF_DVB_DEF;
if (g10023Instance[demodUnit].sConfig.uXtalFreq == CU1216_XTALL_FREQ_28)
{
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = CU1216_PLLMFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = CU1216_PLLNFACTOR_DVB_DEF;
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = CU1216_PLLPFACTOR_DVB_DEF;
}
// set the tuner Low pass filter width selection
g10023Instance[demodUnit].tunerFunc.setCfgFunc(
g10023Instance[demodUnit].eTunerUnit,
tmhalFETunerBandwidth , 9000000);
}
break;
case XTALL:
g10023Instance[demodUnit].sConfig.uXtalFreq = uValue;
break;
case PLLMFACTOR:
g10023Instance[demodUnit].sConfig.bPLL_M_Factor = (UInt8)uValue;
break;
case PLLNFACTOR:
g10023Instance[demodUnit].sConfig.bPLL_N_Factor = (UInt8)uValue;
break;
case PLLPFACTOR:
g10023Instance[demodUnit].sConfig.bPLL_P_Factor = (UInt8)uValue;
break;
case FSAMPLING:
g10023Instance[demodUnit].sConfig.bFsampling = (UInt8)uValue;
break;
case IFMAX:
g10023Instance[demodUnit].sConfig.bIFMax = (UInt8)uValue;
break;
case IFMIN:
g10023Instance[demodUnit].sConfig.bIFMin = (UInt8)uValue;
break;
case TUNMAX:
g10023Instance[demodUnit].sConfig.bTUNMax = (UInt8)uValue;
break;
case TUNMIN:
g10023Instance[demodUnit].sConfig.bTUNMin = (UInt8)uValue;
break;
case AGCTRESHOLD:
g10023Instance[demodUnit].sConfig.bAGCtreshold = (UInt8)uValue;
break;
case EQUALTYPE:
g10023Instance[demodUnit].sConfig.bEqualType = (UInt8)uValue;
break;
case POLAPWM1:
g10023Instance[demodUnit].sConfig.bPolaPWM1 = (UInt8)uValue;
break;
case POLAPWM2:
g10023Instance[demodUnit].sConfig.bPolaPWM2 = (UInt8)uValue;
break;
case BERDEPTH:
g10023Instance[demodUnit].sConfig.bBERdepth = (UInt8)uValue;
break;
case BERWINDOW:
g10023Instance[demodUnit].sConfig.uBERwindow = uValue;
break;
case CLKOFFSETRANGE:
g10023Instance[demodUnit].sConfig.bClkOffsetRange = (UInt8)uValue;
break;
case IQSWAP:
g10023Instance[demodUnit].sConfig.bTUN_IQSwap = (UInt8)uValue;
break;
case IF:
g10023Instance[demodUnit].sConfig.uTUN_IF = uValue;
break;
case OCLK1:
g10023Instance[demodUnit].sConfig.bOUT_OClk1 = (UInt8)uValue;
break;
case PARASER1:
g10023Instance[demodUnit].sConfig.bOUT_bParaSer1 = (UInt8)uValue;
break;
case MSBFIRST1:
g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1 = (UInt8)uValue;
break;
case MODEABC1:
g10023Instance[demodUnit].sConfig.bOUT_ModeABC1 = (UInt8)uValue;
break;
case PARADIV1:
g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1 = (UInt8)uValue;
break;
case OCLK2:
g10023Instance[demodUnit].sConfig.bOUT_OClk2 = (UInt8)uValue;
break;
case MSBFIRST2:
g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2 = (UInt8)uValue;
break;
case SWDYN:
g10023Instance[demodUnit].sConfig.bSwDyn = (UInt8)uValue;
break;
case SWSTEP:
g10023Instance[demodUnit].sConfig.bSwStep = (UInt8)uValue;
break;
// backdoor functions
case FEINIT:
// init
Tda10023WriteInit(&g10023Instance[demodUnit]);
break;
case SWITCH:
if (uValue)
// tuner is accessible
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT,
TDA10023_TEST_BYPIIC_BIT);
else
{
// tuner is disconnected from the I2C bus
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);
}
break;
case JQAMMODE:
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_JQAM_MODE_IND, TDA10023_JQAM_MODE_JQAM_MODE_MSK, uValue);
break;
case JQAMREQTS:
puBytes[0] = (UInt8)(uValue >> 8);
puBytes[1] = (UInt8)(uValue);
g10023Instance[demodUnit].systemFunc.SY_Write(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_TS_IDH_IND, 2, puBytes);
break;
case JQAMREQON:
puBytes[0] = (UInt8)(uValue >> 8);
puBytes[1] = (UInt8)(uValue);
g10023Instance[demodUnit].systemFunc.SY_Write(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_ON_IDH_IND, 2, puBytes);
break;
default:
return TM_ERR_BAD_PARAMETER;
}
// start algo
g10023Instance[demodUnit].sApiFlags.iStartAlgo = True;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023GetConfig:
//
// DESCRIPTION: Get 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
tmbsl10023GetConfig(
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uItemId, // I: Identifier of the item to modify
UInt32* puValue // O: Value to set for the config item
)
{
UInt32 uByte;
UInt32 puBytes[4];
int i;
//----------------------
// 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
//----------------------
// get the value
switch((tm10023cfgIndex_t)uItemId)
{
// Board config
// case BOARD:
// *puValue = g10023Instance[demodUnit].sConfig.uBoard;
// break;
case STANDARD:
*puValue = tmhalFEStandardDVBC;
break;
case DVBMCNS:
*puValue = g10023Instance[demodUnit].sConfig.bModeDvbMcns;
break;
case XTALL:
*puValue = g10023Instance[demodUnit].sConfig.uXtalFreq;
break;
case PLLMFACTOR:
*puValue = g10023Instance[demodUnit].sConfig.bPLL_M_Factor;
break;
case PLLNFACTOR:
*puValue = g10023Instance[demodUnit].sConfig.bPLL_N_Factor;
break;
case PLLPFACTOR:
*puValue = g10023Instance[demodUnit].sConfig.bPLL_P_Factor;
break;
case FSAMPLING:
*puValue = g10023Instance[demodUnit].sConfig.bFsampling;
break;
case IFMAX:
*puValue = g10023Instance[demodUnit].sConfig.bIFMax;
break;
case IFMIN:
*puValue = g10023Instance[demodUnit].sConfig.bIFMin;
break;
case TUNMAX:
*puValue = g10023Instance[demodUnit].sConfig.bTUNMax;
break;
case TUNMIN:
*puValue = g10023Instance[demodUnit].sConfig.bTUNMin;
break;
case AGCTRESHOLD:
*puValue = g10023Instance[demodUnit].sConfig.bAGCtreshold;
break;
case EQUALTYPE:
*puValue = g10023Instance[demodUnit].sConfig.bEqualType;
break;
case POLAPWM1:
*puValue = g10023Instance[demodUnit].sConfig.bPolaPWM1;
break;
case POLAPWM2:
*puValue = g10023Instance[demodUnit].sConfig.bPolaPWM2;
break;
case BERDEPTH:
*puValue = g10023Instance[demodUnit].sConfig.bBERdepth;
break;
case BERWINDOW:
*puValue = g10023Instance[demodUnit].sConfig.uBERwindow;
break;
case CLKOFFSETRANGE:
*puValue = g10023Instance[demodUnit].sConfig.bClkOffsetRange;
break;
case IQSWAP:
*puValue = g10023Instance[demodUnit].sConfig.bTUN_IQSwap;
break;
case IF:
*puValue = g10023Instance[demodUnit].sConfig.uTUN_IF;
break;
case OCLK1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk1;
break;
case PARASER1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bParaSer1;
break;
case MSBFIRST1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1;
break;
case MODEABC1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_ModeABC1;
break;
case PARADIV1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1;
break;
case OCLK2:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk2;
break;
case MSBFIRST2:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2;
break;
case SWDYN:
*puValue = g10023Instance[demodUnit].sConfig.bSwDyn;
break;
case SWSTEP:
*puValue = g10023Instance[demodUnit].sConfig.bSwStep;
break;
// backdoor functions
case IDENTITY:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_IDENTITY_IND, 1, &uByte);
if (uByte != TDA10023_IDENTITY_DEF)
*puValue = False;
else
*puValue = True;
break;
case READSYNC:
if(g10023Instance[demodUnit].sConfig.bModeDvbMcns)
{
// MCNS mode
// MPEGLCK and FRAMELCK
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_MCNS_IND, 1, &uByte);
// shift register to the left in order to have an equivalent mapping as in DVB mode
*puValue = (uByte & (TDA10023_STATUS_MCNS_MPEGLCK_BIT | TDA10023_STATUS_MCNS_FRAMELCK_BIT)) << 1;
// CARLOCK
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_IND, 1, &uByte);
*puValue |= (uByte & TDA10023_STATUS_CARLOCK_BIT);
}
else
{
// DVB mode
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_IND, 1, puValue);
}
break;
case READAGC:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_AGCIF_IND, 1, &uByte);
*puValue = uByte << 8;
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_AGCTUN_IND, 1, &uByte);
*puValue |= uByte;
break;
case GETNBOFUNIT:
*puValue = TDA10023_MAX_UNITS;
break;
case READIQ:
return tmbsl10023GetIQ(demodUnit, puValue);
case READCOEF:
return tmbsl10023GetCOEF(demodUnit, puValue);
case READMSE:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_MSE_IND, 1, puValue);
break;
case STOPEQUAL:
// freeze the equalizer coef only if the algorithm is not working
if (g10023Instance[demodUnit].bState == 0)
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, 0);
break;
case STARTEQUAL:
// unfreeze the equalizer coef only if the algorithm is not working
if (g10023Instance[demodUnit].bState == 0)
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, TDA10023_EQCONF1_ENADAPT_BIT);
break;
case TUNERLVL:
// Test if the GetLevel function is implemented
// NOTE: if the GetLevel function is not implemented or not enabled, we must not
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -