📄 tmbsl10023.c
字号:
// change the I2C switch. The trick used to determine if the function is enabled
// is to call the getCfgFunc with a null pointer for the last parameter. In this
// case, the function return TM_OK if the function is enabled.
if ( g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, (UInt32*)0) == TM_OK)
{
// tuner is accessible
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT,
TDA10023_TEST_BYPIIC_BIT);
// The last parameter of the getCfgFunc isn't a null pointer
// so we get the input level
g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, puValue);
// tuner is disconnected from the I2C bus
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);
if (*puValue == 0xFFFFFFFF)
return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
else
return TM_OK;
}
else
{
return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
}
break;
case JQAMMODE:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_JQAM_MODE_IND, 1, puValue);
break;
case JQAMREQTS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_TS_IDH_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMREQON:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_ON_IDH_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMGETREG5:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REG5_IND, 1, puValue);
break;
case JQAMGETTSSTATUS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_TS_STATUS_H_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMGETRCVSTATUS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_RCV_STATUS4_IND, 4, puBytes);
*puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
break;
case JQAMGETTSON:
for(i=0 ; i< TDA10023_JQAMFILTER_NB ; i++)
{
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_TS_ID1H_IND+(4*i), 4, puBytes);
*puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
puValue++;
}
break;
default:
return TM_ERR_BAD_PARAMETER;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023Write
//
// 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: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Write (
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 > 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
//----------------------
if (g10023Instance[demodUnit].systemFunc.SY_Write(
g10023Instance[demodUnit].uDemodHwAdd,
uIndex, uNbBytes, puBytes) == False)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023WriteBit
//
// 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: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023WriteBit (
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 > 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
//----------------------
if (g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
uIndex, uBitMask, uByte) == False)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023Read
//
// DESCRIPTION: this function reads bytes
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Read (
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 > 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
//----------------------
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;
//----------------------
// 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 = 0x92;//by maj. 060620,old is 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)
)
{
//----------------------
// 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)
)
{
//----------------------
// 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
//-----------------------------------------------------------------------------
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -