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

📄 t103_util.c

📁 这是T118和T103的通用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
				I2CWriteByte(TW803_P0,0x40, 0xC2);
				I2CWriteByte(TW803_P0,0x17, 0xC8);
				SRC_565();
			}
			}
#ifdef DIGI_AVAILABLE
			else if(uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcDIGITAL)
			{
				if (uiaSrcMux1[EepPublic.cSource].VideoType==itype656)
				{
					SRC_656();
				}
			}
#endif

	if(uiaSrcMux1[EepPublic.cSource].SourceRoute!=isrcVIDEO)	
 		Detect_Sig(1);                 //tune sound control 20060809
	
	I2CWriteByte(TW803_P0, 0xE2, 0x11);
}


/*   D E T E C T   S I G N A L   S T D   */
/*-------------------------------------------------------------------------
    if h/v locked 
       setOPTiming
        if color detected and chroma locked 
           SetSignalStd
  Register affected:P2_0x83(Comb Lock Configuration Reg)
-------------------------------------------------------------------------*/
void DetectSignalStd(void)
{
	uCHAR index=0,SlaveAddr,RegAddrShift;
#ifdef T515
	if(EepPublic.cSource >= isrc_T515_CVIDEO1){
		 SlaveAddr=0xb8;
		 RegAddrShift=0x20;
	}else{
		 SlaveAddr=TW803_P2;
		 RegAddrShift=0x00;
	}
#else
	SlaveAddr=TW803_P2;
	RegAddrShift=0x00;
#endif

	m_cBuff[0]=m_cStandard;
	m_cBuff[1]=I2CReadByte(SlaveAddr, 0x3A+RegAddrShift);   //read video status registers
	if(I2CReadByte(SlaveAddr, 0x3A+RegAddrShift)&0x06)		// Judge vlock and hlock
	{
		//if(I2CReadByte(SlaveAddr, 0x7B+RegAddrShift)>0x10){//  For no chroma case
			//twdDelay(50);
		//~~~~~~~ set OPTiming ~~~~~~~~~~~~~~~~~~~//
		if(I2CReadByte(TW803_P0,0x59) <= 0xd6)     //read hsync period MSB Register 20060809
			m_cBuff[0]=S_NTSC;
		else
			m_cBuff[0]=S_PAL;

		#ifdef T515
        if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1){
            m_cBuff[0] = I2CReadByte(TW515, 0x5c)&0x04;
			if((I2CReadByte(TW515, 0x5c)&0x07)==0)
				m_cBuff[0]=S_NTSC;
            else if(I2CReadByte(TW515, 0x5c)&0x02)
				m_cBuff[0]=S_SECAM;
       		else if(I2CReadByte(TW515, 0x5c)&0x04)
				m_cBuff[0]=S_PAL;
			else
				m_cBuff[0]=0xff;
		}
		#endif
		if((m_cStandard!=m_cBuff[0]))
		{	// signal std was changed,and output timing must be set again
			m_cStandard=m_cBuff[0];
			SetOPTiming();
    	}
		//~~~~~~~ End of set OPTiming ~~~~~~~~~~~~~~~~~~~//

		//~~~~~~~ set Chroma ~~~~~~~~~~~~~~~~~~~//
		m_cBuff[4]=m_cChroma;
#ifdef T515
        if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1)
		{
            m_cBuff[4] = I2CReadByte(TW515, 0x5c)&0x04;
		    //else if((EepPublic.cSource&0x0f) >= isrc_T515_CVIDEO1)
			{
			if((I2CReadByte(TW515, 0x5c)&0x07)==0)
				m_cBuff[4]=S_NTSC;
            else if(I2CReadByte(TW515, 0x5c)&0x02)
				m_cBuff[4]=S_SECAM;
       		else if(I2CReadByte(TW515, 0x5c)&0x04)
				m_cBuff[4]=S_PAL;
			else
				m_cBuff[4]=0xff;
		}
#endif
		twdDelay(25);
		// Set Chroma lock configration
		//if(I2CReadByte(TW803_P0,0x59) <= 0xd6)
		//	  I2CWriteByte(SlaveAddr, 0x83+RegAddrShift, 0x39);//6f);  // NTSC	  // change by Sherman 06'02'07
		//else
		I2CWriteByte(SlaveAddr, 0x83+RegAddrShift, 0x39);  // chroma is killed whenever chromlock is lost,lose chromalock level = 4,lose chromalock count = 3
		twdDelay(50);

		if(I2CReadByte(TW803_P0,0x59) <= 0xd6)
		{ // NTSC-M,NTSC-4,PAL-M
			m_wBuff[2]=0;
			m_cBuff[1]=m_cChroma;	// Preserve previous status for signal std
			twdDelay(150);	  		// add by Sherman 06'01'16
		    while (1)
			{	// NTSC-M=1,NTSC-4=4,PAL-M=5
				if (m_cChroma == S_NTSC_4)
				{
					if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08)&&(I2CReadByte(SlaveAddr, 0x7a+RegAddrShift)<0x80))
						break;     //T103 has no register 0x7a at Page 2?
				}
				if ((m_cChroma == S_NTSC)||(m_cChroma == S_PAL_M))
				{
					if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08))
						break;   //reg0x3a at page 2 locked chroma pll burst
			    }

				do
				{
					m_cChroma++;
					if(m_cChroma>=S_PAL_M)
						m_cChroma=S_NTSC;
				}while(((1<<m_cChroma)&SignalDefine)==0x00);

				SetSignalStd();					// Set Signal flag and DTO
				twdDelay(50);

				if ((++m_wBuff[2]) >4) break; 	// Avoid while setting, input switch to NTSC
			}
		}
		else
		{  // PAL-BD,PAL-CN,SECAM

#if (defined YPbPr)
			if(EepPublic.cSource == isrYPbPr)
				m_cBuff[4]=S_PAL;
			else {
#endif
			m_wBuff[2]=0;
			m_cBuff[1]=m_cChroma;	// Preserve previous status for signal std
			twdDelay(150);	  		// add by Sherman 06'01'16
			while (1)
			{	// PAL-BD=2,PAL-CN=6,SECAM=3
				if ((m_cChroma == S_PAL)||(m_cChroma == S_PAL_CN))
				{
					if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08) && (I2CReadByte(SlaveAddr, 0x3c+RegAddrShift)&0x01==1))//&& (I2CReadByte(SlaveAddr, 0x7d+RegAddrShift)>0xf0))
							break;       //chroma PLL locked to color burst and PAL color Mode detected
				}
				if (m_cChroma == S_SECAM)
				{
					if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08) && (I2CReadByte(SlaveAddr, 0x7d+RegAddrShift)>0xf0))
						break;        //T103 seems have no reg 0x7d at page 2?
				}

				do
				{
					m_cChroma++;
					if(m_cChroma>=S_END)
		 			   	m_cChroma=S_PAL;
				}while(((1<<m_cChroma)&SignalDefine)==0x00);

				SetSignalStd();					// Set Signal flag and DTO
				twdDelay(50);
				if ((++m_wBuff[2]) >4) break; 	// Avoid while setting, input switch to NTSC
			}
#if (defined YPbPr)
		  	}
#endif
		}
		if (m_cBuff[1] != m_cChroma)
		{
			if ((I2CReadByte(SlaveAddr, 0x3a+RegAddrShift)&0x08))
				m_cBuff[4] = m_cChroma;
			m_cChroma=m_cBuff[1] ;
		}
		if((m_cChroma!=m_cBuff[4]))
		{
			m_cChroma=m_cBuff[4];
    	}
	}
}


/*   S E T   S I G N A L   S T D   */
/*-------------------------------------------------------------------------
    set chroma agc(P20x0c),chroma DTO increment0,1,2,3,(P20x18,19,1a,1b)
    and Comb Filter Configuration(P20x82) according to m_cChroma
-------------------------------------------------------------------------*/
void SetSignalStd(void)
{
	uCHAR RegIdx,ValIdx;//ruby,ChromaIdx;

	I2CWriteByte(TW803_P2, 0x3f, 0x01);  // reset comb filter //add by Sherman 06'01'16
#ifdef T515
 	if ( (EepPublic.cSource&0x0F)<  isrc_T515_CVIDEO1){
#endif
	ValIdx=m_cChroma*SignalStdRegP2Cnt;	// S_NTSC=0x01
		for (RegIdx=0; RegIdx<SignalStdRegP2Cnt; RegIdx++, ValIdx++){
			I2CWriteByte(TW803_P2, ucaSignalStdRegP2[RegIdx], ucaSignalStdValP2[ValIdx]);
		}
#ifdef T515
	}else	T515_NTSC_PAL();
#endif
	twdDelay(100);		 				// add by Sherman 06'01'16
	I2CWriteByte(TW803_P2, 0x3f, 0x00);  // add by Sherman 06'01'16
	SetIPVideoType();
}


#ifdef FIX_OUTPUT_TIMING
/*   S E T   O   P   T I M I N G   */
/*-------------------------------------------------------------------------
    set the scaler,line buffer,output PLL,display window
-------------------------------------------------------------------------*/
void SetOPTiming(void)
{
	uWORD ucAdrIdx,ucDataIdx;
	uCHAR RegIndex,RegAdr;

	if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)
	{
		ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
		for (ucAdrIdx=0; ucAdrIdx<sizeof(ucaZoomAdrP0_RGB565)/sizeof(uCHAR); ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P0, ucaZoomAdrP0_RGB565[ucAdrIdx], ucaZoomDataP0_RGB565[ucDataIdx]);
		}
	}
	else
	{
		if((m_cStandard==S_NTSC)||(m_cStandard==S_NTSC_4)||(m_cStandard==S_PAL_M))
		{
			// kenny 20060512 ====================================================

			RegIndex=0;
			RegAdr=stInitOUT_T[0].ucRegAdr;
			while (RegAdr != 0xBF)
			{
				I2CWriteByte(TW803_P0,RegAdr,stInitOUT_T[RegIndex].ucRegVal);
				RegAdr=stInitOUT_T[++RegIndex].ucRegAdr;
			}

//kenny 20060721
#ifdef TCON
	  		I2CWriteByte(TW803_P0, 0xe0, 0xb9);         //power management control
#else
	#ifdef __AU_7_DIGITALSONY__
	  		I2CWriteByte(TW803_P0, 0xC1, 0xc0);
	#endif
//kenny 20060721

	  		I2CWriteByte(TW803_P0, 0xe0, 0xb8);
#endif
			I2CWriteByte(TW803_P0, 0xe2, 0x11);

			// kenny 20060512 ====================================================

			ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
			for (ucAdrIdx=0; ucAdrIdx<P0ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
				I2CWriteByte(TW803_P0, ucaZoomAdrP0[ucAdrIdx], ucaZoomDataP0_NTSC[ucDataIdx]);
		}
		ucDataIdx=m_cScaleratio*P2ScaleAdrCnt;

		for (ucAdrIdx=0; ucAdrIdx<P2ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P2, ucaZoomAdrP2[ucAdrIdx], ucaZoomDataP2_NTSC[ucDataIdx]);
		}
		// Add by Sherman 06'01'06
		#ifdef SimulateSTH
		ucDataIdx=m_cScaleratio*P1ScaleAdrCnt;
		for (ucAdrIdx=0; ucAdrIdx<P1ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P1, ucaZoomAdrP1[ucAdrIdx], ucaZoomDataP1_NTSC[ucDataIdx]);
		}
		#endif

	}
	else{
		ucDataIdx=m_cScaleratio*P0ScaleAdrCnt;
		for (ucAdrIdx=0; ucAdrIdx<P0ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P0, ucaZoomAdrP0[ucAdrIdx], ucaZoomDataP0_PAL[ucDataIdx]);
		}
		ucDataIdx=m_cScaleratio*P2ScaleAdrCnt;
		for (ucAdrIdx=0; ucAdrIdx<P2ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P2, ucaZoomAdrP2[ucAdrIdx], ucaZoomDataP2_PAL[ucDataIdx]);
		}
		// Add by Sherman 06'01'06
		#ifdef SimulateSTH
		ucDataIdx=m_cScaleratio*P1ScaleAdrCnt;
		for (ucAdrIdx=0; ucAdrIdx<P1ScaleAdrCnt; ucAdrIdx++, ucDataIdx++){
			I2CWriteByte(TW803_P1, ucaZoomAdrP1[ucAdrIdx], ucaZoomDataP1_PAL[ucDataIdx]);
		}
		#endif
		// end of add by Sherman
	}
}
	I2CWriteByte(TW803_P0, 0xe2, 0x11);
}
#else
void SetOPTiming(void)
{
	uWORD wDVTotal, wDHTotal, wDVBILK, wTemp;
	uCHAR LLCK_Divider;
	float Temp;

	IRScaleratioCtrl();
	Scaling();

	if((I2CReadByte(TW803_P0, 0xcb)&0x0f)>1)
		LLCK_Divider=I2CReadByte(TW803_P0, 0xcb)&0x0f ;
	else
		LLCK_Divider=1;
	LLCK_Divider=1;	//
	//Calculate PH_TOT and PV_TOT
	if(m_cStandard==S_NTSC){
		wDHTotal=1716.0*m_wVRes*(DNDIV_40/LLCK_Divider)/DWVSZ;
		wDVTotal=((DNDIV_40/LLCK_Divider)*27000.0/(60.0*623.0))*1000.0;
	}
	else if((m_cStandard==S_PAL)||(m_cStandard==S_SECAM)){
		wDHTotal=1728.0*m_wVRes*(DNDIV_40/LLCK_Divider)/DWVSZ;
		wDVTotal=((DNDIV_40/LLCK_Divider)*27000.0/(50.0*576.0))*1000.0;
	}

	m_dwBuff[1]=I2CReadByte(TW803_P0, 0x83);
	m_dwBuff[1] <<= 8;
	m_dwBuff[1]=I2CReadByte(TW803_P0, 0x82);
	m_dwBuff[1] <<= 8;
  	m_dwBuff[1] |= I2CReadByte(TW803_P0, 0x81);
	wDVBILK=m_dwBuff[1];

	// Calculate back porch "DWHS"
	wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2;
	I2CWriteByte(TW803_P0, 0xB0, wTemp);
	I2CWriteByte(TW803_P0, 0xB1, wTemp>>8);//Hoizontal back porch

	// Calculate back porch "DWHS"
	//wTemp =wDVBILK/(wDHTotal*(DNDIV_40/LLCK_Divider))-DISP_DFLT_VSWIDTH;
	I2CWriteByte(TW803_P0, 0xB2, DWVSST);
	I2CWriteByte(TW803_P0, 0xB3, DWVSST>>8);//Vertical back porch

	I2CWriteByte(TW803_P0, 0xB4,(uCHAR)(m_wDWHSZ));
	I2CWriteByte(TW803_P0, 0xB5,(uCHAR)(m_wDWHSZ>>8));//Horizontal width
	I2CWriteByte(TW803_P0, 0xB8,(uCHAR) wDHTotal);
	I2CWriteByte(TW803_P0, 0xB9,(uCHAR)(wDHTotal>>8));//Htotal
	I2CWriteByte(TW803_P0, 0xBA,(uCHAR) wDVTotal);
	I2CWriteByte(TW803_P0, 0xBB,(uCHAR)(wDVTotal>>8));//Vtotal
	I2CWriteByte(TW803_P0, 0xBC,(uCHAR) DISP_DFLT_HSWIDTH);
	I2CWriteByte(TW803_P0, 0xBD,(uCHAR)(DISP_DFLT_HSWIDTH>>8));//HSYNC Width
	I2CWriteByte(TW803_P0, 0xBE,(uCHAR) DISP_DFLT_VSWIDTH);

⌨️ 快捷键说明

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