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

📄 stv0299drv.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
			bValue[0x20]  =  0x50;
			bValue[0x21]  =  0x10;
			bValue[0x22]  =  0x00;
			bValue[0x23]  =  0x00;
			bValue[0x24]  =  0x37;
			bValue[0x25]  =  0xbc;
			bValue[0x26]  =  0x00;
			bValue[0x27]  =  0x00;
			if(g_nASIInSelect[bTunerIndex] == 1)
				bValue[ 0x28 ] = 0x01	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			else
				bValue[ 0x28 ] = 0x00	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			bValue[0x29]  =  0x1e;
			bValue[0x2a]  =  0x14;
			bValue[0x2b]  =  0x1f;
			bValue[0x2c]  =  0x09;
			bValue[0x2d]  =  0x0a;
			bValue[0x2e]  =  0x00;
			bValue[0x2f]  =  0x00;
			bValue[0x30]  =  0x00;
			bValue[0x31]  =  0x1f;
			bValue[0x32]  =  0x19;
			bValue[0x33]  =  0xfc;
			bValue[0x34]  =  0x13;
#endif
			break;
			
		case LGF001F:

			bValue[ 0 ]  = 0xa1	;		// Chip ID, Read Only
			bValue[ 1 ]  = 0x15	;		// K = 0, M = 21
			bValue[ 2 ]  = 0x00	;		// VCO ON, P = 0  fVCO = fXTAL*4*(M+1)/(K+1) = 352MHz
			bValue[ 3 ]  = 0x00	;			
			bValue[ 4 ]  = 0x7d	;		// F22 = fVCO / 128 / F22FR = 22KHz
			bValue[ 5 ]  = 0x05	;		// Tuner I2C Not Connect
			bValue[ 6 ]  = 0xA2	;		// DAC Duty cycle modulated at fCLK / 4
			bValue[ 7 ]  = 0x00	;		// DAC = 0x200
			bValue[ 8 ]  = 0x00	;
			bValue[ 9 ]  = 0x00 ;		// DiSEqC FIFO
			bValue[ 0x0a ] = 0x00	;	// DiSEqC staatus
			bValue[ 0x0b ] = 0x00	;	// Reserved
			
//			bValue[ 0x0c ] = 0x00   ;	// 00 for IQ 01 for I,-Q
			bValue[ 0x0c ] = 0xf1   ;	// 00 for IQ 01 for I,-Q	-by yxb 040923
			
			bValue[ 0x0d ] = 0x81	;	// beta_agc1 = 1
			bValue[ 0x0e ] = 0x44	; 	 
			bValue[ 0x0f ] = 0x14	;
			bValue[ 0x10 ] = 0x3c	;
			bValue[ 0x11 ] = 0x84	;	// must program to 0x84
			bValue[ 0x12 ] = 0xf7	;	
			bValue[ 0x13 ] = 0x98	;	// Derotator on or off, alpha_carrier
			bValue[ 0x14 ] = 0x95	;	// Beta_carrier!!!
			bValue[ 0x15 ] = 0xc9	;	// Carrier Lock Detector Threshold
			bValue[ 0x16 ] = 0x1a	;	// AGC1 integrator value
			bValue[ 0x17 ] = 0x56	;	// Read Only
			bValue[ 0x18 ] = 0x0c	;	// AGC2 Integrator MSB bits read only
			bValue[ 0x19 ] = 0x0b	;	// AGC2 Integrator LSB bits read only
			bValue[ 0x1a ] = 0x84	;	// timing frequency register
			bValue[ 0x1b ] = 0x00	;	// QPSk lock status, if 80 carrier found if 88 data found
			bValue[ 0x1c ] = 0x27	;	// Carrier lock detector value read only
			bValue[ 0x1d ] = 0x0c	;	// Error Count register MSB
			bValue[ 0x1e ] = 0x0c	;	// Error Count register LSB
			bValue[ 0x1f ] = 0x00	;	// fs MSB		[19:12]
			bValue[ 0x20 ] = 0x00	;	// fs Middle SB	[11:04]
			bValue[ 0x21 ] = 0x00	;	// fs LSB		[03:00]
			bValue[ 0x22 ] = 0x00	;	// Derotator Freuencyfs MSB	
			bValue[ 0x23 ] = 0x00	;	// Derotator Freuencyfs LSB	
			bValue[ 0x24 ] = 0x00	;	// Noise Indicator (MSB)
			bValue[ 0x25 ] = 0x00	;	// Noise Indicator (LSB)
			bValue[ 0x26 ] = 0x1d	;	// Error Rate
			bValue[ 0x27 ] = 0x00	;	// Reserved
			if(g_nASIInSelect[bTunerIndex] == 1)
				bValue[ 0x28 ] = 0x01	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			else
				bValue[ 0x28 ] = 0x00	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			bValue[ 0x29 ] = 0x28	;	// Rate = 1/2 Threshold
			bValue[ 0x2a ] = 0x14	;	// Rate = 2/3 Threshold
			bValue[ 0x2b ] = 0x0f   ;	// Rate = 3/4 Threshold
			bValue[ 0x2c ] = 0x09	;	// Rate = 5/6 Threshold
			bValue[ 0x2d ] = 0x05	;	// Rate = 7/8 Threshold
			bValue[ 0x2e ] = 0x00	;	// Reserved
			bValue[ 0x2f ] = 0x00	;	// Reserved
			bValue[ 0x30 ] = 0x00	;	// Reserved
			bValue[ 0x31 ] = 0x1f	;	// All punctured rates Enabled
			bValue[ 0x32 ] = 0x19	;	// Viterbi and Synchro Search
			bValue[ 0x33 ] = 0xfc	;	// RS CONTROL
			bValue[ 0x34 ] = 0x93	;	// Error Control

			break;
		case LG_S002F:
			bValue[0x00]    =       0xa1;
			bValue[0x01]    =       0x15;
			bValue[0x02]    =       0x00;
			bValue[0x03]    =       0x00;
			bValue[0x04]    =       0x7d;
			bValue[0x05]    =       0x85;
			bValue[0x06]    =       0x02;
			bValue[0x07]    =       0x00;
			bValue[0x0b]    =       0x00;
			bValue[0x0c]    =       0xf1;
			bValue[0x0d]    =       0x81;
			bValue[0x0e]    =       0x44;
			bValue[0x0f]    =       0x09;
			bValue[0x10]    =       0x3c;
			bValue[0x11]    =       0x84;
			bValue[0x12]    =       0xda;
			bValue[0x13]    =       0x97;
			bValue[0x14]    =       0x95;
			bValue[0x15]    =       0xc9;
			bValue[0x16]    =       0x22;//19
			bValue[0x17]    =       0x8c;
			bValue[0x18]    =       0x59;
			bValue[0x19]    =       0xf8;
			bValue[0x1a]    =       0x1d;
			bValue[0x1b]    =       0x9b;//02
			bValue[0x1c]    =       0x7f;
			bValue[0x1d]    =       0x00;
			bValue[0x1e]    =       0x00;
			bValue[0x1f]    =       0x50;
			bValue[0x20]    =       0x00;
			bValue[0x21]    =       0x00;
			bValue[0x22]    =       0x00;
			bValue[0x23]    =       0x00;
			bValue[0x24]    =       0x2a;//00
			bValue[0x25]    =       0x48;//00
			bValue[0x26]    =       0x00;
			bValue[0x27]    =       0x00;
			if(g_nASIInSelect[bTunerIndex] == 1)
				bValue[ 0x28 ] = 0x01	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			else
				bValue[ 0x28 ] = 0x00	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			bValue[0x29]    =       0x28;
			bValue[0x2a]    =       0x14;
			bValue[0x2b]    =       0x0f;
			bValue[0x2c]    =       0x09;
			bValue[0x2d]    =       0x09;
			bValue[0x2e]    =       0x00;
			bValue[0x2f]    =       0x00;
			bValue[0x30]    =       0x00;
			bValue[0x31]    =       0x1f;
			bValue[0x32]    =       0x18;
			bValue[0x33]    =       0xfc;//fe
			bValue[0x34]    =       0x13;
			break;
		case STB6K:
