⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmbsltda18271.c

📁 nxp silicon tuner 18271 sample code
💻 C
📖 第 1 页 / 共 5 页
字号:

    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 + -