📄 tmbsltda18211.c
字号:
// read from the Tuner
if (TDA18211Read(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
return TMBSL_ERR_IIC_ERR;
// copy readen values to puBytes
for (uCounter = 0; uCounter < uNbBytes; uCounter++)
{
*puBytes = (UInt32)(*pI2CMap);
pI2CMap ++;
puBytes ++;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211SetConfig:
//
// DESCRIPTION: Set the Config of the TDA18211
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_ERR_NOT_SUPPORTED
// TMBSL_ERR_TUNER_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(SetConfig)
(
tmUnitSelect_t TunerUnit, // I: TunerUnit number
UInt32 uItemId, // I: Identifier of the item to modify
UInt32 uValue // I: Value to set for the Config item
)
{
ptmTDA18211Object_t pObj;
UInt8* pI2CMap;
UInt32* pDataMap;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (TunerUnit > TDA18211_MAX_UNITS)
return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
// test the Object
if (gTDA18211Instance[TunerUnit].init == False)
return TMBSL_ERR_TUNER_NOT_INITIALIZED;
// pObj initialization
pObj = &gTDA18211Instance[TunerUnit];
//--------------
// set the value
//--------------
switch((tmTDA18211cfgIndex_t)uItemId)
{
case BOARD:
switch (uValue & 0xffff0000)
{
case OM5776_BOARD_DEF:
case OM5780_BOARD_DEF:
case OM5782_BOARD_DEF:
case OM5764_BOARD_DEF:
/*pObj->Config.uXTOUT = 1;
pObj->I2CMap.XTout_ON = 1;*/
break;
case OM5770C2_BOARD_DEF & 0xffff0000:
case OM5775_BOARD_DEF:
case OM5777_BOARD_DEF:
case CUSTOM_BOARD_DEF:
// do nothing more than setting the default values
break;
default:
// board not supported
return TM_ERR_NOT_SUPPORTED;
}
// store board
gTDA18211Instance[TunerUnit].Config.uBoard = uValue;
break;
case FEINIT:
if(TDA18211Init(TunerUnit) == TMBSL_ERR_IIC_ERR)
return TMBSL_ERR_IIC_ERR;
break;
case RF:
// set RF frequency
pObj->Config.uRF = uValue;
break;
case IF:
// set IF frequency
pObj->Config.uIF = uValue;
break;
case PLMODE:
// set uPLMODE
pObj->Config.uPLMODE = uValue;
// write byte EASY_PROG_BYTE_1
if (TDA18211Write(pObj,0x03,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case PLRUN:
// switch power level indicator on
pObj->Config.uPLMODE = 0x00;
// write byte EASY_PROG_BYTE_1
if (TDA18211Write(pObj,0x03,1) != True)
return TMBSL_ERR_IIC_ERR;
// read bytes 0x00 to 0x0F
if (TDA18211Read (pObj, 0x00, 16) != True)
return TMBSL_ERR_IIC_ERR;
// switch power level indicator off
pObj->Config.uPLMODE = 0x01;
// write byte EASY_PROG_BYTE_1
if (TDA18211Write(pObj,0x03,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case POWERSTATE:
// set POWERSTATE
TDA18211SetPowerState (pObj, uValue);
// set CAL_Mode to normal mode
pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
// write byte EASY_PROG_BYTE_3
if (TDA18211Write(pObj,0x05,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case STANDARDMODE:
// set STANDARDMODE
TDA18211SetStandardMode (pObj, uValue);
// set CAL_Mode to normal mode
pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
// write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
if (TDA18211Write(pObj,0x05,2) != True)
return TMBSL_ERR_IIC_ERR;
// write MAIN_POST_DIV_BYTE
if (TDA18211Write(pObj,0x0C,1) != True)
return TMBSL_ERR_IIC_ERR;
// write byte EXTENDED_BYTE_22
if (TDA18211Write(pObj,0x25,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case LPFC:
// set LP_Fc
pObj->I2CMap.uBx05.bF.Std = (pObj->I2CMap.uBx05.bF.Std & 0xFC) | ((UInt8)uValue & 0x03);
// write byte EASY_PROG_BYTE_3
if (TDA18211Write(pObj,0x05,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case XTOUT:
// set XTout_ON
pObj->I2CMap.uBx06.bF.XTout_ON = (UInt8)(uValue) >> 1;
// set Xtout_400mV
pObj->I2CMap.uBx06.bF.Xtout_400mV = (UInt8)(uValue) & 0x01;
// write byte EASY_PROG_BYTE_4
if (TDA18211Write(pObj,0x06,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case IFLEVEL:
// set IF_Level
pObj->I2CMap.uBx06.bF.IF_Level = (UInt8)uValue;
// write byte EASY_PROG_BYTE_4
if (TDA18211Write(pObj,0x06,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case EXTENDEDREG:
// set Extended_Reg
pObj->I2CMap.uBx07.bF.Extended_Reg = (UInt8)uValue;
// write byte EASY_PROG_BYTE_5
if (TDA18211Write(pObj,0x07,1) != True)
return TMBSL_ERR_IIC_ERR;
break;
case MAPNAME:
// set map name
pObj->Config.uMAPNAME = uValue;
break;
case MAPCOLUMN:
// set map x
pObj->Config.uMAPCOLUMN = uValue;
break;
case MAPROW:
// set map y
pObj->Config.uMAPROW = uValue;
break;
case MAPVALUE:
// set pointer on wanted cell
switch (pObj->Config.uMAPNAME)
{
case tmTDA18211_IR_MEAS_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_IR_MEAS_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_IR_MEAS_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_IR_CAL_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_IR_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_IR_CAL_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
break;
case tmTDA18211_BP_FILTER_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_BP_FILTER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_BP_FILTER_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_RF_BAND_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_BAND_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_BAND_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_GAIN_TAPER_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_GAIN_TAPER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_GAIN_TAPER_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_RF_CAL_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_RF_CAL_DC_OVER_DT_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_DC_OVER_DT_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_DC_OVER_DT_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_RF_CAL_KMCO_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_KMCO_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_KMCO_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_RF_CAL_CID_TARGET_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_CID_TARGET_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_CID_TARGET_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
break;
case tmTDA18211_THERMOMETER_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_THERMOMETER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_THERMOMETER_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
break;
case tmTDA18211_CAL_PLL_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_CAL_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_CAL_PLL_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
break;
case tmTDA18211_MAIN_PLL_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > TDA18211_MAIN_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_MAIN_PLL_NB_ROWS - 1))
return TM_ERR_NOT_SUPPORTED;
// pDataMap initialization
pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
break;
case tmTDA18211_I2C_Map:
// test map column & row
if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18211_NB_BYTES - 1))
return TM_ERR_NOT_SUPPORTED;
// pI2CMap initialization
pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
break;
}
// set cell value
if (pObj->Config.uMAPNAME == tmTDA18211_I2C_Map)
*(pI2CMap + (UInt8)pObj->Config.uMAPCOLUMN) = (UInt8)uValue;
else
*(pDataMap + pObj->Config.uMAPCOLUMN) = uValue;
break;
case PROTOCOLSTEP:
// set channel configuration protocol steps to execute
pObj->Config.uPROTOCOLSTEP = uValue;
break;
case READINIT:
// read bytes 0x00 to 0x26
if (TDA18211Read (pObj,0x00,39) != True)
return TMBSL_ERR_IIC_ERR;
if (uValue == 1)
{
// initialize device
if(TDA18211Init(TunerUnit) == TMBSL_ERR_IIC_ERR)
return TMBSL_ERR_IIC_ERR;
}
break;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211GetConfig:
//
// DESCRIPTION: Get the Config of the TDA18211
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(GetConfig)
(
tmUnitSelect_t TunerUnit, // I: Tuner unit number
UInt32 uItemId, // I: Identifier of the item to get value
UInt32* puValue // I: Address of the variable to output the Config item value
)
{
UInt32 uCounter = 0;
ptmTDA18211Object_t pObj;
UInt8* pI2CMap;
UInt32* pDataMap;
UInt32 uByte=0;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (TunerUnit > TDA18211_MAX_UNITS)
return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;
// test the Object
if (gTDA18211Instance[TunerUnit].init == False)
return TMBSL_ERR_TUNER_NOT_INITIALIZED;
// pObj initialization
pObj = &gTDA18211Instance[TunerUnit];
//--------------
// get the value
//--------------
switch((tmTDA18211cfgIndex_t)uItemId)
{
case BOARD:
// get board
*puValue = pObj->Config.uBoard;
break;
case RF:
// get RF frequency
*puValue = pObj->Config.uRF;
break;
case IF:
// get IF frequency
*puValue = pObj->Config.uIF;
break;
case STATUSBYTE:
// read bytes 0x00 to 0x26
if (TDA18211Read (pObj,0x00,39) != True)
return TMBSL_ERR_IIC_ERR;
break;
case GETNBOFUNIT:
*puValue = TDA18211_MAX_UNITS;
break;
case ID:
// get ID value
*puValue = pObj->I2CMap.uBx00.bF.ID;
break;
case POR:
// get POR value
*puValue = pObj->I2CMap.uBx01.bF.POR;
break;
case MAINLOCK:
// get MAINLOCK value
*puValue = TunerUnit == 0 ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock;
break;
case TMVALUE:
// read byte THERMO_BYTE
if (TDA18211ThermometerRead(pObj, (UInt8 *)puValue) != TM_OK || pObj->I2CMap.uBx05.bF.SM == 1)
return TMBSL_ERR_IIC_ERR;
break;
case PLMODE:
// get PLMODE value
*puValue = pObj->Config.uPLMODE;
break;
case PLAGC1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -