?? tmbsl10046.c
字號:
case tmhalFERfOffsetNull:
uAutoOffset = 0;
uOffset = 0x00;
break;
case tmhalFERfOffsetPlus125:
case tmhalFERfOffsetPlus166:
uAutoOffset = 0;
uOffset = 0x20;
break;
case tmhalFERfOffsetMinus125:
case tmhalFERfOffsetMinus166:
uAutoOffset = 0;
uOffset = 0x40;
break;
case tmhalFERfOffsetPlus333:
uAutoOffset = 0;
uOffset = 0x60;
break;
case tmhalFERfOffsetMinus333:
uAutoOffset = 0;
uOffset = 0x80;
break;
case tmhalFERfOffsetPlus500:
uAutoOffset = 0;
uOffset = 0xA0;
break;
case tmhalFERfOffsetMinus500:
uAutoOffset = 0;
uOffset = 0xC0;
break;
}
// write registers
g10046Instance[demodUnit].systemFunc.SY_WriteBit(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_AUTO_IND, TDA10046_AUTO_AUTOOFFSET_BIT, uAutoOffset);
g10046Instance[demodUnit].systemFunc.SY_WriteBit(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_IN_CONF1_IND, TDA10046_INCONF1_OFFSET_MSK, uOffset);
g10046Instance[demodUnit].systemFunc.SY_WriteBit(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_IN_CONF2_IND, TDA10046_INCONF2_OFFSET_MSK, uOffset << 1);
// save auto mode
if (uAutoOffset)
g10046Instance[demodUnit].sApiFlags.iAutoOffset = 1;
else
g10046Instance[demodUnit].sApiFlags.iAutoOffset = 0;
// extended offset activated
if (g10046Instance[demodUnit].sConfig.bExtOffset == True)
{
//TODO:Extended offset
}
//----------------------
// Frequency
//----------------------
if (Tda10046WriteRF(&g10046Instance[demodUnit], uRF, eRFO) == False)
return TM_FALSE;
// store the initial value
g10046Instance[demodUnit].eStartOffset = eRFO;
// start algo
g10046Instance[demodUnit].sApiFlags.iStartAlgo = True;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046GetRF
//
// 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
tmbsl10046GetRF (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 *puRF, // O: RF frequency (KHz)
tmhalFERfOffset_t *peRFO // O: RF offset
)
{
//----------------------
// 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
//----------------------
*puRF = g10046Instance[demodUnit].sCurrentChannel.uRF;
*peRFO = g10046Instance[demodUnit].sCurrentChannel.eRFO;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046SetCS
//
// DESCRIPTION: this function set the channel spacing
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TMBSL_ERR_DEMOD_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10046SetCS (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uCS // I: Channel spacing (hertz)
)
{
UInt32 a_uTimeWref[5], uGpioSpDs1Byte, uWref, uInvWref;
//----------------------
// 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 (uCS < TDA10046_CS_MIN || uCS > TDA10046_CS_MAX)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Implementation
//----------------------
switch (uCS)
{
case 8000000:
uWref = g10046Instance[demodUnit].uWref8;
uInvWref = g10046Instance[demodUnit].uInvWref8;
uGpioSpDs1Byte = 0xFF;
break;
case 7000000:
uWref = g10046Instance[demodUnit].uWref7;
uInvWref = g10046Instance[demodUnit].uInvWref7;
uGpioSpDs1Byte = 0x00;
break;
case 6000000:
uWref = g10046Instance[demodUnit].uWref6;
uInvWref = g10046Instance[demodUnit].uInvWref6;
uGpioSpDs1Byte = 0x00;
break;
default :
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
}
// build register values
a_uTimeWref[0] = (UInt32)(uInvWref >> 4);
a_uTimeWref[1] = (UInt32)((uInvWref << 2 | uWref >> 24) & 0x3F);
a_uTimeWref[2] = (UInt32)((uWref >> 16) & 0xFF);
a_uTimeWref[3] = (UInt32)((uWref >> 8) & 0xFF);
a_uTimeWref[4] = (UInt32)(uWref & 0xFF);
// set the tuner in case of saw filter switching
g10046Instance[demodUnit].tunerFunc.setCfgFunc(
g10046Instance[demodUnit].eTunerUnit,
tmhalFETunerBandwidth , uCS);
// write the wref registers
g10046Instance[demodUnit].systemFunc.SY_Write(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_TIME_WREF_1_IND, 5, a_uTimeWref);
// set the GPIO1 pin for external devices
g10046Instance[demodUnit].systemFunc.SY_Write(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_GPIO_SP_DS1_IND, 1, &uGpioSpDs1Byte);
// update current config
g10046Instance[demodUnit].sCurrentChannel.uCS = uCS;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046GetCS
//
// DESCRIPTION: this function returns the channel spacing
//
// 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
tmbsl10046GetCS (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 *puCS // I: Channel Spacing (Hertz)
)
{
//----------------------
// 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
//----------------------
*puCS = g10046Instance[demodUnit].sCurrentChannel.uCS;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046SetSI
//
// 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
tmbsl10046SetSI (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFESpectrum_t eSI // I: Spectral Inversion
)
{
UInt32 uSi;
//----------------------
// 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 (eSI >= tmhalFESpectralInvMax || eSI == tmhalFESpectrumAuto)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Implementation
//----------------------
if (eSI == tmhalFESpectrumInverted)
uSi = TDA10046_CONFC1_INVQ_BIT;
else
uSi = 0;
// check if I/Q are swapped outside the chip
if (g10046Instance[demodUnit].sConfig.bIQ_Swapped)
{
// invert
if (uSi == 0)
uSi = TDA10046_CONFC1_INVQ_BIT;
else
uSi = 0;
}
// write the spectral inversion
g10046Instance[demodUnit].systemFunc.SY_WriteBit(
g10046Instance[demodUnit].uDemodHwAdd,
TDA10046_CONF_C1_IND, TDA10046_CONFC1_INVQ_BIT, uSi);
// update value
g10046Instance[demodUnit].sCurrentChannel.eSI = eSI;
// start algo
g10046Instance[demodUnit].sApiFlags.iStartAlgo = True;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046GetSI
//
// 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
tmbsl10046GetSI (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFESpectrum_t *peSI // O: Spectral Inversion
)
{
//UInt32 uSi;
//----------------------
// 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
//----------------------
*peSI = g10046Instance[demodUnit].sCurrentChannel.eSI;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10046SetVRHP
//
// DESCRIPTION: this function programs the viterbi rate for the high 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
tmbsl10046SetVRHP (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFEDepuncRate_t eVRHP // I: 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;
// test the parameter value
if (eVRHP >= tmhalFEDepuncRateMax)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Implementation
//----------------------
switch (eVRHP)
{
case tmhalFEDepuncRateAuto:
break;
case tmhalFEDepuncRate12:
uVrHp = 0x00;
break;
case tmhalFEDepuncRate23:
uVrHp = 0x01;
break;
case tmhalFEDepuncRate34:
uVrHp = 0x02;
break;
case tmhalFEDepuncRate56:
uVrHp = 0x03;
break;
case tmhalFEDepuncRate78:
uVrHp = 0x04;
break;
default:
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
}
// write High Priority inner code rate
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -