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

📄 tuner.c

📁 TFT LCD驱动芯片T100A+AU7" Source code
💻 C
📖 第 1 页 / 共 2 页
字号:
	0x20e2,		// CH 15, 487.25
	0x2162,		// CH 16, 495.25
	0x21e2,		// CH 17, 503.25
	0x2262,		// CH 18, 511.25
	0x22e2,		// CH 19, 519.25
	0x2362,		// CH 20, 527.25
	0x23e2,		// CH 21, 535.25
	0x2462,		// CH 22, 543.25
	0x24e2,		// CH 23, 551.25
	0x2562,		// CH 24, 559.25
	0x2862,		// CH 25, 607.25
	0x28e2,		// CH 26, 615.25
	0x2962,		// CH 27, 623.25
	0x29e2,		// CH 28, 631.25
	0x2a62,		// CH 29, 639.25
	0x2ae2,		// CH 30, 647.25
	0x2b62,		// CH 31, 655.25
	0x2be2,		// CH 32, 663.25
	0x2c62,		// CH 33, 671.25
	0x2ce2,		// CH 34, 679.25
	0x2d62,		// CH 35, 687.25
	0x2de2,		// CH 36, 695.25
	0x2e62,		// CH 37, 703.25
	0x2ee2,		// CH 38, 711.25
	0x2f62,		// CH 39, 719.25
	0x2fe2,		// CH 40, 727.25
	0x3062,		// CH 41, 735.25
	0x30e2,		// CH 42, 743.25
	0x3162,		// CH 43, 751.25
	0x31e2,		// CH 44, 759.25
	0x3262,		// CH 45, 767.25
	0x32e2,		// CH 46, 775.25
	0x3362,		// CH 47, 783.25
	0x33e2,		// CH 48, 791.25
	0x3462,		// CH 49, 799.25
	0x34e2,		// CH 50, 807.25
	0x3562,		// CH 51, 815.25
	0x35e2,		// CH 52, 823.25
	0x3662,		// CH 53, 831.25
	0x36e2,		// CH 54, 839.25
	0x3762,		// CH 55, 847.25
	0x37e2,		// CH 56, 855.25
	0x3862,		// CH 57, 863.25

/* // max. support freq : 863.25MHz
	0x38e2,		// CH 58, 871.25
	0x3962,		// CH 59, 879.25
	0x39e2,		// CH 60, 887.25
	0x3a62,		// CH 61, 895.25
	0x3ae2,		// CH 62, 903.25
	0x3b62,		// CH 63, 911.25
	0x3be2,		// CH 64, 919.25
	0x3c62,		// CH 65, 927.25
	0x3ce2,		// CH 66, 935.25
	0x3d62,		// CH 67, 943.25
	0x3de2,		// CH 68, 951.25
*/
};
#endif
#endif

#define CATV_MIN	1
#define CATV_MAX	96
#define CATV_TOTAL	96

extern uDWORD m_dwVFrameCntPre;
extern uWORD  m_wHSyncPeriodPre;
extern uCHAR idata m_cBuff[4];


void AutoMemory(void)
{
	uCHAR i,j;
	bit bTVFound;
	uWORD wTVFreq, wTVFreqMin;
	uCHAR cTVNum=0;
	uCHAR cTV_Max,cTV_Min;
#ifdef NTSC
	uCHAR cTemp;
	uWORD* DK_CCIR;
	cTemp=I2CReadByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX);
	if(cTemp&0x01)
	{
		cTV_Max=98;
		cTV_Min=0;
		DK_CCIR=DK_CCIR2;
	}
	else
	{
		cTV_Max=82;
		cTV_Min=0;
		DK_CCIR=DK_CCIR1;
	}
#endif
#ifdef PAL
		cTV_Max=TV_MAX;
		cTV_Min=TV_MIN;
#endif
//	TR1=0;
	for(i=cTV_Min; i<=cTV_Max; i++)
  	{
		if((ir_data==REMOTE_KEY_DEC_P)||(ir_data==REMOTE_KEY_INC_P)||(ir_data==REMOTE_KEY_DECR))break;
//p = DK_CCIR + i; //MainLand China
		wTVFreq = *(DK_CCIR+i);
		wTVFreqMin=wTVFreq-20;

//		ClosePanel();
  		OSDTVShowChannel(19,5,COL_NORMAL,i+1);
		//OSDTVShowChannel(19,5,COL_TITLE,i+1); Kuo
  		bTVFound=ChannelSel(&wTVFreq, wTVFreqMin);
		if(bTVFound)
		{
			EX1=1;
			twdDelay(100);	//500
			/*m_cBuff[3]*/j=TunerReadByte(0x86);
			if(!(j&0x80))
				bTVFound=0;

		}


		if(bTVFound)
		{
//
			if((I2CReadByte(VIDEO_ADDR,0x3A)&0x06)==0x06)
			{
				//sync ok
  				//GetSyncPeriodCnt(&m_dwVFrameCntPre, &m_dwVFrameCntPre);
				//GetSyncPeriodCnt(&m_dwVFrameCntPre, &m_wHSyncPeriodPre);
//				if(cTVNum==0)
				{
					EX1=1;
					twdDelay(200);

//					SrcControl();
					SourceSelect();

				}
//				I2CWriteByte(TW702,0x91, 0x0c);
				EEPSaveTVChannel(i, wTVFreq);
		  		OSDTVShowChannel(19,1,COL_NORMAL,cTVNum+1);
                //OSDTVShowChannel(19,1,COL_TITLE,cTVNum+1);  //Kuo
				cTVNum++;
				OSDDrawTVFreq(wTVFreq);
#ifdef TV
	OSDDrawBand(wTVFreq);
#endif
				EX1=1;
				twdDelay(500);	//1000
			}
			else
			{
				EEPSaveTVChannel(i, wTVFreq|0x8000);
				OSDDrawTVFreq(wTVFreq);
#ifdef PAL
	OSDDrawBand(wTVFreq);
#endif
			}
//			return;
		}
		else
		{
				EEPSaveTVChannel(i, wTVFreq|0x8000);
				OSDDrawTVFreq(wTVFreq);
#ifdef PAL
	OSDDrawBand(wTVFreq);
#endif
		}
	}
