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

📄 t103_util.c

📁 这是T118和T103的通用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	I2CWriteByte(TW803_P0, 0xBF,(uCHAR)(DISP_DFLT_VSWIDTH>>8));//VSYNC Width

	// Calculate line buffer
	Temp =wDVBILK/(wDHTotal*(DNDIV_40/LLCK_Divider))-DISP_DFLT_VSWIDTH;
	Temp -= (int)Temp;
	wTemp=(1.88*1716.0)+(Temp*wDHTotal/(DNDIV_40/LLCK_Divider));

	I2CWriteByte(TW803_P0, 0x84, wTemp);
	I2CWriteByte(TW803_P0, 0x85, wTemp>>8);//line buffer

	m_dwTemp[0]=(wDVTotal-m_wVRes-DWVSST-DISP_DFLT_VSWIDTH)*wDHTotal;
	m_dwTemp[1]=wTemp*(DNDIV_40/LLCK_Divider);

	I2CWriteByte(TW803_P0, 0xe2, 0x11);
}

void IRScaleratioCtrl(void)
{
	uCHAR Hcut=0;
	Hcut=12;
	m_wHRes=720-2*Hcut;

	if(m_cStandard==S_PAL)			m_wVRes=280;  //230 //ruby 2004-08-18
	else if(m_cStandard==S_NTSC)	m_wVRes=234;  //ruby 2004-08-18
	else if(m_cStandard==S_SECAM)	m_wVRes=289;  //ruby 2004-08-18

	I2CWriteByte(TW803_P0,0x54,m_wHRes);
	I2CWriteByte(TW803_P0,0x55,m_wHRes>>8);
	switch(m_cScaleratio){
		case ScaleFULL:
			I2CWriteByte(TW803_P2,0x2E,0x88); //0x82); //setup video decoder h start == 130
			I2CWriteByte(TW803_P2,0x2F,0x50); //0x50); //Setup video decoder h active 720 玡狠
			break;
		case Scale4_3:
			if(!NoSignal){
				I2CWriteByte(TW803_P0, 0x9d, 0x00);//0x10);
				I2CWriteByte(TW803_P0, 0x9e, 0x00);//0x80);
				I2CWriteByte(TW803_P0, 0x9f, 0x00);//0x80);
				I2CWriteByte(TW803_P0, 0x88, ((H_Size-(H_Size43))/2));
				I2CWriteByte(TW803_P0, 0x89, 0x00);
				I2CWriteByte(TW803_P0, 0x8a, (((H_Size43))+((H_Size-(H_Size43))/2))-2);
				I2CWriteByte(TW803_P0, 0x8b, ((H_Size43)>>8));
			}
			I2CWriteByte(TW803_P2,0x2E,0x82);
			I2CWriteByte(TW803_P2,0x2F,0x50); //0x50); //Setup video decoder h active 720
			break;
	}
/*
#ifdef T515
	if((EepPublic.cSource&0x0F)<isrc_T515_CVIDEO1)
	{
#endif	*/
		I2CWriteByte(TW803_P0, INT_STATUS, 0x3F);
/*		while(!(I2CReadByte(TW803_P0, INT_STATUS)&0x20)){
			twdDelay(1);
		}
*/
		I2CWriteByte(TW803_P0, INT_STATUS, 0x3F);
/*#ifdef T515
    	}
#endif*/
	switch(m_cScaleratio){
		case ScaleFULL:
			if(!NoSignal){
				I2CWriteByte(TW803_P0,0x88, 00);
				I2CWriteByte(TW803_P0,0x89, 00);
				I2CWriteByte(TW803_P0,0x8a, 00);
				I2CWriteByte(TW803_P0,0x8b, 00);
			}
			I2CWriteByte(TW803_P0,0x40,Hcut); //Hcut put picture position in center 2004-10-16 //For Foxconn
			I2CWriteByte(TW803_P0,0xD8,0x00);//  Horizontal Main Display Start
			I2CWriteByte(TW803_P0,0xDC, (H_Size&0xFF));//
			I2CWriteByte(TW803_P0,0xDD, (H_Size>>8));
			break;
		case Scale4_3:
			I2CWriteByte(TW803_P0,0x40,Hcut);  //Ruby 2004-08-23  0x00);
			I2CWriteByte(TW803_P0,0xD8,((H_Size-H_Size43)/2)); // 0x53);//  Horizontal Main Display Start
			I2CWriteByte(TW803_P0,0xDC, (H_Size43));
			I2CWriteByte(TW803_P0,0xDD, (H_Size43>>8));
			break;
	}
}

void Scaling(void)
{
	switch(m_cScaleratio){
		case ScaleFULL:
			m_wBuff[0] = (float)m_wHRes/DWHSZ * 0x8000;
			break;
		case Scale4_3:
			m_wBuff[0] = (float)m_wHRes/H_Size43 * 0x8000;
			break;
	}
	m_wBuff[1] = (float)m_wVRes/DWVSZ * 0x8000;


	I2CWriteByte(TW803_P0, SC_HOR_H1, (uCHAR)m_wBuff[0]);
	I2CWriteByte(TW803_P0, SC_HOR_H2, (uCHAR)(m_wBuff[0]>>8));
	I2CWriteByte(TW803_P0, SC_VER_V1, (uCHAR)m_wBuff[1]);
	I2CWriteByte(TW803_P0, SC_VER_V2, (uCHAR)(m_wBuff[1]>>8));
}
#endif  //end of Real time calculating output timing (FIX_OUTPUT_TIMING)

/*   S E T   I   P   V I D E O   T Y P E   */
/*-------------------------------------------------------------------------
    set video source selection of Comb Filter(P20x00),
    set bandwidth control register(P20x01)
    set comb filtering mode register(P20x03)
    acording to m_cChroma
-------------------------------------------------------------------------*/
void SetIPVideoType(void)
{
	if(m_cChroma==S_NTSC){
		m_wVTotal=525;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01);
		I2CWriteByte(TW803_P2,0x01, I2CReadByte(TW803_P2,0x01)|0x09);
		if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
				I2CWriteByte(TW803_P2,0x03, 0x03);
		else 	I2CWriteByte(TW803_P2,0x03, 0x00);
	}
	else if(m_cChroma==S_PAL){
		m_wVTotal=625;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01|0x32);
		I2CWriteByte(TW803_P2,0x01, I2CReadByte(TW803_P2,0x01)|0x08);
		I2CWriteByte(TW803_P2,0x03, I2CReadByte(TW803_P2,0x03)&0x01|0x02);    //s_video or  pal?
	}
	else if(m_cChroma==S_SECAM){
		m_wVTotal=625;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01|0x28);
		I2CWriteByte(TW803_P2,0x03, I2CReadByte(TW803_P2,0x03)&0x01|0x02);    //s_video or pal?
	}
	else if(m_cChroma==S_PAL_M){
		m_wVTotal=525;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01|0x04);
	}
	else if(m_cChroma==S_PAL_CN){
		m_wVTotal=625;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01|0x26);
	}
	else if(m_cChroma==S_NTSC_4){
		m_wVTotal=525;
		I2CWriteByte(TW803_P2,0x00, I2CReadByte(TW803_P2,0x00)&0x01|0x00);
		if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
				I2CWriteByte(TW803_P2,0x03, 0x03);
		else 	I2CWriteByte(TW803_P2,0x03, 0x03);
	}

}

//#ifdef AUTO_DETECT
/*   D E T E C T _   S I G   */
/*-------------------------------------------------------------------------
    
-------------------------------------------------------------------------*/
void Detect_Sig(bit detect)
{
	uCHAR tmp;
	
	if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV){
//      OpenPanel();
       return;
   }

/*
#ifdef T515
	if((EepPublic.cSource&0x0F)<isrc_T515_CVIDEO1)
	  	tmp=I2CReadByte(TW803_P2, 0x3A)&0x01;
	else
	  	tmp=I2CReadByte(TW515, 0x5A)&0x01;
#else*/
	if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)
	{
	    tmp=I2CReadByte(TW803_P0, 0x32);    //interrupt status register
		I2CWriteByte(TW803_P0, 0x32,tmp);
		tmp &= 0x01;             //if lost vsync
	}
#ifdef PC_MODE
	if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB)
	{
	    tmp=!SyncChangDect();
	}
#endif
	if (uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcVIDEO)
	    tmp=I2CReadByte(TW803_P2, 0x3A)&0x01;        // if signal detected
//#endif

	if(tmp)  // No signal
	{
		if((detect)||(NoSignal!=tmp))  // When switch to signal lost input or Signal lost
		{
			OSDShowSource();
			Timer0Stop();
			ClosePanel(0x10, 0xff, 0x40);
/*-------------------------------------------------------------------------
20060809  Phil add sound control    
-------------------------------------------------------------------------*/
			twdDelay(10);
		    AV_AUDIO_SW1 = OFF;
			TV_AUDIO_SW2 = OFF;
			SV_AUDIO_SW3 = OFF;
		    twdDelay(10);
			AUDIO_MUTE = ON;   //Mute
		    twdDelay(10);
			AUDIO_STBY = OFF;	
/*-------------------------------------------------------------------------
20060809  Phil add sound control    
-------------------------------------------------------------------------*/				
		}
	}
	else
	{
		if((detect)|| (NoSignal!=tmp))  //When video switch and signal is normal
		{
			OpenPanel();
/*-------------------------------------------------------------------------
20060809  Phil add sound control    
-------------------------------------------------------------------------*/
			if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV)			
			{
				twdDelay(10);
			    AV_AUDIO_SW1 = OFF;
				TV_AUDIO_SW2 = ON;
				SV_AUDIO_SW3 = OFF;			
			    twdDelay(10);
				AUDIO_STBY = OFF;
			    twdDelay(10);
				AUDIO_MUTE = OFF;   //Play
			}
			if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeCVBS)
			{
				twdDelay(10);
			    AV_AUDIO_SW1 = ON;
				TV_AUDIO_SW2 = OFF;
				SV_AUDIO_SW3 = OFF;
			    twdDelay(10);
				AUDIO_STBY = OFF;	
			    twdDelay(10);
				AUDIO_MUTE = OFF;   //Play

			}
			if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
			{
				twdDelay(10);
			    AV_AUDIO_SW1 = OFF;
				TV_AUDIO_SW2 = OFF;
				SV_AUDIO_SW3 = ON;	
			    twdDelay(10);
				AUDIO_STBY = OFF;
			    twdDelay(10);
				AUDIO_MUTE = OFF;   //Play
				
			}			
/*-------------------------------------------------------------------------
20060809  Phil add sound control    
-------------------------------------------------------------------------*/							
		}

    }
	NoSignal= tmp;
}

//#endif
void LoadGammaTable(uCHAR cGammaModeID)
{
#ifdef GAMMADAT_Default
/*
	uCHAR 	c;
	uCHAR *p=pcGammaData[cGammaModeID];

	//disable I2C Auto_Inc_Address
  	I2CWriteByte(TW803_P0,TW_INTERFACE,I2CReadByte(TW803_P0,TW_INTERFACE)&~AUTO_INC);
  	//I2CWriteByte(TW803_P0,IMG_FUN_CTRL,I2CReadByte(TW803_P0,IMG_FUN_CTRL)&GAMMA_RGB);   // mark by Sherman 06'01'11
  	I2CWriteByte(TW803_P0,GAMMA_ADDR,0x00);

  	for(i=0;i<GAMMA_TABLE_DATA_SIZE;i++) {
		c=*p++;
		I2CWriteByte(TW803_P0,GAMMA_DATA,c);
	}
		//11.13 I2CWriteByte(TW803_P0,GAMMA_DATA,pcGammaDataRGB[cGammaModeID][i]);
*/		
#else
  int i;
	uCHAR j,k;
	//uCHAR code **ppcGm;
	uCHAR *pcGm;

	for(j=0,k=3;j<3;j++,k--)
	{
  		pcGm=(uCHAR *)pcGammaData[j+cGammaModeID*GAMMA_PNUM];
	  	I2CWriteByte(TW803_P0,IMG_FUN_CTRL,(I2CReadByte(TW803_P0,IMG_FUN_CTRL)& ~GAMMA_CTL_MSK)|(k<<6));
  		I2CWriteByte(TW803_P0,GAMMA_ADDR,0x00);
  		for(i=0;i<GAMMA_TABLE_DATA_SIZE;i++)
		   I2CWriteByte(TW803_P0,GAMMA_DATA,pcGm[i]);		  

  	}
#endif // GM_RGB_ALL_SAME

  I2CWriteByte(TW803_P0,TW_INTERFACE,I2CReadByte(TW803_P0,TW_INTERFACE)|AUTO_INC);
#ifdef EnableGamma
  I2CWriteByte(TW803_P0,IMG_FUN_CTRL,I2CReadByte(TW803_P0,IMG_FUN_CTRL)|ENGAMMA);
#else
  I2CWriteByte(TW803_P0,IMG_FUN_CTRL,I2CReadByte(TW803_P0,IMG_FUN_CTRL)&~ENGAMMA); //Disable Gamma
#endif
    return;
}


/*   C L O S E   P A N E L   */
/*-------------------------------------------------------------------------
   ignore and block the input vsync triggering the output vsync ,
   display user define color in panel
-------------------------------------------------------------------------*/
void ClosePanel(uCHAR uR, uCHAR uG, uCHAR uB)
{
		I2CWriteByte(TW803_P0, 0xC2, I2CReadByte(TW803_P0, 0xC2)|(PSYNC_STR|IGNORE_VSYNC));
		I2CWriteByte(TW803_P0, 0x9d, uR);
		I2CWriteByte(TW803_P0, 0x9e, uG);
		I2CWriteByte(TW803_P0, 0x9f, uB);
		I2CWriteByte(TW803_P0, PATTERN_CTRL, 0x87);//enable frame background color 
		I2CWriteByte(TW803_P0, 0xe2, 0x11);   //enable registers shadow control,sync all shadow registers

}

void OpenPanel(void)
{
#ifdef lucy_edition
        m_bPanelClose = 0;
#endif
  		I2CWriteByte(TW803_P0, 0xC2, I2CReadByte(TW803_P0, 0xC2)&~(PSYNC_STR|IGNORE_VSYNC));
		I2CWriteByte(TW803_P0, PATTERN_CTRL, I2CReadByte(TW803_P0, PATTERN_CTRL)&~0x80); //Disable Frame Background Color
}


// kenny 20060512
#ifdef IR_DECODE
void IR_Init(void)
{
	I2CWriteByte(TW803_P0 + 2, 0x40, 0x10);
	I2CWriteByte(TW803_P0 + 2, 0x41, 0x3B);
	I2CWriteByte(TW803_P0 + 2, 0x47, 0x80);

	// turn on IR intterrupt
	I2CWriteByte(TW803_P0, 0x33, I2CReadByte(TW803_P0, 0x33) & 0x3F);
	I2CWriteByte(TW803_P0, 0x32, I2CReadByte(TW803_P0, 0x32) & 0xFF);
}
#endif
// kenny 20060512

⌨️ 快捷键说明

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