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

📄 tidtv_tunerlg.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	retVal = LGDTsetRegi(0x0D, 0x40);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x0E, 0x87);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x0F, 0x8E);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x10, 0x01);
	if (retVal != LGDT_ERR_NO)
		return retVal;


/*--- Mis-print?
	retVal = LGDTsetRegi(0x10, 0x8E);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x11, 0x01);
	if (retVal != LGDT_ERR_NO)
		return retVal;
*/

	///----------	2) AGC			----------//
	///	2)-2. the front-end design use RF AGC(tuner) loop
	retVal = LGDTsetRegi(0x47, 0x88);/// REFD[11:0]
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4C, 0x14);
	if (retVal != LGDT_ERR_NO)
		return retVal;
	
	///---------- 3) nSFTRST		----------//
	retVal = LGDTsetReset();
	if (retVal != LGDT_ERR_NO)
		return retVal;

	return LGDT_ERR_NO;
}

LGDT_Return_t LGDTinit64QAM(void)		//3303
{
	LGDT_Return_t retVal;
//	DATA8	data1;
//	DATA8	data2;

	///----------	1) OPERMODE[1:0]	----------//
	retVal = LGDTsetRegi(0x00, 0x00);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	///----------	2) AGC			----------//
	retVal = LGDTsetRegi(0x51, 0x63);	/// LOCKDTEN
	if (retVal != LGDT_ERR_NO)
		return retVal;
/*
	///	2)-2. the front-end design doesn't use RF AGC(tuner) loop
	retVal = LGDTgetRegi(0x52, &data1); /// IFACC
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data1 &= 0x0F;

	retVal = LGDTgetRegi(0x42, &data2);
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data2 &= 0xF0;
	data1 |= data2;

	retVal = LGDTsetRegi(0x42, data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTgetRegi(0x54, &data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data1 -= 1;

	retVal = LGDTsetRegi(0x44, data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;
*/
	retVal = LGDTsetRegi(0x47, 0x66);	/// IFBW
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x48, 0x66);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4D, 0x1A); /// NSSEL
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4C, 0x14);	/// RFPOL
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x49, 0x08); /// IAGCBW
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4A, 0x9B);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	///---------- 3) nSFTRST			----------//
	retVal = LGDTsetReset();
	if (retVal != LGDT_ERR_NO)
		return retVal;

	return LGDT_ERR_NO;
}

LGDT_Return_t LGDTinit256QAM(void)		//3303
{
	LGDT_Return_t retVal;
//	DATA8	data1;
//	DATA8	data2;

	///----------	1) OPERMODE[1:0]	----------//
	retVal = LGDTsetRegi(0x00, 0x01);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	///----------	2) AGC			----------//
	retVal = LGDTsetRegi(0x51, 0x63);	/// LOCKDTEN
	if (retVal != LGDT_ERR_NO)
		return retVal;
/*
	///	2)-2. the front-end design doesn't use RF AGC(tuner) loop
	retVal = LGDTgetRegi(0x52, &data1); /// IFACC
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data1 &= 0x0F;

	retVal = LGDTgetRegi(0x42, &data2);
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data2 &= 0xF0;
	data1 |= data2;

	retVal = LGDTsetRegi(0x42, data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTgetRegi(0x54, &data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;
	data1 -= 1;

	retVal = LGDTsetRegi(0x44, data1);
	if (retVal != LGDT_ERR_NO)
		return retVal;
*/
	retVal = LGDTsetRegi(0x47, 0x66);	/// IFBW
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x48, 0x66);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4D, 0x1A); /// NSSEL
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4C, 0x14);	/// RFPOL
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x49, 0x08); /// IAGCBW
	if (retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTsetRegi(0x4A, 0x9B);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	///---------- 3) nSFTRST			----------//
	retVal = LGDTsetReset();
	if (retVal != LGDT_ERR_NO)
		return retVal;

	return LGDT_ERR_NO;
}