//	return;
//	OpenPanel();  // ruby
	I2CWriteByte(TW101,0x91, 0x0c);

	I2CWriteByte(EEPVIDEOBLOCK, 0x00, cTVNum);
	twdDelay(NVRDELAY);
	I2CWriteByte(EEPVIDEOBLOCK, 0x01, 1);
//	AdjTVChannel(0, 0);
	wTVFreq=TVSetChannel(1);
	SetTuner(wTVFreq);
	OSDExit();
//	SrcSelect(1) ;
	SourceSelect();

//	TR1=1;

}
/*
void AutoScan(void)
{
	uWORD wTVFreq=TVFREQ_BEGIN;
	uWORD wTVFreqMin;
	uCHAR cTVNum=0;
	bit bTVFound;

	while(wTVFreq<=TVFREQ_END)
	{
		wTVFreqMin=wTVFreq-20;
		bTVFound=ChannelSel(&wTVFreq, wTVFreqMin);

		if(bTVFound)
		{
			twdDelay(300);	//500
			m_cBuff[3]=TunerReadByte(0x86);
			if(!(m_cBuff[3]&0x80))
				bTVFound=0;

		}


		if(bTVFound)
		{
			//twdDelay(100);
			if((I2CReadByte(0x42,0x1f)&0x41)==0x01)
			{
				//sync ok
  				//GetSyncPeriodCnt(&m_dwVFrameCntPre, &m_dwVFrameCntPre);
				//GetSyncPeriodCnt(&m_dwVFrameCntPre, &m_wHSyncPeriodPre);
				if(cTVNum==0)
				{
					twdDelay(200);
					SrcControl();
				}
  				EEPSaveTVChannel(cTVNum, wTVFreq);
				cTVNum++;
				OSDDrawTVFreq(wTVFreq);
//				OSDDrawBand(wTVFreq);
				twdDelay(500);	//1000
			}

		}
		wTVFreq+=40;
	}
	I2CWriteByte(EEPVIDEOBLOCK, 0x00, cTVNum);
	twdDelay(NVRDELAY);
	I2CWriteByte(EEPVIDEOBLOCK, 0x01, cTVNum);
}
*/
//p = CATV_CH_Tbl + ch; //Taiwan? CATV_CH_Tbl
BOOL ChannelSel(uWORD *wTVFreq, uWORD wTVFreqMin)
{
	uCHAR cTemp, cTemp1,i;

	SetTuner(*wTVFreq);
	OSDDrawTVFreq(*wTVFreq);
#ifdef PAL
	OSDDrawBand(*wTVFreq);
#endif
	EX1=1;
	twdDelay(1000);	//2000
	cTemp=TunerReadByte(0x86);
	m_cBuff[0]=cTemp;


	if(!(m_cBuff[0]&0x80))
		return FALSE;
	else
	{
		m_cBuff[0]=(m_cBuff[0]&0x1E)>>1;
		if(m_cBuff[0]==0x00||m_cBuff[0]==0x0F)
				return TRUE;
	}
	m_cBuff[0]=0;
	for(i=0;i<10;i++)
	{
		twdDelay(20);
		m_cBuff[0]|=I2CReadByte(0xb8,0x3a);
	}
//	if(!(m_cBuff[0]&0x06))return FALSE;
	i=0;

	while((*wTVFreq>=wTVFreqMin)&&(*wTVFreq<=wTVFreqMin+40)&&(i<20))
	{
		if(cTemp&0x80)//Lock
		{
			cTemp1=(cTemp&0x1E)>>1;
			if(cTemp1==0x00||cTemp1==0x0F)
				return TRUE;
			else if(cTemp1==0x01)
				(*wTVFreq)++;
			else if(cTemp1==0x02||cTemp1==0x03)
				(*wTVFreq)+=2;
		   	else if(cTemp1==0x04||cTemp1==0x05||cTemp1==0x06)
				(*wTVFreq)+=3;
			else if(cTemp1==0x07)
		   		(*wTVFreq)+=4;
			else if(cTemp1==0x08)
				(*wTVFreq)-=4;
			else if(cTemp1==0x09||cTemp1==0x0A||cTemp1==0x0B)
				(*wTVFreq)-=3;
		   	else if(cTemp1==0x0C||cTemp1==0x0D)
				(*wTVFreq)-=2;
			else if(cTemp1==0x0E)
		   		(*wTVFreq)--;

		}
		else
			break;
		//{
		//	wTVFreq+=4;
		i++;
		SetTuner(*wTVFreq);
		OSDDrawTVFreq(*wTVFreq);
#ifdef PAL
	    OSDDrawBand(*wTVFreq);
#endif
		EX1=1;
		twdDelay(300);	//1000
		cTemp=TunerReadByte(0x86);
	}

	return FALSE;
}


