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 + -
显示快捷键?