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

📄 tmbsltda18271.c

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

tmErrorCode_t
tmbslTDA18271GetIF
(
    tmUnitSelect_t  tUnit,  /* I: Unit number */
    UInt32* puIF            /* O: IF Frequency in hertz */
)
{
    ptmTDA18271Object_t pObj = Null;
    tmErrorCode_t       err = TM_OK;

    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;
    }

    *puIF = pObj->Config.uIF;

    return err;
}

/*============================================================================*/
/* tmbslTDA18271GetLockStatus                                                 */
/*============================================================================*/

tmErrorCode_t
tmbslTDA18271GetLockStatus
(
    tmUnitSelect_t          tUnit,      /* I: Unit number */
    tmbslFrontEndState_t*   pLockStatus /* O: PLL Lock status */
)
{
    ptmTDA18271Object_t pObj = Null;
    tmErrorCode_t       err = TM_OK;

    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;
    }

    *pLockStatus = tmbslFrontEndStateUnknown;

    err = TDA18271Read (pObj ,0x00, 39);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Read(0x%08X, 0x00, 39) failed.", tUnit));

    *pLockStatus = ((pObj->Config.uMasterDevice) ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock)?tmbslFrontEndStateLocked:tmbslFrontEndStateNotLocked;

    return err;
}

//-----------------------------------------------------------------------------
// Internal functions:
//-----------------------------------------------------------------------------
//

//-----------------------------------------------------------------------------
// FUNCTION:    TDA18271Init:
//
// DESCRIPTION: initialization of the Tuner
//
// RETURN:      always True
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TDA18271Init
(
    tmUnitSelect_t  tUnit   /* I: Unit number */
)
{     
    ptmTDA18271Object_t pObj = Null;
    tmErrorCode_t       err  = TM_OK;

    //------------------------------
    // 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;
    }

    //----------------------
    // configuration reset
    //----------------------
    // set power level indicator to off
    pObj->Config.uPLMODE = 1;

    // Read ID Byte
    err = TDA18271Read(pObj, 0x00, 16);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Read(0x%08X, 0x00, 16) failed.", tUnit));

    tmDBGPRINTEx(DEBUGLVL_TERSE, "TDA18271Init(0x%08X)", tUnit);
    tmDBGPRINTEx(DEBUGLVL_TERSE, " --> I2C Map Initialization");
    //----------------------
    // I2C map initialization
    //----------------------
    // set & write all bytes
    pObj->I2CMap.uBx01.THERMO_BYTE = 0x08;
    pObj->I2CMap.uBx02.POWER_LEVEL_BYTE = 0x80;
    pObj->I2CMap.uBx03.EASY_PROG_BYTE_1 = 0xC6;
    pObj->I2CMap.uBx04.EASY_PROG_BYTE_2 = 0xDF;
    pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x16;
    pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x60;
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x80;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x80;
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x00;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
    pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
    pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x00;
    pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x00;
    pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x00;
    pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
    pObj->I2CMap.uBx10.EXTENDED_BYTE_1 = 0xFC;
    pObj->I2CMap.uBx11.EXTENDED_BYTE_2 = 0x01;
    pObj->I2CMap.uBx12.EXTENDED_BYTE_3 = 0x84;
    pObj->I2CMap.uBx13.EXTENDED_BYTE_4 = 0x41;
    pObj->I2CMap.uBx14.EXTENDED_BYTE_5 = 0x01;
    pObj->I2CMap.uBx15.EXTENDED_BYTE_6 = 0x84;
    pObj->I2CMap.uBx16.EXTENDED_BYTE_7 = 0x40;
    pObj->I2CMap.uBx17.EXTENDED_BYTE_8 = 0x07;
    pObj->I2CMap.uBx18.EXTENDED_BYTE_9 = 0x00;
    pObj->I2CMap.uBx19.EXTENDED_BYTE_10 = 0x00;
    pObj->I2CMap.uBx1A.EXTENDED_BYTE_11 = 0x96;

    if(pObj->I2CMap.uBx00.bF.ID<5)
    {
        // TDA18271C2
        pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
        pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
    }
    else
    {
        // TDA18271AC1
        pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x14;
        pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x03;
    }

    //pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
    pObj->I2CMap.uBx1C.EXTENDED_BYTE_13 = 0xC1;
    pObj->I2CMap.uBx1D.EXTENDED_BYTE_14 = 0x00;
    pObj->I2CMap.uBx1E.EXTENDED_BYTE_15 = 0x8F;
    //pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
    pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00;
    pObj->I2CMap.uBx21.EXTENDED_BYTE_18 = 0x8C;
    pObj->I2CMap.uBx22.EXTENDED_BYTE_19 = 0x00;
    pObj->I2CMap.uBx23.EXTENDED_BYTE_20 = 0x20;
    pObj->I2CMap.uBx24.EXTENDED_BYTE_21 = 0xB3;
    pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x48;
    pObj->I2CMap.uBx26.EXTENDED_BYTE_23 = 0xB0;

    err = TDA18271Write(pObj,0x01,38);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x01, 38) failed.", tUnit));

    if(pObj->I2CMap.uBx00.bF.ID<5)
    {
        // TDA18271C2
        //----------------------
        // AGC1 gain setup
        //----------------------
        // AGC1_Gain_do
        // update & write EXTENDED_BYTE_17

        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00;    // set gain_do address
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x03;    // keep gain_do address, set gain_do 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        // AGC1_Gain_up
        // update & write EXTENDED_BYTE_17
        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x43;    // set gain_up address, keep gain_do 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x4C;    // keep gain_up address, set gain_up 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
    }
    else
    {
        // TDA18271AC1
        //----------------------
        // AGC1 gain setup
        //----------------------
        // AGC1_Gain_do
        // update & write EXTENDED_BYTE_17
        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x80;    // set gain_do address
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x83;    // keep gain_do address, set gain_do 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        // AGC1_Gain_up
        // update & write EXTENDED_BYTE_17
        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0xC3;    // set gain_up address, keep gain_do 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));

        pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0xC9;    // keep gain_up address, set gain_up 
        err = TDA18271Write(pObj, 0x20, 1);
        tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
    }

    tmDBGPRINTEx(DEBUGLVL_TERSE, " --> IR Calibration");
    tmDBGPRINTEx(DEBUGLVL_TERSE, "     - IR Cal Low Band");
    //----------------------
    // image rejection calibration - low band
    //----------------------
    // initialization
    pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x1F;
    pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x66;
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x81;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCC;
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x6C;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
    pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
    pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xC5;
    pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x77;
    pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x08;
    pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
    // write bytes EASY_PROG_BYTE_2 to MAIN_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x04, 12);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 12) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // launch detector
    // write byte EASY_PROG_BYTE_1
    err = TDA18271Write(pObj, 0x03, 1);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));

    // wait 5 ms for wanted measurement
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // CAL PLL update
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x85;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCB; 
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x70;

    // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x05, 7);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // launch optimization algorithm
    // write byte EASY_PROG_BYTE_2
    err = TDA18271Write(pObj, 0x04, 1);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 1) failed.", tUnit));

    // wait 30 ms for image optimization completion
    err = TDA18271Wait(pObj, 30);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 30) failed.", tUnit));

    tmDBGPRINTEx(DEBUGLVL_TERSE, "     - IR Cal Mid Band");
   //----------------------
    // image rejection calibration - mid band
    //----------------------
    // initialization
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x82;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
    pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xA1;
    pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x73;
    pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x1A;
    // write bytes EASY_PROG_BYTE_3 to MAIN_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x05, 11);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 11) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // launch detector
    // write byte EASY_PROG_BYTE_1
    err = TDA18271Write(pObj, 0x03, 1);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));

    // wait 5 ms for wanted measurement
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // CAL PLL update
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x86;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0xA0;

    // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x05, 7);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // launch optimization algorithm
    // write byte EASY_PROG_BYTE_2
    err = TDA18271Write(pObj, 0x04, 1);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 1) failed.", tUnit));

    // wait 30 ms for image optimization completion
    err = TDA18271Wait(pObj, 30);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 30) failed.", tUnit));

    tmDBGPRINTEx(DEBUGLVL_TERSE, "     - IR Cal High Band");
    //----------------------
    // image rejection calibration - high band
    //----------------------
    // initialization
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x83;
    pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x98;
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
    pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x91;
    pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x71;
    pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0xCD;        
    // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x05, 11);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 11) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // launch detector
    // write byte EASY_PROG_BYTE_1
    err = TDA18271Write(pObj, 0x03, 1);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));

    // wait 5 ms for wanted measurement
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

    // CAL PLL update
    pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x87;
    pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
    pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x50;

    // write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
    err = TDA18271Write(pObj, 0x05, 7);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));

    // wait 5 ms for PLL locking
    err = TDA18271Wait(pObj, 5);
    tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -