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

📄 tmbsl10046.c

📁 TDA10046驱动源代码.TDA10046是PHILIPS的一款DVB-T TUNER
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (eVRHP != tmhalFEDepuncRateAuto)
    {
		g10046Instance[demodUnit].systemFunc.SY_WriteBit(
			g10046Instance[demodUnit].uDemodHwAdd,
			TDA10046_IN_CONF2_IND, TDA10046_INCONF2_RH_MSK, uVrHp);
	}

    // update current config
	g10046Instance[demodUnit].sCurrentChannel.eVRHP = eVRHP;

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

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetVRHP
//
// DESCRIPTION: this function reads the viterbi rate for the high priority channel
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the register is readed each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetVRHP (
    tmUnitSelect_t          demodUnit,      //  I: Demod unit number
	tmhalFEDepuncRate_t	    *peVRHP			//  O: Viterbi Rate for HP
)
{
    UInt32 uVrHp;

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

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

    //----------------------
    // Implementation
    //----------------------
    g10046Instance[demodUnit].systemFunc.SY_Read(
	    g10046Instance[demodUnit].uDemodHwAdd,
	    TDA10046_OUT_CONF2_IND, 1, &uVrHp);

    // read High Priority inner code rate
    uVrHp &= TDA10046_OUTCONF2_RHF_MSK;

    // interpret value
    switch (uVrHp)
    {
    case 0:
        *peVRHP = tmhalFEDepuncRate12;
        break;
    case 1:
        *peVRHP = tmhalFEDepuncRate23;
        break;
    case 2:
        *peVRHP = tmhalFEDepuncRate34;
        break;
    case 3:
        *peVRHP = tmhalFEDepuncRate56;
        break;
    case 4:
        *peVRHP = tmhalFEDepuncRate78;
        break;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetVRLP
//
// DESCRIPTION: this function programs the viterbi rate for the low priority channel
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       the auto mode is managed by Tda10046UseTPSbit()
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetVRLP (
    tmUnitSelect_t          demodUnit,			//  I: Demod unit number
	tmhalFEDepuncRate_t	    eVRLP				//  I: Viterbi Rate for LP
)
{
    UInt32 uVrLp;

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

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

	// test the parameter value
	if (eVRLP >= tmhalFEDepuncRateMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (eVRLP)
    {
    case tmhalFEDepuncRateAuto:
        break;
    case tmhalFEDepuncRate12:
        uVrLp = 0x00;
        break;
    case tmhalFEDepuncRate23:
        uVrLp = 0x08;
        break;
    case tmhalFEDepuncRate34:
        uVrLp = 0x10;
        break;
    case tmhalFEDepuncRate56:
        uVrLp = 0x18;
        break;
    case tmhalFEDepuncRate78:
        uVrLp = 0x20;
        break;
    default:
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;
    }

    // write Low Priority inner code rate
    if (eVRLP != tmhalFEDepuncRateAuto)
    {
		g10046Instance[demodUnit].systemFunc.SY_WriteBit(
			g10046Instance[demodUnit].uDemodHwAdd,
			TDA10046_IN_CONF2_IND, TDA10046_INCONF2_RL_MSK, uVrLp);
	}

    // update current config
	g10046Instance[demodUnit].sCurrentChannel.eVRLP = eVRLP;

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

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetVRLP
//
// DESCRIPTION: this function reads the viterbi rate of the low priority channel
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       the register is readed each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetVRLP (
    tmUnitSelect_t          demodUnit,      //  I: Demod unit number
	tmhalFEDepuncRate_t	    *peVRLP			//  O: Viterbi Rate for LP
)
{
    UInt32 uVrlp;

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

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

    //----------------------
    // Implementation
    //----------------------
    g10046Instance[demodUnit].systemFunc.SY_Read(
	    g10046Instance[demodUnit].uDemodHwAdd,
	    TDA10046_OUT_CONF2_IND, 1, &uVrlp);

    // read Low Priority inner code rate
    uVrlp &= TDA10046_OUTCONF2_RLF_MSK;
    uVrlp >>= 3;

    // interpret value
    switch (uVrlp)
    {
    case 0:
        *peVRLP = tmhalFEDepuncRate12;
        break;
    case 1:
        *peVRLP = tmhalFEDepuncRate23;
        break;
    case 2:
        *peVRLP = tmhalFEDepuncRate34;
        break;
    case 3:
        *peVRLP = tmhalFEDepuncRate56;
        break;
    case 4:
        *peVRLP = tmhalFEDepuncRate78;
        break;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetMod
//
// 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
//
// NOTES:       the auto mode is managed by Tda10046UseTPSbit()
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetMod (
    tmUnitSelect_t          demodUnit,			//  I: Demod unit number
	tmhalFEModulation_t	    eMOD				//  I: Modulation type
)
{
    UInt32 uMod;

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

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

	// test the parameter value
	if (eMOD >= tmhalFEModulationMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (eMOD)
    {
    case tmhalFEModulationAuto:
        break;
    case tmhalFEModulationQpsk:
        uMod = 0x00;
        break;
    case tmhalFEModulationQam16:
        uMod = 0x01;
        break;
    case tmhalFEModulationQam64:
        uMod = 0x02;
        break;
    default:
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;
    }

    // write the modulation
    if (eMOD != tmhalFEModulationAuto)
    {
		g10046Instance[demodUnit].systemFunc.SY_WriteBit(
			g10046Instance[demodUnit].uDemodHwAdd,
			TDA10046_IN_CONF1_IND, TDA10046_INCONF1_CONS_MSK, uMod);
	}

    // update current config
	g10046Instance[demodUnit].sCurrentChannel.eMOD = eMOD;

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

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046GetMod
//
// DESCRIPTION: this function reads the current modulation
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//				TM_OK
//
// NOTES:       reading the register's value
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046GetMod (
    tmUnitSelect_t      demodUnit,			//  I: Demod unit number
    tmhalFEModulation_t	*peMOD              //  O: Modulation type
)
{
    UInt32 uMod;

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

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

    //----------------------
    // Implementation
    //----------------------
    g10046Instance[demodUnit].systemFunc.SY_Read(
	    g10046Instance[demodUnit].uDemodHwAdd,
	    TDA10046_OUT_CONF1_IND, 1, &uMod);

    // read modulation
    uMod &= TDA10046_OUTCONF1_CONSF_MSK;

    // interpret value
    switch (uMod)
    {
    case 0:
        *peMOD = tmhalFEModulationQpsk;
        break;
    case 1:
        *peMOD = tmhalFEModulationQam16;
        break;
    case 2:
        *peMOD = tmhalFEModulationQam64;
        break;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10046SetGI
//
// DESCRIPTION: this function programs the guard interval
//
// RETURN:		TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//				TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//				TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetGI (
    tmUnitSelect_t          demodUnit,  //  I: Demod unit number
	tmhalFEGuardInterval_t  eGI         //  I: Guard interval
)
{
    UInt32 uAutoGi, uGi;

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

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

	// test the parameter value
	if (eGI >= tmhalFEGuardIntervalMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Implementation
    //----------------------
    switch (eGI)
    {
    case tmhalFEGuardIntervalAuto:
        uAutoGi = TDA10046_AUTO_AUTOGI_BIT;
        break;
    case tmhalFEGuardInterval32:
        uAutoGi = 0;
        uGi = 0x00;
        break;
    case tmhal

⌨️ 快捷键说明

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