#if 1
			bValue[0x00]  =  0xa1;
			bValue[0x01]  =  0x15;
			bValue[0x02]  =  0x00;
			bValue[0x03]  =  0x00;
			bValue[0x04]  =  0x7d;
			bValue[0x05]  =  0x05;
			bValue[0x06]  =  0x02;
			bValue[0x07]  =  0x00;
			bValue[0x08]  =  0x03;
			bValue[0x09]  =  0x00;
			bValue[0x0a]  =  0x00;
			bValue[0x0b]  =  0x00;
			bValue[0x0c]  =  0x01;
			bValue[0x0d]  =  0x81;
			bValue[0x0e]  =  0x44;
			bValue[0x0f]  =  0x94;
			bValue[0x10]  =  0x3f;
			bValue[0x11]  =  0x84;

			//
			// [July 08, 2005]Modify by yuxibo in Istanbul.
			//
			//bValue[0x12]  =  0xda; //set bit[6..4] to '111' will cause low symborate problem
			bValue[0x12]  =  0xb9; 
			
			bValue[0x13]  =  0x98;
			bValue[0x14]  =  0x89;//
			bValue[0x15]  =  0xce;//
			bValue[0x16]  =  0xe8;
			bValue[0x17]  =  0x00;
			bValue[0x18]  =  0x19;
			bValue[0x19]  =  0x8b;
			bValue[0x1a]  =  0x00;
			bValue[0x1b]  =  0x82;
			bValue[0x1c]  =  0x7f;
			bValue[0x1d]  =  0x00;
			bValue[0x1e]  =  0x00;
			bValue[0x1f]  =  0x06;
			bValue[0x20]  =  0x50;
			bValue[0x21]  =  0x10;
			bValue[0x22]  =  0x00;
			bValue[0x23]  =  0x00;
			bValue[0x24]  =  0x37;
			bValue[0x25]  =  0xbc;
			bValue[0x26]  =  0x00;
			bValue[0x27]  =  0x00;
			if(g_nASIInSelect[bTunerIndex] == 1)
				bValue[ 0x28 ] = 0x01	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			else
				bValue[ 0x28 ] = 0x00	;	// FEC Mode: QPSK, Parallel, Normal Impedance

			//
			//[July 08, 2005]Modify by yuxibo in Istanbul.
			//
			/*
			bValue[0x29]  =  0x1e;
			bValue[0x2a]  =  0x14;
			bValue[0x2b]  =  0x1f;
			bValue[0x2c]  =  0x09;
			bValue[0x2d]  =  0x0a;
			*/
			bValue[0x29]  =  0x1e;
			bValue[0x2a]  =  0x14;
			bValue[0x2b]  =  0x0f;
			bValue[0x2c]  =  0x05;
			bValue[0x2d]  =  0x05;
			
			bValue[0x2e]  =  0x00;
			bValue[0x2f]  =  0x00;
			bValue[0x30]  =  0x00;
			bValue[0x31]  =  0x1f;
			bValue[0x32]  =  0x19;
			bValue[0x33]  =  0xfc;
			bValue[0x34]  =  0x13;
#else
			bValue[0x00]  =  0xa1;
			bValue[0x01]  =  0x15;
			bValue[0x02]  =  0x00;
			bValue[0x03]  =  0x00;
			bValue[0x04]  =  0x7d;
			bValue[0x05]  =  0x05;
			bValue[0x06]  =  0x02;
			bValue[0x07]  =  0x00;
			bValue[0x08]  =  0x03;
			bValue[0x09]  =  0x00;
			bValue[0x0a]  =  0x00;
			bValue[0x0b]  =  0x00;
			bValue[0x0c]  =  0x01;
			bValue[0x0d]  =  0x81;
			bValue[0x0e]  =  0x44;
			bValue[0x0f]  =  0x94;
			bValue[0x10]  =  0x3f;
			bValue[0x11]  =  0x84;

			//
			// [July 08, 2005]Modify by yuxibo in Istanbul.
			//
			//bValue[0x12]  =  0xda; //set bit[6..4] to '111' will cause low symborate problem
			bValue[0x12]  =  0xb9; 
			
			bValue[0x13]  =  0x98;
			bValue[0x14]  =  0x95;
			bValue[0x15]  =  0xc9;
			bValue[0x16]  =  0xeb;
			bValue[0x17]  =  0x00;
			bValue[0x18]  =  0x19;
			bValue[0x19]  =  0x8b;
			bValue[0x1a]  =  0x00;
			bValue[0x1b]  =  0x82;
			bValue[0x1c]  =  0x7f;
			bValue[0x1d]  =  0x00;
			bValue[0x1e]  =  0x00;
			bValue[0x1f]  =  0x06;
			bValue[0x20]  =  0x50;
			bValue[0x21]  =  0x10;
			bValue[0x22]  =  0x00;
			bValue[0x23]  =  0x00;
			bValue[0x24]  =  0x37;
			bValue[0x25]  =  0xbc;
			bValue[0x26]  =  0x00;
			bValue[0x27]  =  0x00;
			if(g_nASIInSelect[bTunerIndex] == 1)
				bValue[ 0x28 ] = 0x01	;	// FEC Mode: QPSK, Parallel, Normal Impedance
			else
				bValue[ 0x28 ] = 0x00	;	// FEC Mode: QPSK, Parallel, Normal Impedance

			//
			//[July 08, 2005]Modify by yuxibo in Istanbul.
			//
			/*
			bValue[0x29]  =  0x1e;
			bValue[0x2a]  =  0x14;
			bValue[0x2b]  =  0x1f;
			bValue[0x2c]  =  0x09;
			bValue[0x2d]  =  0x0a;
			*/
			bValue[0x29]  =  0x1e;
			bValue[0x2a]  =  0x14;
			bValue[0x2b]  =  0x0f;
			bValue[0x2c]  =  0x05;
			bValue[0x2d]  =  0x05;
			
			bValue[0x2e]  =  0x00;
			bValue[0x2f]  =  0x00;
			bValue[0x30]  =  0x00;
			bValue[0x31]  =  0x1f;
			bValue[0x32]  =  0x19;
			bValue[0x33]  =  0xfc;
			bValue[0x34]  =  0x13;
#endif
			break;
	
	}
	if (TS_SERIAL == g_nTSOutputMode[bTunerIndex])
	{
		bValue[ 0x28 ] |= 0x02	;	// FEC Mode: QPSK, Parallel, Normal Impedance
		bValue[ 0x33 ] = 0xFE	;	// RS CONTROL
		
	}

	ErrorCode = STV0299WrtReg ( bTunerIndex, 0, bValue, 8 );	
	if(  ErrorCode != CSQPSK_SUCCESS )
		return ErrorCode;

	ErrorCode = STV0299WrtReg ( bTunerIndex, 0x0b, &bValue[0x0b],  42);
	if(  ErrorCode != CSQPSK_SUCCESS )
		return ErrorCode;
	
	return CSQPSK_SUCCESS;
	
}

CSQPSK_Error_t STV0299GetLockStatus ( CSHDITunerIndex bTunerIndex, int *pnLockStatus )
{
	BYTE bValue, bTemp;
	int nStatus = ALLLOST;
	int ErrorCode;
	int ii;
	
	if (g_nASIInSelect[bTunerIndex] == 1)
	{
		ErrorCode = CSGPIORead(g_nASIStatusPin[bTunerIndex], &bValue);
		if( (ErrorCode == CS_GPIO_SUCCESS) && (bValue) )
		{
			*pnLockStatus = TP_LOCK; 
		}
		else
			*pnLockStatus = ALLLOST;
	}
	
	nStatus = ALLLOST;

	ErrorCode = STV0299RdReg ( bTunerIndex,STV0299REG_TLIR, &bValue, 1 ) ;
	if ( ErrorCode != CSQPSK_SUCCESS )
	{
		return ErrorCode;
	}
	
	if (bValue > 72/*48*/)
		nStatus = TIMINGOK;	

	for(ii=0; ii<5; ii++)
	{
		if ( STV0299RdReg ( bTunerIndex,STV0299REG_VSTATUS, &bValue, 1 ) != CSQPSK_SUCCESS )
			continue;

		//sttbx_Print("^^^^VSTATUS:%02x\n",bValue);
		
		bTemp = bValue & VSTATUS_MASK ;
	
		if ( bTemp == ( CFOUND_FLAG | TPLOCK_FLAG ) )/*carrier lock & sync word lock*/
		{
			nStatus = TP_LOCK;
		}
		else if ( bTemp == CFOUND_FLAG )
		{
			nStatus = CFOUND;
			break;
		}
	}

	*pnLockStatus = nStatus;

	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t STV0299CheckLockStatus ( CSHDITunerIndex bTunerIndex, int *pnLockStatus )
{
	int nReturn;
	int nStatus;
	
	nReturn = STV0299GetLockStatus (bTunerIndex, &nStatus);

	if ( nReturn == CSQPSK_SUCCESS )
	{
		if (TP_LOCK == nStatus)
		{
			*pnLockStatus = TRUE;
		}
		else 
		{
			*pnLockStatus = FALSE;
		}		
	}

	return nReturn;
}


/* +==========================================================================+ */
/* | Function:	IhVC(I,Q) / (I,-Q)											  |	*/		
/* | Input:		IQW4L,	0: I, Q		IQ Normal								  |	*/
/* |					1: I,-Q		IQ Invert								  |	*/
/* | Output:	N^															  |	*/
/* | Return:	3I9&1jV>													  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t STV0299SetIQ ( CSHDITunerIndex bTunerIndex, BYTE bIQStatus )
{
	BYTE bValue;
	int ErrorCode;

	//sttbx_Print("^^^^IQ:%d\n",bIQStatus);
	ErrorCode = STV0299RdReg ( bTunerIndex, STV0299REG_IOCFG, &bValue, 1 );
	if ( ErrorCode != CSQPSK_SUCCESS )
		return ErrorCode;
	if (bIQStatus)
		bValue &= ~0x01;
	else
		bValue |= 0x01;
	return ( STV0299WrtReg ( bTunerIndex,STV0299REG_IOCFG, &bValue, 1 ) );
}

/* +==========================================================================+ */
/* | Function:	IQ;%;;														  |	*/		
/* | Input:		N^
* | Output:	N^															  |	*/
/* | Return:	3I9&1jV>													  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t STV0299SwapIQ ( CSHDITunerIndex bTunerIndex )
{
	BYTE bValue;
	int ErrorCode;

	ErrorCode = STV0299RdReg ( bTunerIndex, STV0299REG_IOCFG, &bValue, 1 );
	if ( ErrorCode != CSQPSK_SUCCESS )
		return ErrorCode;

	bValue ^= 0x01;
	bValue &= 0x01;
	return ( STV0299WrtReg ( bTunerIndex,STV0299REG_IOCFG, &bValue, 1 ) );
}

⌨️ 快捷键说明

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