LGDT_Return_t LGDTinitMode(LGDT_OperMode_t mode)
{
	LGDT_Return_t retVal;
	switch(mode)
	{
		case LGDT_QAM64:
			retVal = LGDTinit64QAM();
			if (retVal != LGDT_ERR_NO)
				return (LGDT_Return_t)(retVal|LGDT_ERR_INIT);			
			break;
		case LGDT_QAM256:
			retVal = LGDTinit256QAM();
			if (retVal != LGDT_ERR_NO)
				return (LGDT_Return_t)(retVal|LGDT_ERR_INIT);
			break;
		case LGDT_VSB:
			retVal = LGDTinitVSB();
			if (retVal != LGDT_ERR_NO)
				return (LGDT_Return_t)(retVal|LGDT_ERR_INIT);
			break;
		default:
			return (LGDT_Return_t)(LGDT_ERR_PARAM|LGDT_ERR_INIT);
//			break;
	}
	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTInit3303(LGDTOperMode_t mode)
//		- Call initialize function based on the mode argument
//		 and checks the status 
//
//	Input	: LGDTOperMode_t mode
//	Return	: LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTinit3303(LGDT_OperMode_t mode)
{
	LGDT_Return_t	 retVal;
	LGDT_OperMode_t flag;

	m_Count1	= 0;		/// used in CheckStatus()
	m_Count2	= 0;		/// used in CheckStatus()
	m_Count3	= 0;		/// used in CheckStatus()

	retVal = LGDTinitMode(mode);
	if(retVal != LGDT_ERR_NO)
		return retVal;

	retVal = LGDTgetOperMode(&flag);
	if(retVal != LGDT_ERR_NO)
		return retVal;

	if (flag != mode)
		return LGDT_ERR_INIT;

	return LGDT_ERR_NO;
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//	GET Functions
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//------------------------------------------------------//
//	Carrier Recovery Lock
//		CLOCKVSB	: bit #7	@ 0x1C
//		CLOCKQAM	: bit #2~0	@ 0x1C
//------------------------------------------------------//
LGDT_Return_t LGDTisLockCR(char *flag)
{
	DATA8				data_p;
	DATA8				data;
	LGDT_OperMode_t	mode;
	LGDT_Return_t		retVal;

	retVal = LGDTgetRegi(0x1C, &data_p);
	if (retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);

	retVal = LGDTgetOperMode(&mode);
	if(retVal != LGDT_ERR_NO)
		return retVal;

	if (mode == LGDT_VSB)
	{
		data = data_p & 0x80;
		if (data == 0x80) *flag = 1;
		else *flag = 0;
	}
	else
	{
		data = data_p & 0x02;
		if (data == 0x02) *flag = 1;
		else *flag = 0;
	}

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	Sync Lock
//		nSyncLoc : bit #1 @ 0x38
//------------------------------------------------------//
LGDT_Return_t LGDTisLockSync(char* flag)
{
	DATA8				data_p;
	DATA8				data;
	LGDT_Return_t		retVal;

	retVal = LGDTgetRegi(0x38, &data_p);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	data = data_p & 0x20;
	if (data == 0x20)
		*flag = 1;
	else
		*flag = 0;

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	Timing Recovery Lock
//		TRLOCK : bit #2~0 @ 0x36
//------------------------------------------------------//
LGDT_Return_t LGDTisLockTR(char* flag)
{
	DATA8			data_p;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x36, &data_p);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	data_p &= 0x07;
	if (data_p != 0x00)		
		*flag = 1;
	else
		*flag = 0;

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	Viterbi Lock
//		VDLOCK : bit #3 @ 0x8A
//------------------------------------------------------//
LGDT_Return_t LGDTisLockViterbi(char* flag)
{
	DATA8			data_p;
	DATA8			data;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x8A, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);

	data = data_p & 0x08;
	if (data == 0x08)
		*flag = 1;
	else
		*flag = 0;

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	FEC Frame Lock
//		FRAMELCK : bit #2 @ 0x8A
//------------------------------------------------------//
LGDT_Return_t LGDTisLockFEC(char* flag)
{
	DATA8			data_p;
	DATA8			data;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x8A, &data_p);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	data = data_p & 0x04;
	if (data == 0x04)
		*flag = 1;
	else
		*flag = 0;

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	MPEG Lock
//		MPEGLOCK : bit #0 @ 0x8A
//------------------------------------------------------//
LGDT_Return_t LGDTisLockMPEG(char* flag)
{
	DATA8			data_p;
	DATA8			data;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x8A, &data_p);
	if (retVal != LGDT_ERR_NO)
		return retVal;

	data = data_p & 0x01;
	if (data == 0x01)
		*flag = 1;
	else
		*flag = 0;

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTisNTSC(char* flag)
//
//	Input : char* flag
//		- TRUE  : Comb filter is on, when NTSC detected
//		- FALSE : Comb filter is off, when ATSC detected
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTisNTSC(char* flag)
{
	DATA8		 data_p;
	LGDT_Return_t retVal;

	retVal = LGDTgetRegi(0x6A, &data_p);
	if (retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);

	data_p &= 0x01;
	if (data_p == 0x01)
		*flag = 0;
	else
		*flag = 1;

	return LGDT_ERR_NO;
}
//------------------------------------------------------//
//	LGDT_Return_t LGDTgetRegi(DATA8 addr, DATA8* data)
//		- Gets a register based on the addr and returns data
//
//	Input
//		- DATA8 addr
//		- DATA8* data
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTgetRegi(DATA8 addr, DATA8* data)
{
	DATA8		 data_p;
	LGDT_Return_t retVal;
	
	retVal = (LGDT_Return_t) TiDTV_I2cRead(LG3303_I2C_CHANNEL, 1, LG3303_I2C_DEVICE_ADDR, 1, addr, 1, &data_p, OS_TICKS_PER_SEC / 2);
	if (retVal != 0) 
		return LGDT_ERR_I2C;

#ifdef DEBUGGING_FOR_LGE_SIC
//	printf("\nLGDTgetRegi() read=%d", data_p);
#endif

	*data = data_p;
	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTgetFreqOffset(DATA16*)
//	FQOFFSET : 23 bits @ 0x17~0x19
//		- shows frequency offset
//
//	Input : DATA16*
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTgetFreqOffset(DATA16* offset)
{
	DATA8		 data_p;
	LGDT_Return_t retVal;
	long		total		= 0;
	double		SamplingRate= 25*(10^6);		//#	Sampling Rate = 25 * 10^6	#//
	const double	PI		= 3.14;

	retVal = LGDTgetRegi(0x17, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);
	total = data_p << 16;

	retVal = LGDTgetRegi(0x18, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);
	total |= data_p << 8;

	retVal = LGDTgetRegi(0x19, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);
	total = data_p;

	*offset = (int)(total * pow(2,-27) * SamplingRate * (1/2*PI) * (1/24));

	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTgetIFAcc(DATA16*)
//		- shows IF ACC value
//
//	Input : DATA16*
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTgetIFAcc(DATA16* acc)
{
	DATA8			data_p;
	DATA16			data;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x52, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);
	data_p &= 0x0F;
	data = data_p << 8;

	retVal = LGDTgetRegi(0x54, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);
	data |= data_p;

	*acc = data;
	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTgetDCValue(DATA16*)
//		- shows DC Value
//
//	Input : DATA16*
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTgetDCValue(DATA16* data)
{
	DATA8			data_p;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x35, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);

	*data = data_p;
	return LGDT_ERR_NO;
}

//------------------------------------------------------//
//	LGDT_Return_t LGDTgetIntMode(DATA8*, DATA8*)
//		- shows Step and Increase of the interleaving
//
//	Input
//		- DATA8* : I value - Step
//		- DATA8* : J value - Increase
//	Return : LGDT_Return_t
//------------------------------------------------------//
LGDT_Return_t LGDTgetIntMode(DATA8* i, DATA8* j)
{
	DATA8			data_p;
	LGDT_Return_t	retVal;

	retVal = LGDTgetRegi(0x8A, &data_p);
	if(retVal != LGDT_ERR_NO)
		return (LGDT_Return_t)(retVal|LGDT_ERR_GET_FUNC);

	switch(data_p)
	{
		case 0x00  :	*i = 128;	*j =  1;		break;
		case 0x01  :	*i = 128;	*j =  1;		break;
		case 0x02  :	*i = 128;	*j =  2;		break;
		case 0x03  :	*i =  64;	*j =  2;		break;
		case 0x04  :	*i = 128;	*j =  3;		break;
		case 0x05  :	*i =  32;	*j =  4;		break;
		case 0x06  :	*i = 128;	*j =  4;		break;
		case 0x07  :	*i =  16;	*j =  8;		break;
		case 0x08  :	*i = 128;	*j =  5;		break;
		case 0x09  :	*i =   8;	*j = 16;		break;
		case 0x0A  :	*i = 128;	*j =  6;		break;
		case 0x0B  :	*i =   4;	*j = 32;		break;		/// Reserved
		case 0x0C  :	*i = 128;	*j =  7;		break;
		case 0x0D  :	*i =   2;	*j = 64;		break;		/// Reserved
		case 0x0E  :	*i = 128;	*j =  8;		break;
		case 0x0F  :	*i =   1;	*j =128;		break;		/// Reserved
	}
	return LGDT_ERR_NO;
}

//------------------------------------------------------//

⌨️ 快捷键说明

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