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

📄 tmbsl10023.c

📁 三星一体化数字高频头DNQS221PH261A驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    //----------------------
    // Implementation
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_Read(
            g10023Instance[demodUnit].uDemodHwAdd,
            uIndex,    uNbBytes, puBytes) == False)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

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

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetRF
//
// DESCRIPTION: this function will program the tuner
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetRF (
    tmUnitSelect_t    demodUnit,   //  I: Demod unit number
    UInt32            uRF          //  I: RF frequency (Hz)
)
{
    UInt32 uByte;

    SEND_TRACEFCT1(DEBUG_SETRF_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    if (uRF < TDA10023_RF_MIN || uRF > TDA10023_RF_MAX)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    // set the KAGCIF and KAGCTUN to acquisition mode
    uByte = 0x93;
    g10023Instance[demodUnit].systemFunc.SY_Write(
        g10023Instance[demodUnit].uDemodHwAdd, 
        TDA10023_AGCCONF1_IND,
        1,
        &uByte);


    if (Tda10023WriteRF(&g10023Instance[demodUnit], &uRF) == False)
        return TM_FALSE;

    // update return value
    g10023Instance[demodUnit].sCurrentChannel.uRF = uRF;

    // start algo
    g10023Instance[demodUnit].sApiFlags.iStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetRF
//
// DESCRIPTION: this function gets the current RF Frequency.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TM_OK
//
// NOTES:       the value sotcked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetRF (
    tmUnitSelect_t   demodUnit,   // I: Demod unit number
    UInt32           *puRF        // O: RF frequency (Hz)
)
{
    SEND_TRACEFCT2(DEBUG_GETRF_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    *puRF = g10023Instance[demodUnit].sCurrentChannel.uRF;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetSR
//
// DESCRIPTION: this function set the symbol rate
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetSR (
    tmUnitSelect_t    demodUnit,    //  I: Demod unit number
    UInt32            uSR           //  I: Symbol rate (bauds)
)
{
    SEND_TRACEFCT1(DEBUG_SETSR_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    // SACLK = SysClk/2     (SACLK max = 36MHz)
    // (SACLK/64) < uSR < (SACLK/4)
    // or with high sampling clock (SACLK = SysClk, SACLK max = 72MHz)
    // (SACLK/128) < uSR < (SACLK/8)
    if (uSR < (g10023Instance[demodUnit].uSysClk/(2*64)) || uSR > (g10023Instance[demodUnit].uSysClk/(2*4)))
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    Tda10023WriteSR (&g10023Instance[demodUnit], &uSR);

    // update current config
    g10023Instance[demodUnit].sCurrentChannel.uSR = uSR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetSR
//
// DESCRIPTION: this function returns the symbol rate
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TM_OK
//
// NOTES:       the value stored in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetSR (
    tmUnitSelect_t    demodUnit,    //  I: Demod unit number
    UInt32            *puSR         //  O: Symbol rate (bauds)
)
{
    SEND_TRACEFCT2(DEBUG_GETSR_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    *puSR = g10023Instance[demodUnit].sCurrentChannel.uSR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetSI
//
// DESCRIPTION: this function programs the spectral inversion
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023SetSI (
    tmUnitSelect_t      demodUnit,    //  I: Demod unit number
    tmhalFESpectrum_t   eSI           //  I: Spectral Inversion
)
{
    UInt32 uSi;

    SEND_TRACEFCT1(DEBUG_SETSI_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    if (eSI >= tmhalFESpectralInvMax || eSI < tmhalFESpectrumAuto)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (eSI)
    {
    case tmhalFESpectrumAuto:
        g10023Instance[demodUnit].sApiFlags.iAutoSi = True;
        return TM_OK;

    case tmhalFESpectrumNormal:
        g10023Instance[demodUnit].sApiFlags.iAutoSi = False;
        if (g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
            uSi = TDA10023_CARCONF_INVIQ_BIT;
        else
            uSi = 0;
        break;

    case tmhalFESpectrumInverted:
        g10023Instance[demodUnit].sApiFlags.iAutoSi = False;
        if (g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
            uSi = 0;
        else
            uSi = TDA10023_CARCONF_INVIQ_BIT;
        break;

    default:
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;
    }

    // write the spectral inversion
    if(g10023Instance[demodUnit].sApiFlags.iAutoSi == False)
    {
        g10023Instance[demodUnit].systemFunc.SY_WriteBit(
            g10023Instance[demodUnit].uDemodHwAdd, 
            TDA10023_CARCONF_IND, 
            TDA10023_CARCONF_AUTOINVIQ_BIT | TDA10023_CARCONF_INVIQ_BIT, 
            uSi);
    }
    else
    {
        g10023Instance[demodUnit].systemFunc.SY_WriteBit(
            g10023Instance[demodUnit].uDemodHwAdd, 
            TDA10023_CARCONF_IND, 
            TDA10023_CARCONF_AUTOINVIQ_BIT, 
            TDA10023_CARCONF_AUTOINVIQ_BIT);
    }
    // update value
    g10023Instance[demodUnit].sCurrentChannel.eSI = eSI;

    // start algo
    g10023Instance[demodUnit].sApiFlags.iStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023GetSI
//
// DESCRIPTION: this function reads the spectral inversion regarding to the value of the 
//              IQswapped at the input of the tuner.
//                0: no spectral inversion else spectral inversion.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TM_OK
//
// NOTES:       the register is readed each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023GetSI (
    tmUnitSelect_t     demodUnit,     //  I: Demod unit number
    tmhalFESpectrum_t  *peSI          //  O: Spectral Inversion
)
{
    UInt32 uSi;

    SEND_TRACEFCT2(DEBUG_GETSI_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    g10023Instance[demodUnit].systemFunc.SY_Read(
        g10023Instance[demodUnit].uDemodHwAdd, TDA10023_CARCONF_IND, 1, &uSi);

    // test different cases regarding to the spectral inversion in the tuner
    if ((uSi & TDA10023_CARCONF_INVIQ_BIT) && g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
        *peSI = tmhalFESpectrumNormal;
    else if ((uSi & TDA10023_CARCONF_INVIQ_BIT) && !g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
        *peSI = tmhalFESpectrumInverted;
    else if (!(uSi & TDA10023_CARCONF_INVIQ_BIT) && g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
        *peSI = tmhalFESpectrumInverted;
    else if (!(uSi & TDA10023_CARCONF_INVIQ_BIT) && !g10023Instance[demodUnit].sConfig.bTUN_IQSwap)
        *peSI = tmhalFESpectrumNormal;

    // update value
    g10023Instance[demodUnit].sCurrentChannel.eSI = *peSI;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023SetMod
//
// DESCRIPTION: this function programs the modulation
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK

⌨️ 快捷键说明

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