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

📄 tmbsltda18211.c

📁 TDA8211芯片驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	// get the value
	//----------------------
	if ((pObj->I2CMap.uBx05.bF.SM == 0x00) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
		*pPowerState = tmPowerNormalMode;
	else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
		*pPowerState = tmPowerSleepMode;
	else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x01) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
		*pPowerState = tmPowerStandbyWith16MHz;
	else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x00))
		*pPowerState = tmPowerStandbyWith16MHzAndLoopThrough;
	else if ((pObj->I2CMap.uBx05.bF.SM == 0x01) && (pObj->I2CMap.uBx05.bF.SM_LT == 0x00) && (pObj->I2CMap.uBx05.bF.SM_XT == 0x01))
		*pPowerState = tmPowerStandbyWithLoopThrough;
	else
		*pPowerState = tmPowerNotSupported;

	return TM_OK;
}


//-------------------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(SetStandardMode)
(
 tmUnitSelect_t					TunerUnit,		//  I: Tuner unit number
 tmTDA18211StandardMode_t		StandardMode	//  I: Standard mode of this device
 )
{
	ptmTDA18211Object_t		pObj;

	Bool customIF = FALSE;
	Bool customLPFc = FALSE;

	//------------------------------
	// test input parameters
	//------------------------------
	// test the instance number
	if (TunerUnit > TDA18211_MAX_UNITS)
		return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;

	// test the object
	if (gTDA18211Instance[TunerUnit].init == False)
		return TMBSL_ERR_TUNER_NOT_INITIALIZED;

	// pObj initialization
	pObj = &gTDA18211Instance[TunerUnit];


	return TDA18211SetStandardMode(pObj, StandardMode);
}


//-------------------------------------------------------------------------------------
// FUNCTION:    TDA18211SetStandardMode:
//
// DESCRIPTION: Set the standard mode of this device.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18211SetStandardMode(
						ptmTDA18211Object_t			pObj,		// I: tuner Object
						tmTDA18211StandardMode_t	StandardMode//  I: Standard mode of this device
						)
{
	Bool customIF = FALSE;
	Bool customLPFc = FALSE;

	// set custom IF flag
	if (((pObj->Config.uPROTOCOLSTEP & 0x02) >> 1) == 0x01)
		customIF = TRUE;

	// set custom LPFc flag
	if (((pObj->Config.uPROTOCOLSTEP & 0x01) >> 0) == 0x01)
		customLPFc = TRUE;

	// set uIF & Std
	switch (StandardMode)
	{
	case tmDigital_TV_ATSC_6MHz:
		// set IF frequency 			
		if (!customIF)
			pObj->Config.uIF = 3250000;
		// set bandwidth value 
		pObj->Config.uBW = 6000000;			
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1C : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1C & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;

	case tmDigital_TV_DVBT_7MHz:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 3800000;
		// set bandwidth value 
		pObj->Config.uBW = 7000000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;

	case tmDigital_TV_DVBT_8MHz:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 4300000;	
		// set bandwidth value 
		pObj->Config.uBW = 8000000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1E : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1E & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;

	case tmDigital_CAL:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 1250000;
		// set bandwidth value 
		pObj->Config.uBW = 250000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x18 : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x18 & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x01;
		break;

	case tmDigital_TV_QAM_6MHz:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 4000000;
		// set bandwidth value 
		pObj->Config.uBW = 6000000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;

	case tmDigital_TV_QAM_8MHz:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 5000000;
		// set bandwidth value 
		pObj->Config.uBW = 8000000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1F : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1F & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;

	case tmDigital_TV_ISDBT_6MHz:
		// set IF frequency 
		if (!customIF)
			pObj->Config.uIF = 4063000;
		// set bandwidth value 
		pObj->Config.uBW = 6000000;				
		// set Std bit
		pObj->I2CMap.uBx05.bF.Std = !customLPFc ? 0x1D : (pObj->I2CMap.uBx05.bF.Std & 0xE3) | (0x1D & 0x1C);

		// set CAL_RFn bit
		pObj->I2CMap.uBx06.bF.CAL_RFn = 0x00;
		break;
	}

	// set CAL_Mode to normal mode
	pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;

	// set IF_Level & IF_notch & RFAGC_Top & IFAGC_Top
	switch (StandardMode)
	{
	case tmDigital_TV_ATSC_6MHz:
	case tmDigital_TV_DVBT_7MHz:
	case tmDigital_TV_DVBT_8MHz:
	case tmDigital_TV_QAM_6MHz:
	case tmDigital_TV_QAM_8MHz:
	case tmDigital_TV_ISDBT_6MHz:
		// set IF_Level
		pObj->I2CMap.uBx06.bF.IF_Level = 0x01;
		// set IF_notch
		pObj->I2CMap.uBx0C.bF.IF_notch = 0x01;
		// set RFAGC_Top & IFAGC_Top
		pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x37;
		break;

	case tmDigital_CAL:
		// set IF_Level
		pObj->I2CMap.uBx06.bF.IF_Level = 0x00;
		// set IF_notch
		pObj->I2CMap.uBx0C.bF.IF_notch = 0x00;
		// set RFAGC_Top & IFAGC_Top
		pObj->I2CMap.uBx25.EXTENDED_BYTE_22 = 0x2C;
		break;

	default:
		// standard mode not supported
		return TM_ERR_NOT_SUPPORTED;
	}

	// store standard mode 
	pObj->StandardMode = StandardMode;

	return TM_OK;
}