void SetTuner(uWORD wChanneF)
{
#if 1
	uCHAR k;
#ifdef PAL
	I2CWriteByte(0x86, 0x00,0xd6);
	I2CWriteByte(0x86, 0x01,0x70);
	I2CWriteByte(0x86, 0x02,m_cSoundSystem);
#endif
#ifdef NTSC
//	I2CWriteByte(0x86, 0x00,0xd6);
//	I2CWriteByte(0x86, 0x01,0x70);
//	I2CWriteByte(0x86, 0x02,0x0f);
	I2CWriteByte(0x86, 0x00,0x16);
	I2CWriteByte(0x86, 0x01,0x30);
	I2CWriteByte(0x86, 0x02,0x04);//IF 45.75MHz
#endif
	wChanneF&=0x7fff;
	if(wChanneF < VLMAX)
		k=BAND_VL;
	else if(wChanneF > VHMAX)
		k=BAND_UHF;
	else
		k=BAND_VH;
#ifdef NTSC
	wChanneF-=0x7c;
#endif
	TunerWriteByte(0xC6,(uCHAR)(wChanneF>>8),(uCHAR)(wChanneF&0x00FF),k);
#endif

}

uCHAR TVEEPGetChannel(void)
{
	uCHAR cTotal, cNum;

//	cTotal = I2CReadByte(EEPVIDEOBLOCK, 0x00);
//	twdDelay(NVRDELAY);
	cNum = I2CReadByte(EEPVIDEOBLOCK, 0x01);
	if((cNum>cTotal)||(cNum<1))
	{
//		cNum=1;
//		twdDelay(NVRDELAY);
//		I2CWriteByte(EEPVIDEOBLOCK, 0x00, cNum);
//		twdDelay(NVRDELAY);
//		I2CWriteByte(EEPVIDEOBLOCK, 0x01, cNum);
//		twdDelay(NVRDELAY);
//		I2CWriteByte(EEPVIDEOBLOCK, idTVCHANNEL_STAT+(cNum-1)*2, (uCHAR)(TVFREQ_BEGIN>>8));
//		twdDelay(NVRDELAY);
//		I2CWriteByte(EEPVIDEOBLOCK, idTVCHANNEL_STAT+(cNum-1)*2+1, (uCHAR)(TVFREQ_BEGIN&0x00FF));
   	}
	return cNum;
}

uWORD TVSetChannel(uCHAR cNum)
{
	uWORD wTemp;
	twdDelay(NVRDELAY);
	if(m_bAir_Cable)
	{
	wTemp=I2CReadByte(EEPVIDEOBLOCK, idTVCHANNEL_STAT+cNum*2);
	wTemp<<=8;
	twdDelay(NVRDELAY);
	wTemp|=I2CReadByte(EEPVIDEOBLOCK, idTVCHANNEL_STAT+cNum*2+1);
	}
	else
	{
	wTemp=I2CReadByte(EEPVIDEOBLOCK+2, idTVCHANNEL_STAT+cNum*2);
	wTemp<<=8;
	twdDelay(NVRDELAY);
	wTemp|=I2CReadByte(EEPVIDEOBLOCK+2, idTVCHANNEL_STAT+cNum*2+1);
	}
//	SetTuner(wTemp);
	//I2CWriteByte(EEPVIDEOBLOCK, 0x01,cTemp1);

	return wTemp;
}

void ResetTVChannel(void)
{
	uCHAR i;
	OSDShowRESET(0);
	OSDResetVideoData();
	OSDSetVideoValues();
	EEPSaveVideoData();
#ifdef NTSC
	m_bAir_Cable=0;
	for(i=0;i<83;i++)EEPSaveTVChannel(i, DK_CCIR1[i]);
	m_bAir_Cable=1;
	for(i=0;i<99;i++)EEPSaveTVChannel(i, DK_CCIR2[i]);
	i=I2CReadByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX);
	i|=0x01;
	I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX,i);
	OSDShowTVSource(0);
#endif
#ifdef PAL
	for(i=0;i<96;i++)EEPSaveTVChannel(i, DK_CCIR[i]);
#endif
	OSDShowRESET(1);
}
#if 0
void SetChannel(uCHAR cChannel)
{
	unsigned int *p;
	p = DK_CCIR + cChannel;
	SetTuner(*p);
}
#endif

#endif


















⌨️ 快捷键说明

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