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

📄 tmbsltda18211.c

📁 TDA8211芯片驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	// read from the Tuner
	if (TDA18211Read(pObj,(UInt8)(uIndex),(UInt8)(uNbBytes)) != True)
		return TMBSL_ERR_IIC_ERR;

	// copy readen values to puBytes
	for (uCounter = 0; uCounter < uNbBytes; uCounter++)
	{
		*puBytes = (UInt32)(*pI2CMap);
		pI2CMap ++;
		puBytes ++;
	}
	return TM_OK;
}


//-----------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211SetConfig:
//
// DESCRIPTION: Set the Config of the TDA18211
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_ERR_NOT_SUPPORTED
//              TMBSL_ERR_TUNER_BAD_PARAMETER
//              TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(SetConfig)
(
 tmUnitSelect_t     TunerUnit,  //  I: TunerUnit number
 UInt32             uItemId,    //  I: Identifier of the item to modify
 UInt32             uValue      //  I: Value to set for the Config item
 )
{
	ptmTDA18211Object_t		pObj;
	UInt8*					pI2CMap;
	UInt32*					pDataMap;

	//----------------------
	// 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];

	//--------------
	// set the value
	//--------------
	switch((tmTDA18211cfgIndex_t)uItemId)
	{
	case BOARD:
		switch (uValue & 0xffff0000)
		{
		case OM5776_BOARD_DEF:
		case OM5780_BOARD_DEF:
		case OM5782_BOARD_DEF:
		case OM5764_BOARD_DEF:
			/*pObj->Config.uXTOUT = 1;
			pObj->I2CMap.XTout_ON = 1;*/
			break;				
		case OM5770C2_BOARD_DEF & 0xffff0000:
		case OM5775_BOARD_DEF:
		case OM5777_BOARD_DEF:
		case CUSTOM_BOARD_DEF:
			// do nothing more than setting the default values
			break;                
		default:
			// board not supported
			return TM_ERR_NOT_SUPPORTED;
		}
		// store board
		gTDA18211Instance[TunerUnit].Config.uBoard = uValue;
		break;

	case FEINIT:
		if(TDA18211Init(TunerUnit) == TMBSL_ERR_IIC_ERR)
			return TMBSL_ERR_IIC_ERR;
		break;

	case RF:
		// set RF frequency 
		pObj->Config.uRF = uValue;	
		break;

	case IF:
		// set IF frequency 
		pObj->Config.uIF = uValue;	
		break;

	case PLMODE:
		// set uPLMODE
		pObj->Config.uPLMODE = uValue;
		// write byte EASY_PROG_BYTE_1
		if (TDA18211Write(pObj,0x03,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case PLRUN:
		// switch power level indicator on
		pObj->Config.uPLMODE = 0x00;
		// write byte EASY_PROG_BYTE_1
		if (TDA18211Write(pObj,0x03,1) != True)
			return TMBSL_ERR_IIC_ERR;
		// read bytes 0x00 to 0x0F
		if (TDA18211Read (pObj, 0x00, 16) != True)
			return TMBSL_ERR_IIC_ERR;
		// switch power level indicator off
		pObj->Config.uPLMODE = 0x01;
		// write byte EASY_PROG_BYTE_1
		if (TDA18211Write(pObj,0x03,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case POWERSTATE:
		// set POWERSTATE
		TDA18211SetPowerState (pObj, uValue);
		// set CAL_Mode to normal mode
		pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
		// write byte EASY_PROG_BYTE_3
		if (TDA18211Write(pObj,0x05,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case STANDARDMODE:
		// set STANDARDMODE
		TDA18211SetStandardMode (pObj, uValue);
		// set CAL_Mode to normal mode
		pObj->I2CMap.uBx06.bF.CAL_Mode = 0x00;
		// write bytes EASY_PROG_BYTE_3 & EASY_PROG_BYTE_4
		if (TDA18211Write(pObj,0x05,2) != True)
			return TMBSL_ERR_IIC_ERR;
		// write MAIN_POST_DIV_BYTE
		if (TDA18211Write(pObj,0x0C,1) != True)
			return TMBSL_ERR_IIC_ERR;
		// write byte EXTENDED_BYTE_22
		if (TDA18211Write(pObj,0x25,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case LPFC:
		// set LP_Fc
		pObj->I2CMap.uBx05.bF.Std = (pObj->I2CMap.uBx05.bF.Std & 0xFC) | ((UInt8)uValue & 0x03);
		// write byte EASY_PROG_BYTE_3
		if (TDA18211Write(pObj,0x05,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case XTOUT:
		// set XTout_ON
		pObj->I2CMap.uBx06.bF.XTout_ON = (UInt8)(uValue) >> 1;
		// set Xtout_400mV
		pObj->I2CMap.uBx06.bF.Xtout_400mV = (UInt8)(uValue) & 0x01;
		// write byte EASY_PROG_BYTE_4
		if (TDA18211Write(pObj,0x06,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case IFLEVEL:
		// set IF_Level
		pObj->I2CMap.uBx06.bF.IF_Level = (UInt8)uValue; 
		// write byte EASY_PROG_BYTE_4
		if (TDA18211Write(pObj,0x06,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case EXTENDEDREG:
		// set Extended_Reg
		pObj->I2CMap.uBx07.bF.Extended_Reg = (UInt8)uValue;
		// write byte EASY_PROG_BYTE_5
		if (TDA18211Write(pObj,0x07,1) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case MAPNAME:
		// set map name 
		pObj->Config.uMAPNAME = uValue;
		break;

	case MAPCOLUMN:	
		// set map x 
		pObj->Config.uMAPCOLUMN = uValue;
		break;

	case MAPROW:	
		// set map y 
		pObj->Config.uMAPROW = uValue;
		break;

	case MAPVALUE:
		// set pointer on wanted cell
		switch (pObj->Config.uMAPNAME)
		{
		case tmTDA18211_IR_MEAS_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_IR_MEAS_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_IR_MEAS_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.IR_MEAS_Map[pObj->Config.uMAPROW].uRF_Max);
			break;	

		case tmTDA18211_IR_CAL_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_IR_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_IR_CAL_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.IR_CAL_Map[pObj->Config.uMAPROW].uRF);
			break;

		case tmTDA18211_BP_FILTER_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_BP_FILTER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_BP_FILTER_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.BP_FILTER_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_RF_BAND_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_BAND_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_BAND_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.RF_BAND_Map[pObj->Config.uMAPROW].uRF_Max);
			break;	

		case tmTDA18211_GAIN_TAPER_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_GAIN_TAPER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_GAIN_TAPER_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.GAIN_TAPER_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_RF_CAL_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.RF_CAL_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_RF_CAL_DC_OVER_DT_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_DC_OVER_DT_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_DC_OVER_DT_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.RF_CAL_DC_OVER_DT_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_RF_CAL_KMCO_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_KMCO_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_KMCO_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.RF_CAL_KMCO_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_RF_CAL_CID_TARGET_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_RF_CAL_CID_TARGET_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_RF_CAL_CID_TARGET_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.RF_CAL_CID_TARGET_Map[pObj->Config.uMAPROW].uRF_Max);
			break;

		case tmTDA18211_THERMOMETER_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_THERMOMETER_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_THERMOMETER_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.THERMOMETER_Map[pObj->Config.uMAPROW].uTM_D);
			break;

		case tmTDA18211_CAL_PLL_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_CAL_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_CAL_PLL_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.CAL_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
			break;

		case tmTDA18211_MAIN_PLL_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > TDA18211_MAIN_PLL_NB_COLUMNS - 1) || (pObj->Config.uMAPROW > TDA18211_MAIN_PLL_NB_ROWS - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pDataMap initialization
			pDataMap = &(pObj->Config.MAIN_PLL_Map[pObj->Config.uMAPROW].uLO_Max);
			break;

		case tmTDA18211_I2C_Map:
			// test map column & row
			if ((pObj->Config.uMAPCOLUMN > 0) || (pObj->Config.uMAPROW > TDA18211_NB_BYTES - 1))
				return TM_ERR_NOT_SUPPORTED;
			// pI2CMap initialization
			pI2CMap = &(pObj->I2CMap.uBx00.ID_BYTE) + pObj->Config.uMAPROW;
			break;
		}

		// set cell value
		if  (pObj->Config.uMAPNAME == tmTDA18211_I2C_Map)
			*(pI2CMap + (UInt8)pObj->Config.uMAPCOLUMN) = (UInt8)uValue;
		else
			*(pDataMap + pObj->Config.uMAPCOLUMN) = uValue;
		break;

	case PROTOCOLSTEP:
		// set channel configuration protocol steps to execute
		pObj->Config.uPROTOCOLSTEP = uValue; 
		break;

	case READINIT:
		// read bytes 0x00 to 0x26
		if (TDA18211Read (pObj,0x00,39) != True)
			return TMBSL_ERR_IIC_ERR;

		if (uValue == 1)
		{
			// initialize device
			if(TDA18211Init(TunerUnit) == TMBSL_ERR_IIC_ERR)
				return TMBSL_ERR_IIC_ERR;
		}
		break;
	}
	return TM_OK;
}


//-----------------------------------------------------------------------------
// FUNCTION:    tmbslTDA18211GetConfig:
//
// DESCRIPTION: Get the Config of the TDA18211
//
// RETURN:      TMBSL_ERR_TUNER_BAD_UNIT_NUMBER
//              TMBSL_ERR_TUNER_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
TMBSL_FUNC(GetConfig)
(
 tmUnitSelect_t     TunerUnit,  //  I: Tuner unit number
 UInt32             uItemId,    //  I: Identifier of the item to get value
 UInt32*            puValue     //  I: Address of the variable to output the Config item value
 )
{
	UInt32 uCounter = 0;

	ptmTDA18211Object_t		pObj;
	UInt8*					pI2CMap;
	UInt32*					pDataMap;
	UInt32					uByte=0; 

	//----------------------
	// 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];

	//--------------
	// get the value
	//--------------
	switch((tmTDA18211cfgIndex_t)uItemId)
	{
	case BOARD:
		// get board
		*puValue = pObj->Config.uBoard;
		break;

	case RF:
		// get RF frequency
		*puValue = pObj->Config.uRF;
		break;

	case IF:
		// get IF frequency
		*puValue = pObj->Config.uIF;
		break;

	case STATUSBYTE:
		// read bytes 0x00 to 0x26
		if (TDA18211Read (pObj,0x00,39) != True)
			return TMBSL_ERR_IIC_ERR;
		break;

	case GETNBOFUNIT:
		*puValue = TDA18211_MAX_UNITS;
		break;

	case ID:
		// get ID value
		*puValue = pObj->I2CMap.uBx00.bF.ID;
		break;

	case POR:
		// get POR value
		*puValue = pObj->I2CMap.uBx01.bF.POR;
		break;

	case MAINLOCK:
		// get MAINLOCK value
		*puValue = TunerUnit == 0 ? pObj->I2CMap.uBx01.bF.MAIN_Lock : pObj->I2CMap.uBx16.bF.CAL_Lock;
		break;

	case TMVALUE:
		// read byte THERMO_BYTE
		if (TDA18211ThermometerRead(pObj, (UInt8 *)puValue) != TM_OK || pObj->I2CMap.uBx05.bF.SM == 1)
			return TMBSL_ERR_IIC_ERR;
		break;

	case PLMODE:
		// get PLMODE value
		*puValue = pObj->Config.uPLMODE;
		break;

	case PLAGC1:

⌨️ 快捷键说明

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