📄 tmbsl10046.c
字号:
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 + -