📄 tmbsltda18211.c
字号:
// get the value
//----------------------
if ((pObj->I2CMap.uBx05.bF.SM == 0x00) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
*pPowerState = tmPowerNormalMode;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
*pPowerState = tmPowerSleepMode;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
*pPowerState = tmPowerStandbyWith16MHz;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
*pPowerState = tmPowerStandbyWith16MHzAndLoopThrough;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
*pPowerState = tmPowerStandbyWithLoopThrough;
else
*pPowerState = tmPowerNotSupported;
return TM_OK;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(SetStandardMode)
(
tmUnitSelect_t TunerUnit, // I: Tuner unit number
tmTDA18211StandardMode_t StandardMode // I: Standard mode of this device
)
{
ptmTDA18211Object_t pObj;
Bool customIF = FALSE;
Bool customLPFc = FALSE;
//------------------------------
// 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];
return TDA18211SetStandardMode(pObj, StandardMode);
}
//-------------------------------------------------------------------------------------
// FUNCTION: TDA18211SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18211SetStandardMode(
ptmTDA18211Object_t pObj, // I: tuner Object
tmTDA18211StandardMode_t StandardMode// I: Standard mode of this device
)
{
Bool customIF = FALSE;
Bool customLPFc = FALSE;
// set custom IF flag
if (((pObj->Config.uPROTOCOLSTEP & 0x02) >> 1) == 0x01)
customIF = TRUE;
// set custom LPFc flag
if (((pObj->Config.uPROTOCOLSTEP & 0x01) >> 0) == 0x01)
customLPFc = TRUE;
// set uIF & Std
switch (StandardMode)
{
case tmDigital_TV_ATSC_6MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 3250000;
// set bandwidth value
pObj->Config.uBW = 6000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1C : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1C & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
case tmDigital_TV_DVBT_7MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 3800000;
// set bandwidth value
pObj->Config.uBW = 7000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
case tmDigital_TV_DVBT_8MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 4300000;
// set bandwidth value
pObj->Config.uBW = 8000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1E : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1E & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
case tmDigital_CAL:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 1250000;
// set bandwidth value
pObj->Config.uBW = 250000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x18 : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x18 & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x01;
break;
case tmDigital_TV_QAM_6MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 4000000;
// set bandwidth value
pObj->Config.uBW = 6000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
case tmDigital_TV_QAM_8MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 5000000;
// set bandwidth value
pObj->Config.uBW = 8000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1F : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1F & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
case tmDigital_TV_ISDBT_6MHz:
// set IF frequency
if (!customIF)
pObj->Config.uIF = 4063000;
// set bandwidth value
pObj->Config.uBW = 6000000;
// set Std bit
pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);
// set CAL_RFn bit
pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
break;
}
// set CAL_Mode to normal mode
pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
// set IF_Level & IF_notch & RFAGC_Top & IFAGC_Top
switch (StandardMode)
{
case tmDigital_TV_ATSC_6MHz:
case tmDigital_TV_DVBT_7MHz:
case tmDigital_TV_DVBT_8MHz:
case tmDigital_TV_QAM_6MHz:
case tmDigital_TV_QAM_8MHz:
case tmDigital_TV_ISDBT_6MHz:
// set IF_Level
pObj->I2CMap.uBx06.bF.IF_Level = 0x01;
// set IF_notch
pObj->I2CMap.uBx0C.bF.IF_notch = 0x01;
// set RFAGC_Top & IFAGC_Top
pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x37;
break;
case tmDigital_CAL:
// set IF_Level
pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
// set IF_notch
pObj->I2CMap.uBx0C.bF.IF_notch = 0x00;
// set RFAGC_Top & IFAGC_Top
pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x2C;
break;
default:
// standard mode not supported
return TM_ERR_NOT_SUPPORTED;
}
// store standard mode
pObj->StandardMode = StandardMode;
return TM_OK;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(GetStandardMode)
(
tmUnitSelect_t TunerUnit, // I: Tuner unit number
tmTDA18211StandardMode_t *pStandardMode // O: Standard mode of this device
)
{
ptmTDA18211Object_t pObj;
//------------------------------
// 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];
return TDA18211GetStandardMode(pObj, pStandardMode);
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18211GetStandardMode
(
ptmTDA18211Object_t pObj, // I: tuner Object
tmTDA18211StandardMode_t *pStandardMode // O: Standard mode of this device
)
{
//----------------------
// get the value
//----------------------
*pStandardMode = pObj->StandardMode;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211Write:
//
// DESCRIPTION: Write in the Tuner.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TMBSL_ERR_IIC_ERR
// TM_OK
//
// NOTES: uIndex: IN parameter containing the HW Sub Address as specified in
// the datasheet (i.e. looks like 0xX0)
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(Write)
(
tmUnitSelect_t TunerUnit, // I: Tuner 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
)
{
UInt32 uCounter;
UInt8* pI2CMap;
ptmTDA18211Object_t pObj;
//----------------------
// 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;
// test the parameters. uIndex is: 0x0X
if ((uIndex + uNbBytes) > TDA18211_NB_BYTES)
return TMBSL_ERR_TUNER_BAD_PARAMETER;
// pObj & pI2CMap initialization
pObj = &gTDA18211Instance[TunerUnit];
pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
//--------------
// set the value
//--------------
// save the values written in the Tuner
for (uCounter = 0; uCounter < uNbBytes; uCounter++)
{
*pI2CMap = (UInt8)(puBytes[uCounter]);
pI2CMap ++;
}
// write in the Tuner
if (TDA18211Write(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
return TMBSL_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211WriteBit:
//
// DESCRIPTION: Write in the Tuner.
//
// RETURN: TM_ERR_NOT_SUPPORTED
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(WriteBit)
(
tmUnitSelect_t TunerUnit, // I: Tuner unit number
UInt32 uIndex, // I: Start index to write
UInt32 uBitMask, // I: bit mask
UInt32 uBitValue // I: bit value
)
{
return TM_ERR_NOT_SUPPORTED;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbslTDA18211Read:
//
// DESCRIPTION: Read in the Tuner.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TMBSL_ERR_TUNER_NOT_INITIALIZED
// TMBSL_ERR_TUNER_BAD_PARAMETER
// TMBSL_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(Read)
(
tmUnitSelect_t TunerUnit, // I: Tuner unit number
UInt32 uIndex, // I: Start index to read
UInt32 uNbBytes, // I: Number of bytes to read
UInt32* puBytes // I: Pointer on an array of bytes
)
{
UInt32 uCounter;
UInt8* pI2CMap;
ptmTDA18211Object_t pObj;
//----------------------
// 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;
// test the Object
if (uNbBytes > TDA18211_NB_BYTES)
return TMBSL_ERR_TUNER_BAD_PARAMETER;
// test uIndex
if (uIndex == -1)
uIndex = 0;
// pObj & pI2CMap initialization
pObj = &gTDA18211Instance[TunerUnit];
pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;
//--------------
// get the value
//--------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -