📄 tmbsltda18271.c
字号:
case tmTDA18271_PowerStandbyWithLoopThrough:
// set SM bits
pObj->I2CMap.uBx05.bF.SM = 0x01;
pObj->I2CMap.uBx05.bF.SM_LT = 0x00;
pObj->I2CMap.uBx05.bF.SM_XT = 0x01;
break;
default:
// power state not supported
return TM_ERR_NOT_SUPPORTED;
}
// store power state
pObj->curPowerState = powerState;
// set CAL_Mode to normal mode
pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
// write byte EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
err = TDA18271Write(pObj, 0x05, 2);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x08X, 0x05, 2) failed.", pObj->tUnit));
return err;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18271GetPowerState:
//
// DESCRIPTION: Get the power state of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
tmbslTDA18271GetPowerState
(
tmUnitSelect_t tUnit, /* I: Unit number */
tmTDA18271PowerState_t *pPowerState /* O: Power state of this device */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
// pObj initialization
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
// get power state
err = TDA18271GetPowerState(pObj, pPowerState);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetPowerState(0x%08X) failed.", tUnit));
return err;
}
//-------------------------------------------------------------------------------------
// FUNCTION: TDA18271GetPowerState:
//
// DESCRIPTION: Get the power state of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18271GetPowerState
(
ptmTDA18271Object_t pObj, /* I: Driver object */
tmTDA18271PowerState_t *pPowerState /* I: Power state of this device */
)
{
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
//----------------------
// 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 = tmTDA18271_PowerNormalMode;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
*pPowerState = tmTDA18271_PowerSleepMode;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
*pPowerState = tmTDA18271_PowerStandbyWith16MHz;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
*pPowerState = tmTDA18271_PowerStandbyWith16MHzAndLoopThrough;
else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
*pPowerState = tmTDA18271_PowerStandbyWithLoopThrough;
else
*pPowerState = tmTDA18271_PowerNotSupported;
return TM_OK;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18271SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
tmbslTDA18271SetStandardMode
(
tmUnitSelect_t tUnit, /* I: Unit number */
tmTDA18271StandardMode_t StandardMode /* I: Standard mode of this device */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
// pObj initialization
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
// store standard mode
pObj->StandardMode = StandardMode;
// Perform a SetRf to apply new standard
//err = tmbslTDA18271SetRf)(tUnit, pObj->Config.uRF);
//tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "tmbslTDA18271SetRf(0x%08X) failed.", tUnit));
return err;
}
//-------------------------------------------------------------------------------------
// FUNCTION: TDA18271SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18271SetStandardMode
(
ptmTDA18271Object_t pObj, /* I: Driver object */
tmTDA18271StandardMode_t StandardMode /* I: Standard mode of this device */
)
{
Bool customIF = False;
Bool customLPFc = False;
Bool customIFlevel = False;
UInt8 stdValue = 0;
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
if(StandardMode>=tmTDA18271_StdNotSupported)
{
// standard mode not supported
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 standard not supported (0x%08X).", pObj->tUnit);
return TM_ERR_NOT_SUPPORTED;
}
// set custom IF Level flag
if (((pObj->Config.uPROTOCOLSTEP & 0x04) >> 2) == 0x01)
customIFlevel = True;
// 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 IF frequency
if (!customIF) pObj->Config.uIF = pObj->Config.Std_Array[StandardMode].uIF;
// set AGCK_Mode
pObj->I2CMap.uBx05.bF.AGCK_Mode = pObj->Config.Std_Array[StandardMode].uAGCK_Mode;
pObj->I2CMap.uBx05.bF.AGC_Low_BW = 0x01;
// Set LPFc
if(!customLPFc) pObj->I2CMap.uBx05.bF.LP_Fc = pObj->Config.Std_Array[StandardMode].uLPFc;
// set FM_RFn bit
pObj->I2CMap.uBx06.bF.FM_RFn = pObj->Config.Std_Array[StandardMode].uFM_RFn;
// set IF_Level
if (!customIFlevel) pObj->I2CMap.uBx06.bF.IF_Level = pObj->Config.Std_Array[StandardMode].uIF_Level;
// set IF_notch
pObj->I2CMap.uBx0C.bF.IF_notch = pObj->Config.Std_Array[StandardMode].uIF_Notch;
// set RFAGC_Top & IFAGC_Top
pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = pObj->Config.Std_Array[StandardMode].uRF_IF_AGC_Top;
// set CAL_Mode to normal mode
pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
// store standard mode
pObj->StandardMode = StandardMode;
return TM_OK;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18271GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
tmbslTDA18271GetStandardMode
(
tmUnitSelect_t tUnit, /* I: Unit number */
tmTDA18271StandardMode_t *pStandardMode /* O: Standard mode of this device */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
// pObj initialization
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
// get standard mode
err = TDA18271GetStandardMode(pObj, pStandardMode);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetStandardMode(0x%08X).", tUnit));
return err;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18271GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18271GetStandardMode
(
ptmTDA18271Object_t pObj, /* I: Driver object */
tmTDA18271StandardMode_t *pStandardMode /* O: Standard mode of this device */
)
{
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
//----------------------
// get the value
//----------------------
*pStandardMode = pObj->StandardMode;
return TM_OK;
}
//-------------------------------------------------------------------------------------
// FUNCTION: tmbslTDA18271SetRf:
//
// DESCRIPTION: Calculate i2c I2CMap & write in TDA18271
//
// RETURN: TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
// TDA18271_ERR_NOT_INITIALIZED
// TDA18271_ERR_BAD_PARAMETER
// TMBSL_ERR_IIC_ERR
// TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
tmbslTDA18271SetRf
(
tmUnitSelect_t tUnit, /* I: Unit number */
UInt32 uRF /* I: RF frequency in hertz */
)
{
ptmTDA18271Object_t pObj;
tmErrorCode_t err = TM_OK;
UInt32 uCounter = 0;
UInt32 uTMVALUE_CURRENT = 0;
UInt8 utmpRFAGC = 0;
UInt8 uCprog_table = 0;
Int32 uCapprox = 0;
Int32 uCprog_signed = 0;
//------------------------------
// test input parameters
//------------------------------
// pObj initialization
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
// Config.uRF update
pObj->Config.uRF = uRF;
//----------------------
// configuration reset
//----------------------
// set power level indicator to off
pObj->Config.uPLMODE = 1;
//----------------------
// normal mode restore
//----------------------
// power up in calibration standard
err = TDA18271SetPowerState(pObj, tmTDA18271_PowerNormalMode);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271SetPowerState(0x%08X, tmTDA18271_PowerNormalMode) failed.", tUnit));
//----------------------
// RF tracking filter correction
//----------------------
// sense temperature
err = TDA18271ThermometerRead(pObj, &uTMVALUE_CURRENT);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271ThermometerRead(0x%08X) failed.", tUnit));
//----------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -