📄 tmbsltda18271.c
字号:
/*============================================================================*/
tmErrorCode_t
tmbslTDA18271GetIF
(
tmUnitSelect_t tUnit, /* I: Unit number */
UInt32* puIF /* O: IF Frequency in hertz */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
*puIF = pObj->Config.uIF;
return err;
}
/*============================================================================*/
/* tmbslTDA18271GetLockStatus */
/*============================================================================*/
tmErrorCode_t
tmbslTDA18271GetLockStatus
(
tmUnitSelect_t tUnit, /* I: Unit number */
tmbslFrontEndState_t* pLockStatus /* O: PLL Lock status */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
*pLockStatus = tmbslFrontEndStateUnknown;
err = TDA18271Read (pObj ,0x00, 39);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Read(0x%08X, 0x00, 39) failed.", tUnit));
*pLockStatus = ((pObj->Config.uMasterDevice) ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock)?tmbslFrontEndStateLocked:tmbslFrontEndStateNotLocked;
return err;
}
//-----------------------------------------------------------------------------
// Internal functions:
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// FUNCTION: TDA18271Init:
//
// DESCRIPTION: initialization of the Tuner
//
// RETURN: always True
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TDA18271Init
(
tmUnitSelect_t tUnit /* I: Unit number */
)
{
ptmTDA18271Object_t pObj = Null;
tmErrorCode_t err = TM_OK;
//------------------------------
// test input parameters
//------------------------------
// pObj initialization
err = TDA18271GetInstance(tUnit, &pObj);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271GetInstance(0x%08X) failed.", tUnit));
// test the Object
if (pObj == Null || pObj->init == False)
{
tmDBGPRINTEx(DEBUGLVL_ERROR, "TDA18271 Instance not initialized.");
return TDA18271_ERR_NOT_INITIALIZED;
}
//----------------------
// configuration reset
//----------------------
// set power level indicator to off
pObj->Config.uPLMODE = 1;
// Read ID Byte
err = TDA18271Read(pObj, 0x00, 16);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Read(0x%08X, 0x00, 16) failed.", tUnit));
tmDBGPRINTEx(DEBUGLVL_TERSE, "TDA18271Init(0x%08X)", tUnit);
tmDBGPRINTEx(DEBUGLVL_TERSE, " --> I2C Map Initialization");
//----------------------
// I2C map initialization
//----------------------
// set & write all bytes
pObj->I2CMap.uBx01.THERMO_BYTE = 0x08;
pObj->I2CMap.uBx02.POWER_LEVEL_BYTE = 0x80;
pObj->I2CMap.uBx03.EASY_PROG_BYTE_1 = 0xC6;
pObj->I2CMap.uBx04.EASY_PROG_BYTE_2 = 0xDF;
pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x16;
pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x60;
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x80;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x80;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x00;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x00;
pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x00;
pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x00;
pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
pObj->I2CMap.uBx10.EXTENDED_BYTE_1 = 0xFC;
pObj->I2CMap.uBx11.EXTENDED_BYTE_2 = 0x01;
pObj->I2CMap.uBx12.EXTENDED_BYTE_3 = 0x84;
pObj->I2CMap.uBx13.EXTENDED_BYTE_4 = 0x41;
pObj->I2CMap.uBx14.EXTENDED_BYTE_5 = 0x01;
pObj->I2CMap.uBx15.EXTENDED_BYTE_6 = 0x84;
pObj->I2CMap.uBx16.EXTENDED_BYTE_7 = 0x40;
pObj->I2CMap.uBx17.EXTENDED_BYTE_8 = 0x07;
pObj->I2CMap.uBx18.EXTENDED_BYTE_9 = 0x00;
pObj->I2CMap.uBx19.EXTENDED_BYTE_10 = 0x00;
pObj->I2CMap.uBx1A.EXTENDED_BYTE_11 = 0x96;
if(pObj->I2CMap.uBx00.bF.ID<5)
{
// TDA18271C2
pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
}
else
{
// TDA18271AC1
pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x14;
pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x03;
}
//pObj->I2CMap.uBx1B.EXTENDED_BYTE_12 = 0x3F;
pObj->I2CMap.uBx1C.EXTENDED_BYTE_13 = 0xC1;
pObj->I2CMap.uBx1D.EXTENDED_BYTE_14 = 0x00;
pObj->I2CMap.uBx1E.EXTENDED_BYTE_15 = 0x8F;
//pObj->I2CMap.uBx1F.EXTENDED_BYTE_16 = 0x00;
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00;
pObj->I2CMap.uBx21.EXTENDED_BYTE_18 = 0x8C;
pObj->I2CMap.uBx22.EXTENDED_BYTE_19 = 0x00;
pObj->I2CMap.uBx23.EXTENDED_BYTE_20 = 0x20;
pObj->I2CMap.uBx24.EXTENDED_BYTE_21 = 0xB3;
pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x48;
pObj->I2CMap.uBx26.EXTENDED_BYTE_23 = 0xB0;
err = TDA18271Write(pObj,0x01,38);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x01, 38) failed.", tUnit));
if(pObj->I2CMap.uBx00.bF.ID<5)
{
// TDA18271C2
//----------------------
// AGC1 gain setup
//----------------------
// AGC1_Gain_do
// update & write EXTENDED_BYTE_17
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x00; // set gain_do address
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x03; // keep gain_do address, set gain_do
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
// AGC1_Gain_up
// update & write EXTENDED_BYTE_17
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x43; // set gain_up address, keep gain_do
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x4C; // keep gain_up address, set gain_up
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
}
else
{
// TDA18271AC1
//----------------------
// AGC1 gain setup
//----------------------
// AGC1_Gain_do
// update & write EXTENDED_BYTE_17
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x80; // set gain_do address
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0x83; // keep gain_do address, set gain_do
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
// AGC1_Gain_up
// update & write EXTENDED_BYTE_17
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0xC3; // set gain_up address, keep gain_do
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
pObj->I2CMap.uBx20.EXTENDED_BYTE_17 = 0xC9; // keep gain_up address, set gain_up
err = TDA18271Write(pObj, 0x20, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x20, 1) failed.", tUnit));
}
tmDBGPRINTEx(DEBUGLVL_TERSE, " --> IR Calibration");
tmDBGPRINTEx(DEBUGLVL_TERSE, " - IR Cal Low Band");
//----------------------
// image rejection calibration - low band
//----------------------
// initialization
pObj->I2CMap.uBx05.EASY_PROG_BYTE_3 = 0x1F;
pObj->I2CMap.uBx06.EASY_PROG_BYTE_4 = 0x66;
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x81;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCC;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x6C;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
pObj->I2CMap.uBx0B.CAL_DIV_BYTE_3 = 0x00;
pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xC5;
pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x77;
pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x08;
pObj->I2CMap.uBx0F.MAIN_DIV_BYTE_3 = 0x00;
// write bytes EASY_PROG_BYTE_2 to MAIN_DIV_BYTE_3
err = TDA18271Write(pObj, 0x04, 12);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 12) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// launch detector
// write byte EASY_PROG_BYTE_1
err = TDA18271Write(pObj, 0x03, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));
// wait 5 ms for wanted measurement
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// CAL PLL update
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x85;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xCB;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x70;
// write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
err = TDA18271Write(pObj, 0x05, 7);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// launch optimization algorithm
// write byte EASY_PROG_BYTE_2
err = TDA18271Write(pObj, 0x04, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 1) failed.", tUnit));
// wait 30 ms for image optimization completion
err = TDA18271Wait(pObj, 30);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 30) failed.", tUnit));
tmDBGPRINTEx(DEBUGLVL_TERSE, " - IR Cal Mid Band");
//----------------------
// image rejection calibration - mid band
//----------------------
// initialization
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x82;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0xA1;
pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x73;
pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0x1A;
// write bytes EASY_PROG_BYTE_3 to MAIN_DIV_BYTE_3
err = TDA18271Write(pObj, 0x05, 11);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 11) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// launch detector
// write byte EASY_PROG_BYTE_1
err = TDA18271Write(pObj, 0x03, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));
// wait 5 ms for wanted measurement
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// CAL PLL update
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x86;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0xA8;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x66;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0xA0;
// write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
err = TDA18271Write(pObj, 0x05, 7);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// launch optimization algorithm
// write byte EASY_PROG_BYTE_2
err = TDA18271Write(pObj, 0x04, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x04, 1) failed.", tUnit));
// wait 30 ms for image optimization completion
err = TDA18271Wait(pObj, 30);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 30) failed.", tUnit));
tmDBGPRINTEx(DEBUGLVL_TERSE, " - IR Cal High Band");
//----------------------
// image rejection calibration - high band
//----------------------
// initialization
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x83;
pObj->I2CMap.uBx08.CAL_POST_DIV_BYTE = 0x98;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x00;
pObj->I2CMap.uBx0C.MAIN_POST_DIV_BYTE = 0x91;
pObj->I2CMap.uBx0D.MAIN_DIV_BYTE_1 = 0x71;
pObj->I2CMap.uBx0E.MAIN_DIV_BYTE_2 = 0xCD;
// write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
err = TDA18271Write(pObj, 0x05, 11);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 11) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// launch detector
// write byte EASY_PROG_BYTE_1
err = TDA18271Write(pObj, 0x03, 1);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x03, 1) failed.", tUnit));
// wait 5 ms for wanted measurement
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
// CAL PLL update
pObj->I2CMap.uBx07.EASY_PROG_BYTE_5 = 0x87;
pObj->I2CMap.uBx09.CAL_DIV_BYTE_1 = 0x65;
pObj->I2CMap.uBx0A.CAL_DIV_BYTE_2 = 0x50;
// write bytes EASY_PROG_BYTE_3 to CAL_DIV_BYTE_3
err = TDA18271Write(pObj, 0x05, 7);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Write(0x%08X, 0x05, 7) failed.", tUnit));
// wait 5 ms for PLL locking
err = TDA18271Wait(pObj, 5);
tmASSERTExTR(err, TM_OK, (DEBUGLVL_ERROR, "TDA18271Wait(0x%08X, 5) failed.", tUnit));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -