ix2360drv.c

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

C
179
字号
/*************************************************************************

* IX2360DRV.C                                                           *

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

* All rights reserved.                                                  *

*                                                                       *
 
* Author: Zhou Cheng                                                    *

* Date:  2002/3/13                                                      *

* Compiler:					                                            *

*                                                                       *

* Description:	PLL IC IX2360 Driver ( used in SHARP0184 Tuner )	    *

* Notes:                                                                *

* Update:   2002/3/6  Zhou Cheng										*

*************************************************************************/
// For 0184 Tuner
#include "CSQpskCFG.h"
#include "cs_typedef.h"
#include "CSHDI_typedef.h"
#include "cs_qpsk.h"
#include "cs_os.h"
#include "CS_I2c.h"
#include "IX2360DRV.h"
#include "cs_frnpublic.h"

#define TUNER_IF		0
#define TUNE_STEP		125
#define TUNELIMIT_LOW	900000		// KHz
#define TUNELIMIT_HIGH	2200000		// KHz
#define BANDFREQREF		1450000		// KHz
#define IX2360ADDR		0xc0
#define PLLLOCK_MASK	0x40
#define PLLLOCK_FLAG	0x40

static HCSHANDLE hIX2360I2C[MAX_TUNER_NUM];
//ADD BY SFG FOR COMPILER
extern CSQPSK_Error_t CSQPSKReset ( CSHDITunerIndex bTunerIndex );
extern CSQPSK_Error_t STV0299EnableTunerI2C ( CSHDITunerIndex bTunerIndex );
extern CSQPSK_Error_t STV0299DisableTunerI2C (CSHDITunerIndex bTunerIndex);
//add end
CSQPSK_Error_t IX2360Init(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;
	hIX2360I2C[bTunerIndex] = 0;
	ErrorCode = CSI2COpen(bTunerIndex,IX2360ADDR,&hIX2360I2C[bTunerIndex]);
	if(ErrorCode!= CSI2C_SUCCESS)
	{
		return CSQPSK_I2C_ERROR;
	}
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t IX2360Term(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;
	ErrorCode = CSI2CClose(hIX2360I2C[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 IX2360WrtFreq( CSHDITunerIndex bTunerIndex, BYTE *pbTune ,DWORD dwDataLen)
{
	int nResult;

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

		STV0299DisableTunerI2C(bTunerIndex);
		
		CSI2CReleaseBus_inner(bTunerIndex);

		if ( nResult == CSI2C_SUCCESS )
		{
			return CSQPSK_SUCCESS;
		}
		
		if(nResult == -94)
			CSQPSKReset(bTunerIndex);
	}

	return CSQPSK_I2C_ERROR;
}

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

CSQPSK_Error_t IX2360GetPLLStatus ( CSHDITunerIndex bTunerIndex, int *pnPllLock )
{
	int nResult= 0 ;
	BYTE bValue;
	int ret;

	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299EnableTunerI2C (bTunerIndex);
		
		ret = CSI2CReadWithStop ( hIX2360I2C[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;
		}
		
		if(ret == -94)	/*no acknowledge occurs*/
		{
			//sfg CSQPSKReset();	
			CSQPSKReset(bTunerIndex);	
		}
		
	}
	return CSQPSK_I2C_ERROR;
}	

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

	DWORD dwFrequency;

	pbValue[2] = 0x8e;

	if ( dwTuneFreq < BANDFREQREF )
		pbValue[3] = 0x86;
	else
		pbValue[3] = 0x84;
	
	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 ( IX2360WrtFreq ( bTunerIndex, pbValue ,4 ) ) ;

}

⌨️ 快捷键说明

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