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

📄 tidtv_tunerxg.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
字号:
/*******************************************************************************
*	@ModuleName	::	TiDTV_TunerXG.c
*	
*	@Copyright	::	Copyright 2005- Texas Instruments, Inc.
*	
*	@Description::	TI DTV Tuner control module for Xuguang PAL/NTSC/SECAM Tuner
*	
*	@History	::
*---------------------------------------
*	07-06-2005	W.Shi	Created
*	07-07-2005	L.Yu	Updated
*******************************************************************************/

#include	<stdio.h>
#include	<string.h>
#include	"ucos_ii.h"

#include	"TiDTV_DataType.h"
#include	"TiDTV_SysCtrl.h"
#include	"TVP9K_I2C_Def.h"
#include	"TiDTV_Timer.h"

#define	JS_6B1_I2C_CHANNEL		1
#define	JS_6B1_I2C_DEVICE_ADDR1	0xC0
#define	JS_6B1_I2C_DEVICE_ADDR2	0x86

#define	JS_6B1_VHF_LOW			3975		// 198.75MHz * 20
#define	JS_6B1_VHF_HIGH			10035		// 501.75MHz * 20

static const UINT16 TvChanFreq[] = {
	995,   1155,  1315,  1545,
	1705,  3365,  3525,  3685,
	3845,  4005,  4165,  4325,
	2245,  2405,  2565,  2725,
	2885,  3045,  3205,  4485, 4645,
	4805,  4965,  5125,  5285,
	5445,  5605,  5765,  5925,
	6085,  6245,  6405,  6565,
	6725,  6885,  7045,  7205,
	7365,  7525,  7685,  7845,
	8005,  8165,  8325,  8485,
	8645,  8805,  8965,  9125,
	9425,  9585,  9745,  9905,
	10065, 10225, 10385, 10545,
	10705, 10865, 11025, 11185,
	11345, 11505, 11665, 11825,
	11985, 12145, 12305, 12465,
	12625, 12785, 12945, 13105,
	13265, 13425, 13585, 13745,
	13905, 14065, 14225, 14385,
	14545, 14705, 14865, 15025,
	15185, 15345, 15505, 15665,
	15825, 15985, 16145, 16305,
	16465, 16625, 16785, 16945,
	17105, 17365
};

static const UCHAR XgTunerInitData[][2] = {
#if	defined(PAL_I)
	{0x00, 0xD6},	// SWITCHING (B DATA)
	{0x01, 0x71},	// ADJUST (C DATA)
	{0x02, 0x0E},	// Pal D data
#elif defined(PAL_B_G)
	{0x00, 0xD6},	// SWITCHING (B DATA)
	{0x01, 0x71},	// ADJUST (C DATA)
	{0x02, 0x0D},	// Pal D data      
#elif defined(NTSC_M_N)
	{0x00, 0x16},	// SWITCHING (B DATA)
	{0x01, 0x31},	// ADJUST (C DATA)
	{0x02, 0x0C},	// Pal D data
#else    //PAL_D_K
	{0x00, 0xD6},	// SWITCHING (B DATA)
	{0x01, 0x71},	// ADJUST (C DATA)
	{0x02, 0x0F},	// Pal D data
#endif
	
	{0xff, 0xff},	// End mark
};

/*******************************************************************************
*	@RoutineName:: TiDTV_SetTunerPhyChan
*
*	@Description:: Set TV Tuner Channel
*
*	@Input		::
*		int TvChannel	: TV Channel [1 - ???]
*
*	@Output		:: none
*
*	@Return		::
*		int		: OK/NG
*******************************************************************************/
int TiDTV_SetTunerPhyChan(int TvChannel)
{
	UINT16 Freq = TvChanFreq[TvChannel - 1];
	UINT16 Divider = Freq + 20 * 38;
	UCHAR  WorkUCHAR[4];
	
	if (TvChannel > sizeof(TvChanFreq)/sizeof(UINT16))
		return TI_DTV_E_NG;
	
	WorkUCHAR[0] = (UCHAR) ((Divider >> 8) & 0x7f);
	WorkUCHAR[1] = (UCHAR) (Divider & 0xff);
	WorkUCHAR[2] = 0xC8;		// CP = 1, RSA=RSB=0, OS=0
	
	if (Freq < JS_6B1_VHF_LOW)
		WorkUCHAR[3] = 0x01;
	else if (Freq < JS_6B1_VHF_HIGH)
		WorkUCHAR[3] = 0x02;
	else
		WorkUCHAR[3] = 0x04;
	
	return TiDTV_I2cWrite(JS_6B1_I2C_CHANNEL, 1, JS_6B1_I2C_DEVICE_ADDR1, 4, WorkUCHAR, OS_TICKS_PER_SEC);
}

/*******************************************************************************
*	@RoutineName:: TiDTV_GetTunerPllStatus
*
*	@Description:: Get Tuner PLL status
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		::
*		int		: 0 = Not locked yet, 1 = Locked
*******************************************************************************/
int TiDTV_GetTunerPllStatus(void)
{
	UCHAR TunerStatus;
	
	TiDTV_I2cRead(JS_6B1_I2C_CHANNEL, 1, JS_6B1_I2C_DEVICE_ADDR1, 0, 0, 1, &TunerStatus, OS_TICKS_PER_SEC / 2);
	
	return (TunerStatus & 0x40);
}

/*******************************************************************************
*	@RoutineName:: TiDTV_InitTuner
*
*	@Description:: Initialize the Tuner
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_InitTuner(void)
{
	UCHAR (*pWorkI2cData)[2];
	
	for (pWorkI2cData = (UCHAR (*)[2]) XgTunerInitData; (*pWorkI2cData)[0] != 0xff; pWorkI2cData++)
		TiDTV_I2cWrite(JS_6B1_I2C_CHANNEL, 1, JS_6B1_I2C_DEVICE_ADDR2, 2, &((*pWorkI2cData)[0]), OS_TICKS_PER_SEC / 2);
}

/*******************************************************************************
*	@RoutineName:: TiDTV_SetDtvRfChan
*
*	@Description:: Set DTV RF Channel (not used for Analog TV Tuner)
*
*	@Input		::
*		int RfChanNo	: TV Channel [2-69]
*		int Retry		: number of Retries
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_SetDtvRfChan(int RfChanNo, int Retry)
{
}

int LGDTcheckStatus(void)
{
	return 0;
}

⌨️ 快捷键说明

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