ix2273drv.c

来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 171 行

C
171
字号
/*************************************************************************

* IX2273DRV.C                                                           *

* Copyright ? Shenzhen Coship Electronics Co.#,LTD.  2002.3             *

* All rights reserved.                                                  *

*                                                                       *

* Author: Zhou Cheng                                                    *

* Date:  2002/3/13                                                      *

* Compiler:					                                            *
 
*                                                                       *

* Description:	PLL IC IX2273 Driver ( used in SHARP1173 Tuner )	    *

* Notes:                                                                *

* Update:   2002/3/6  Zhou Cheng										*

*************************************************************************/
// For 1173 Tuner
#include "CSQpskCFG.h"
#include "cs_typedef.h"
#include "CSHDI_typedef.h"
#include "cs_i2c.h"
#include "cs_os.h"
#include "IX2273DRV.h"
#include "cs_frnpublic.h"

#define TUNER_IF		0
#define TUNE_STEP		125
#define TUNELIMIT_LOW	900000		// KHz  9f8qJiION*(950M - 2150M)
#define TUNELIMIT_HIGH	2200000		// KHz  Ub@oJJ517E?m
#define BANDFREQREF		1450000		// KHz
#define IX2273ADDR		0xc0
#define PLLLOCK_MASK	0x40
#define PLLLOCK_FLAG	0x40

static HCSHANDLE hIX2273I2C[MAX_TUNER_NUM];
//ADD BY SFG FOR COMPILER
extern CSQPSK_Error_t STV0299EnableTunerI2C ( CSHDITunerIndex bTunerIndex );
extern CSQPSK_Error_t STV0299DisableTunerI2C (CSHDITunerIndex bTunerIndex);
//add end
CSQPSK_Error_t IX2273Init(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;

	hIX2273I2C[bTunerIndex] = 0;
	ErrorCode = CSI2COpen(bTunerIndex,IX2273ADDR,&hIX2273I2C[bTunerIndex]);
	if (ErrorCode != CSI2C_SUCCESS)
	{
		return CSQPSK_I2C_ERROR;
	}
	return CSQPSK_SUCCESS;
}


CSQPSK_Error_t IX2273Term(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;
	
	ErrorCode = CSI2CClose(hIX2273I2C[bTunerIndex]);
	 if (ErrorCode != CSI2C_SUCCESS)
	{
		return CSQPSK_I2C_ERROR;
	}
	return CSQPSK_SUCCESS;
}



/* +==========================================================================+ */
/* | Function:	IhVC TUNER 5wP3F5BJ											  |	*/		
/* | Input:																	  |	*/
/* | Output:	N^															  |	*/
/* | Return:	2YWw3I9&1jV>												  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t IX2273WrtFreq( CSHDITunerIndex bTunerIndex,BYTE *pbTune ,DWORD dwDataLen)
{
	int ErrorCode;

	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299EnableTunerI2C(bTunerIndex);
		
		ErrorCode = CSI2CWriteWithStop ( hIX2273I2C[bTunerIndex], pbTune, dwDataLen ) ;

		STV0299DisableTunerI2C(bTunerIndex);
		
		CSI2CReleaseBus_inner(bTunerIndex);
		
		if ( ErrorCode == CSI2C_SUCCESS )
		{
			return CSQPSK_SUCCESS;
		}
	}
	
	return CSQPSK_I2C_ERROR;
}

/* +==========================================================================+ */
/* | Function:	<l2b TUNER PLL W4L,											  |	*/		
/* | Input:		N^															  |	*/
/* | Output:	6A3v5DJ}>]													  |	*/
/* | Return:	0 -- PLL Lost Lock, 1 -- PLL Lock							  |	*/
/* +==========================================================================+ */

CSQPSK_Error_t IX2273GetPLLStatus ( CSHDITunerIndex bTunerIndex, int *pnPllLock )
{
	int nResult;
	BYTE bValue;

	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299EnableTunerI2C(bTunerIndex);
		
		nResult = CSI2CReadWithStop ( hIX2273I2C[bTunerIndex], &bValue, 1 ) ;

		STV0299DisableTunerI2C(bTunerIndex);
		
		CSI2CReleaseBus_inner(bTunerIndex);

		if ( nResult == CSI2C_SUCCESS )
		{
			if (( bValue & PLLLOCK_MASK ) == PLLLOCK_FLAG )
				*pnPllLock = TRUE;
			else
				*pnPllLock = FALSE;

			return CSQPSK_SUCCESS;
		}
	}

	return CSQPSK_I2C_ERROR;
}	

/* +==========================================================================+ */
/* | Function:	IhVC TUNER 5wP3F5BJ											  |	*/		
/* | Input:		F5BJ (KHzN*5%N;)											  |	*/
/* | Output:	N^															  |	*/
/* | Return:	2YWw3I9&1jV>												  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t IX2273SetFreq( CSHDITunerIndex bTunerIndex,DWORD dwTuneFreq)
{
	BYTE pbValue[4], bTemp;

	DWORD dwFrequency;

	pbValue[2] = 0x95;

	if ( dwTuneFreq < BANDFREQREF )
		pbValue[3] = 0x88;
	else
		pbValue[3] = 0x80;

	dwFrequency = ( dwTuneFreq + TUNER_IF ) / TUNE_STEP ; 
	pbValue[0] = (BYTE)( ( dwFrequency >> 8 ) & 0x7F );
	pbValue[1] = (BYTE)( dwFrequency & 0xFF );
	bTemp = (BYTE)( ( dwFrequency >> 15 ) & 0x3 );
	pbValue[2] |= ( bTemp << 5 );

	return ( IX2273WrtFreq ( bTunerIndex,pbValue ,4 ) ) ;

}

⌨️ 快捷键说明

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