//-------------------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(GetStandardMode)
(
 tmUnitSelect_t					TunerUnit,		//  I: Tuner unit number
 tmTDA18211StandardMode_t		*pStandardMode	//  O: Standard mode of this device
 )
{
	ptmTDA18211Object_t		pObj;

	//------------------------------
	// test input parameters
	//------------------------------
	// test the instance number
	if (TunerUnit > TDA18211_MAX_UNITS)
		return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;

	// test the object
	if (gTDA18211Instance[TunerUnit].init == False)
		return TMBSL_ERR_TUNER_NOT_INITIALIZED;

	// pObj initialization
	pObj = &gTDA18211Instance[TunerUnit];

	return TDA18211GetStandardMode(pObj, pStandardMode);
}

//-------------------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211GetStandardMode:
//
// DESCRIPTION: Get the standard mode of this device.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_OK
//
// NOTES:
//-------------------------------------------------------------------------------------
//
tmErrorCode_t
TDA18211GetStandardMode
(
 ptmTDA18211Object_t			pObj,			// I: tuner Object
 tmTDA18211StandardMode_t	*pStandardMode	//  O: Standard mode of this device
 )
{
	//----------------------
	// get the value
	//----------------------
	*pStandardMode = pObj->StandardMode;

	return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211Write:
//
// DESCRIPTION: Write in the Tuner.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TMBSL_ERR_IIC_ERR
//              TM_OK
//
// NOTES:      uIndex: IN parameter containing the HW Sub Address as specified in 
//			   the datasheet (i.e. looks like 0xX0)      
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(Write)
(
 tmUnitSelect_t      TunerUnit,      //  I: Tuner 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
 )
{

	UInt32	uCounter;
	UInt8*	pI2CMap;

	ptmTDA18211Object_t		pObj;

	//----------------------
	// test input parameters
	//----------------------
	// test the instance number
	if (TunerUnit > TDA18211_MAX_UNITS)
		return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;

	// test the Object
	if (gTDA18211Instance[TunerUnit].init == False)
		return TMBSL_ERR_TUNER_NOT_INITIALIZED;

	// test the parameters. uIndex is: 0x0X
	if ((uIndex + uNbBytes) > TDA18211_NB_BYTES)
		return TMBSL_ERR_TUNER_BAD_PARAMETER;

	// pObj & pI2CMap initialization
	pObj = &gTDA18211Instance[TunerUnit];
	pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;

	//--------------
	// set the value
	//--------------	
	// save the values written in the Tuner
	for (uCounter = 0; uCounter < uNbBytes; uCounter++)
	{
		*pI2CMap = (UInt8)(puBytes[uCounter]);
		pI2CMap ++;
	}

	// write in the Tuner
	if (TDA18211Write(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
		return TMBSL_ERR_IIC_ERR;

	return TM_OK;
}


//-----------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211WriteBit:
//
// DESCRIPTION: Write in the Tuner.
//
// RETURN:      TM_ERR_NOT_SUPPORTED
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(WriteBit)
(
 tmUnitSelect_t      TunerUnit,      //  I: Tuner unit number
 UInt32              uIndex,         //  I: Start index to write
 UInt32              uBitMask,       //  I: bit mask
 UInt32              uBitValue       //  I: bit value
 )
{
	return TM_ERR_NOT_SUPPORTED;
}


//-----------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211Read:
//
// DESCRIPTION: Read in the Tuner.
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TMBSL_ERR_TUNER_BAD_PARAMETER
//              TMBSL_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(Read)
(
 tmUnitSelect_t      TunerUnit,      //  I: Tuner unit number
 UInt32              uIndex,         //  I: Start index to read
 UInt32              uNbBytes,       //  I: Number of bytes to read
 UInt32*             puBytes         //  I: Pointer on an array of bytes
 )
{
	UInt32	uCounter;
	UInt8*	pI2CMap;

	ptmTDA18211Object_t		pObj;

	//----------------------
	// test input parameters
	//----------------------
	// test the instance number
	if (TunerUnit > TDA18211_MAX_UNITS)
		return TMBSL_ERR_TUNER_BAD_UNIT_NUMBER;

	// test the Object
	if (gTDA18211Instance[TunerUnit].init == False)
		return TMBSL_ERR_TUNER_NOT_INITIALIZED;

	// test the Object
	if (uNbBytes > TDA18211_NB_BYTES)
		return TMBSL_ERR_TUNER_BAD_PARAMETER;

	// test uIndex
	if (uIndex == -1)
		uIndex = 0;

	// pObj & pI2CMap initialization
	pObj = &gTDA18211Instance[TunerUnit];
	pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + uIndex;

	//--------------
	// get the value
	//--------------

⌨️ 快捷键说明

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