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

📄 tmbsl10086.c

📁 卫星前段解码器详细代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        case OUT1MSBFIRST:
            g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst = (UInt8)uValue;
            break;
        case OUT1PARBDIV:
            g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv = (UInt8)uValue;
            break;
        case OUT2MODEAB:
            g10086Instance[demodUnit].sConfig.bOUT2_ModeAB = (UInt8)uValue;
            break;
        case OUT2POCLK:
            g10086Instance[demodUnit].sConfig.bOUT2_POClk = (UInt8)uValue;
            break;
        case OUT2MSBFIRST:
            g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst = (UInt8)uValue;
            break;

        // backdoor functions
        case FEINIT:
            // init
            Tda10086WriteInit(&g10086Instance[demodUnit]);
            break;
        case SWITCH:
            if (uValue)
                // open switch
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd,
                    TDA10086_CLEAR_IND,
                    TDA10086_CLEAR_IICTRL_MSK,
                    TDA10086_CLEAR_IICTRL_MSK);
            else
                // close switch
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd,
                    TDA10086_CLEAR_IND,
                    TDA10086_CLEAR_IICTRL_MSK,
                    0);
            break;
        default:
            return TM_ERR_BAD_PARAMETER;
    }

    // start algo
    g10086Instance[demodUnit].bStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086GetConfig:
//
// DESCRIPTION: Get the config of the 10086
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetConfig(
    tmUnitSelect_t  demodUnit,    //  I: Demod unit number
    UInt32          uItemId,      //  I: Identifier of the item to check
    UInt32*         puValue       //  O: Value of the item
)
{
    UInt32 uByte, puByte[2];

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    // get the value
    switch((tm10086cfgIndex_t)uItemId)
    {
        // Board config
        case BOARD:
            *puValue = g10086Instance[demodUnit].sConfig.uBoard;
            break;
        case DSSDVB:
            *puValue = g10086Instance[demodUnit].sConfig.bDSS_DVB;
            break;
        case XTALL:
            *puValue = g10086Instance[demodUnit].sConfig.uXtall;
            break;
        case PLLMFACTOR:
            *puValue = g10086Instance[demodUnit].sConfig.bPLL_M_Factor;
            break;
        case PLLPFACTOR:
            *puValue = g10086Instance[demodUnit].sConfig.bPLL_P_Factor;
            break;
        case BERDEPTH:
            *puValue = g10086Instance[demodUnit].sConfig.bBerDepth;
            break;
        case SEARCHRANGE:
            *puValue = g10086Instance[demodUnit].sConfig.bSearchRange;
            break;
        case POLAAGC:
            *puValue = g10086Instance[demodUnit].sConfig.bPolaAGC;
            break;
        case IQSWAPPED:
            *puValue = g10086Instance[demodUnit].sConfig.bIQ_Swapped;
            break;
        case OUT1MODEABC:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ModeABC;
            break;
        case OUT1PARASER:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParaSer;
            break;
        case OUT1POCLK:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_POClk;
            break;
        case OUT1MSBFIRST:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst;
            break;
        case OUT1PARBDIV:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv;
            break;
        case OUT2MODEAB:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_ModeAB;
            break;
        case OUT2POCLK:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_POClk;
            break;
        case OUT2MSBFIRST:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst;
            break;

        // backdoor functions
        case IDENTITY:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_IDENTITY_IND, 
                1, 
                &uByte);
            if (uByte != 0xE1)
                *puValue = False;
            else
                *puValue = True;
            break;
        case READSYNC:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_SYNC_IND, 
                1, 
                puValue);
            break;
        case READIQ:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_ISYMB_IND, 
                2, 
                puByte);
            *puValue = puByte[0] << 10 | puByte[1] << 2;
            break;
        case READAGCAD:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_VAGCA_IND, 
                1, 
                &uByte);
            *puValue = uByte << 8;
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_VAGCN_IND, 
                1, 
                &uByte);
            *puValue |= uByte;
            break;
        case GETNBOFUNIT:
            *puValue = TDA10086_MAX_UNITS;
            break;
        default:
            return TM_ERR_BAD_PARAMETER;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086Write
//
// DESCRIPTION: this function writes bytes in the demod registers.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086Write (
    tmUnitSelect_t     demodUnit,       //  I: Demod 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
)
{

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    if (g10086Instance[demodUnit].systemFunc.SY_Write(
            g10086Instance[demodUnit].uDemodHwAdd,
            uIndex,
            uNbBytes, 
            puBytes) != uNbBytes)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086WriteBit
//
// DESCRIPTION: this function writes a bit to the mask position
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086WriteBit (
    tmUnitSelect_t     demodUnit,       //  I: Demod unit number
    UInt32             uIndex,          //  I: Index to write
    UInt32             uBitMask,        //  I: byte mask
    UInt32             uByte            //  I: value
)
{

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    if (g10086Instance[demodUnit].systemFunc.SY_WriteBit(
            g10086Instance[demodUnit].uDemodHwAdd,
            uIndex,
            uBitMask, 
            uByte) != True)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086Read
//
// DESCRIPTION: this function reads bytes
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086Read (
    tmUnitSelect_t     demodUnit,       //  I: Demod unit number
    UInt32             uIndex,          //  I: Start index to write
    UInt32             uNbBytes,        //  I: Number of bytes to read
    UInt32*            puBytes          //  O: Pointer on an array of bytes
)
{

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    if (g10086Instance[demodUnit].systemFunc.SY_Read(
            g10086Instance[demodUnit].uDemodHwAdd,
            uIndex, 
            uNbBytes, 
            puBytes) != True)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// Demod-Tuner programming functions:
//-----------------------------------------------------------------------------
//

//-----------------------------------------------------------------------------
// FUNCTION:    Tda10086WriteInit
//
// DESCRIPTION: reset the TDA10086 and start all algo.
//
// RETURN:      True if OK else False
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
Tda10086WriteInit (
    tm10086object_t *psObject
)
{
    UInt32 uByte, puByte[6];
    volatile UInt32 uLong1, uLong2;

    //--------------
    // set the value
    //--------------
    // calculate the system frequency
    psObject->uSysClk  = psObject->sConfig.uXtall*(psObject->sConfig.bPLL_M_Factor+1);
    psObject->uSysClk /= (psObject->sConfig.bPLL_P_Factor+1);

    // CLEAR CARC CSWP CARINIT RHYC AGCRN
    puByte[0] = TDA10086_CLEAR_DEF;
    puByte[1] = TDA10086_CARCTRACKING_DEF;
    puByte[2] = TDA10086_CSWP_DEF;
    puByte[3] = TDA10086_CARINIT_DEF;
    puByte[4] = TDA10086_RHYC_DEF;
    puByte[5] = TDA10086_AGCRN_DEF;
    if (psObject->sConfig.bPolaAGC)
        puByte[5] |= TDA10086_PWMS_BIT;
    if (psObject->systemFunc.SY_Write(
        psObject->uDemodHwAdd,
        TDA10086_CLEAR_IND,
        6, 
        puByte) != True)
        return TM_ERR_IIC_ERR;

    // POLA1 POLA2
    puByte[0] = TDA10086_POLA_DEF;
    if (psObject->sConfig.bOUT1_POClk)
        puByte[0] |= TDA10086_POLA_POCLK_BIT;
    puByte[1] = TDA10086_POLA_DEF;
    if (psObject->sConfig.bOUT2_POClk)
        puByte[1] |= TDA10086_POLA_POCLK_BIT;
    psObject->systemFunc.SY_Write(
        psObject->uDemodHwAdd,
        TDA10086_POLA1_IND,
        2, 
        puByte);

    // FREQ_NCO
    Tda10086WriteNCO(psObject);

    // WPLL_DIV
    uByte = TDA10086_VBER_MSB_DEF;
    psObject->systemFunc.SY_Write(
        psObject->uDemodHwAdd,
        TDA10086_VBERMSB_IND,
        1, 
        &uByte);

    // TS_INT MODE
    puByte[0] = psObject->sConfig.bOUT1_ParBDiv << 2;
    puByte[1] = psObject->sConfig.bBerDepth << 4;
    if (psObject->sConfig.bOUT1_ParaSer == TDA10086_SERIAL_VAL)
    {
        puByte[0] |= TDA10086_TSINT_SERINT_BIT;

⌨️ 快捷键说明

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