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

📄 videosourceswitch.c

📁 T108 LCD屏的DEMO源代码!需要的就下吧
💻 C
字号:
#include "Common.h"
#include "Global.h"
#include "ICControl.h"	
#include "VideoSourceSwitch.h"
#include "System.h"
#include "SRC_ctrl.h"
#include "TWICreg.h"
#include "Timer0.h"
#include "TxxInitTable.h"
#include "VideoDetect.h"	
Source code uiaSrcMux1[]={
{0x0100, itypeCVBS,   isrcVIDEO    },
{0x1406, itypeSVIDEO, isrcVIDEO    },
#ifdef PC_MODE
{0x2A24, itypeRGB,    isrcANALOG   },
#endif
#ifdef YPbPr
{0x2824, itypeYPBPR,  isrcVIDEO    },
#endif
#ifdef DIGI_AVAILABLE
{0x0100, itypeRGB565, isrcDIGITAL  },
{0x2824, itype656,    isrcDIGITAL  },
#endif
};
void SourceSelect(void)
{
   	
   	ClosePanel(0x10, 0xff, 0x40);	// blue screen
   	if((EepPublic.cSource==0)||(uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)||(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO))
    {
		SetSignalStd();             //set the chroma and the comb filter
	    SetOPTiming();              //set the scaler,line buffer,output PLL,display window
    }
	
	IC_WritByte(TWIC_P0,0x0f,0x70);   //for position shift,ADC Power Down Control
	IC_WritByte(TWIC_P0,0x0f,0x00);   //for position shift
	IC_WritByte(TWIC_P0,0x31,0x00);   //Source Select Reg, Clear All.
	IC_WritByte(TWIC_P0,0x1a, 0x87);  //ADC Analog AGC Selection,dynamic gain


	if(uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcVIDEO)
	{
		IC_WritByte(TWIC_P0,0x10, IC_ReadByte(TWIC_P0, 0x10)&~0x10);
		IC_WritByte(TWIC_P0,0x18, uiaSrcMux1[EepPublic.cSource].ADCMUX>>8);  // cMux1);
		IC_WritByte(TWIC_P0,0x19, uiaSrcMux1[EepPublic.cSource].ADCMUX&0xFF);  // cMux2);
	    IC_WritByte(TWIC_P0,0x31, 0x04);	//Select VD input
		if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
		{	
			
			IC_WritByte(TWIC_P0,0x11, 0x0d);
						
			IC_WritByte(TWIC_P2,0x07, 0x06|0x20);		
			IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)|0x01);
			IC_WritByte(TWIC_P2,0x01, IC_ReadByte(TWIC_P2,0x01)&~ENYPbPr);
			IC_WritByte(TWIC_P0,0x16, 0xD3);   //Line Lock PLL Divider Reg
 			IC_WritByte(TWIC_P2,0x03, IC_ReadByte(TWIC_P2,0x03)|0x03);
		
			IC_WritByte(TWIC_P0,0x17, 0x4C); // kenny 20060627

			twdDelay(500);
			//m_cBuff[0]= IC_ReadByte(TWIC_P2, 0x3A);
			//if((m_cBuff[0]&0x06)==0x06)
			if((IC_ReadByte(TWIC_P2, 0x3A)&0x06)==0x06)
			{
	  			NoSignal=0;
				if(m_bPanelClose==1) //sm061011
					OpenPanel();				

			}			
		}
		else if((uiaSrcMux1[EepPublic.cSource].VideoType==itypeCVBS))
		{	// CVBS
			
			if(EepPublic.cSource==1)
				IC_WritByte(TWIC_P0,0x11, 0x08);
			else if(EepPublic.cSource==2)
				IC_WritByte(TWIC_P0,0x11, 0x04);
			else if(EepPublic.cSource==3)
				IC_WritByte(TWIC_P0,0x11, 0x00);
			
			IC_WritByte(TWIC_P2,0x07, 0x21);//0x05|0x22);
			IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0xfe);
			IC_WritByte(TWIC_P2,0x01, IC_ReadByte(TWIC_P2,0x01)&~ENYPbPr);
			IC_WritByte(TWIC_P0,0x16, 0xD3);//Line Lock PLL Divider Reg
			IC_WritByte(TWIC_P2,0x07, 0x02|0x20);
			if(m_cChroma==S_NTSC_4)  
				IC_WritByte(TWIC_P2,0x03, IC_ReadByte(TWIC_P2,0x03)&0xf8|0x03);
			else
				IC_WritByte(TWIC_P2,0x03, IC_ReadByte(TWIC_P2,0x03)&0xfc);

			twdDelay(500);

			if((IC_ReadByte(TWIC_P2, 0x3A)&0x06)==0x06)
			{
	  			NoSignal=0;
				if(m_bPanelClose==1)  //sm061011
					OpenPanel();
		
			}	
		}
		else if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeYPBPR)
		{
 			IC_WritByte(TWIC_P0,0x11, 0x55);
			IC_WritByte(TWIC_P2,0x07, 0x20);
			IC_WritByte(TWIC_P2,0x01, IC_ReadByte(TWIC_P2,0x01)|ENYPbPr);
		}  

	}
	else if(uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcANALOG)	 //rouce route videodecoder
	{
			IC_WritByte(TWIC_P0,0x18, uiaSrcMux1[EepPublic.cSource].ADCMUX>>8);  // cMux1);
			IC_WritByte(TWIC_P0,0x19, uiaSrcMux1[EepPublic.cSource].ADCMUX&0xFF);  // cMux2);
			IC_WritByte(TWIC_P2,0x07, 0x06&~0x20);
			
	 		if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB)
			{
				IC_WritByte(TWIC_P0,0x16, 0x00);
				IC_WritByte(TWIC_P0,0x31, 0x08);	//Select SDC RGB, SOY input.
				IC_WritByte(TWIC_P0,0x40, 0xC2);
				IC_WritByte(TWIC_P0,0x17, 0xC8);
				IC_WritByte(TWIC_P0,0x1A, IC_ReadByte(TWIC_P0,0x1A)&0xF8);
				//~ Enable Interrupt ~//
				IC_WritByte(TWIC_P0,0x33, 0xB0);
				IC_WritByte(TWIC_P0,0x32, 0xFF);
				IC_WritByte(TWIC_P0,0x37, 0x40);
				IC_WritByte(TWIC_P0,0x39, 0x10);
				twdDelay(50);        // For H/W stable.
			}
						
	}
#ifdef DIGI_AVAILABLE	
	else if(uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcDIGITAL)
	{
		if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)
		{
			IC_WritByte(TWIC_P0,0x16, 0xD3);
			IC_WritByte(TWIC_P0,0x40, 0xC2);
			IC_WritByte(TWIC_P0,0x17, 0xC8);
			IC_WritByte(TWIC_P0,0xfe, 0x58);
			SRC_565();
		}else if (uiaSrcMux1[EepPublic.cSource].VideoType==itype656)
		{
			IC_WritByte(TWIC_P0,0xfe, 0xa8);
			SRC_656();
		}
	}
#endif

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




/*   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)
-------------------------------------------------------------------------*/
void SetSignalStd(void)
{
	uCHAR RegIdx,ValIdx;//ruby,ChromaIdx;

	IC_WritByte(TWIC_P2, 0x3f, 0x01);  // reset comb filter //add by Sherman 06'01'16

	ValIdx=m_cChroma*SignalStdRegP2Cnt;	// S_NTSC=0x00
	for (RegIdx=0; RegIdx<SignalStdRegP2Cnt; RegIdx++, ValIdx++){
		IC_WritByte(TWIC_P2, ucaSignalStdRegP2[RegIdx], ucaSignalStdValP2[ValIdx]);
	}

	twdDelay(100);		 				
	IC_WritByte(TWIC_P2, 0x3f, 0x00); 
	SetIPVideoType();
}



/*   S E T   O   P   T I M I N G   */
/*-------------------------------------------------------------------------
    set the scaler,line buffer,output PLL,display window
-------------------------------------------------------------------------*/
void SetOPTiming(void)
{


		if((m_cStandard==S_NTSC)||(m_cStandard==S_NTSC_4)||(m_cStandard==S_PAL_M))
		{
			// kenny 20060512 ====================================================

			m_cBuff[0]=0;
			m_cBuff[1]=stInitOUT_T[0].ucRegAdr;
			while (m_cBuff[1] != 0xBF)
			{
				IC_WritByte(TWIC_P0,m_cBuff[1],stInitOUT_T[m_cBuff[0]].ucRegVal);
				m_cBuff[1]=stInitOUT_T[++m_cBuff[0]].ucRegAdr;
			}

//kenny 20060721
#ifdef TCON
			
	  		IC_WritByte(TWIC_P0, 0xe0, IC_ReadByte(TWIC_P0,0xe0)|0x01);// 0xb9);         
#else

//kenny 20060721
			IC_WritByte(TWIC_P0, 0xe0, IC_ReadByte(TWIC_P2,0xe0)&~0x01);// 0xb9);         	  		
#endif
			IC_WritByte(TWIC_P0, 0xe2, 0x11);

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

			//m_wBuff[1]=(uWORD)(m_cScaleratio)*P0ScaleAdrCnt;
			m_wBuff[1]=0*P0ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P0ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TWIC_P0, ucaZoomAdrP0[m_wBuff[0]], ucaZoomDataP0_NTSC[m_wBuff[1]]);
			}
			//m_wBuff[1]=(uWORD)(m_cScaleratio)*P2ScaleAdrCnt;
		    m_wBuff[1]=0*P2ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P2ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TWIC_P2, ucaZoomAdrP2[m_wBuff[0]], ucaZoomDataP2_NTSC[m_wBuff[1]]);
			}
		
			#ifdef SimulateSTH
			m_wBuff[1]=m_cScaleratio*P1ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P1ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TW803_P1, ucaZoomAdrP1[m_wBuff[0]], ucaZoomDataP1_NTSC[m_wBuff[1]]);
			}
			#endif

		}
		else
		{
			//m_wBuff[1]=(uWORD)(m_cScaleratio)*P0ScaleAdrCnt;
			m_wBuff[1]=0*P0ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P0ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TWIC_P0, ucaZoomAdrP0[m_wBuff[0]], ucaZoomDataP0_PAL[m_wBuff[1]]);
			}
			//m_wBuff[1]=(uWORD)(m_cScaleratio)*P2ScaleAdrCnt;
			m_wBuff[1]=0*P2ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P2ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TWIC_P2, ucaZoomAdrP2[m_wBuff[0]], ucaZoomDataP2_PAL[m_wBuff[1]]);
			}
			// Add by Sherman 06'01'06
			#ifdef SimulateSTH
			m_wBuff[1]=m_cScaleratio*P1ScaleAdrCnt;
			for (m_wBuff[0]=0; m_wBuff[0]<P1ScaleAdrCnt; m_wBuff[0]++, m_wBuff[1]++){
				IC_WritByte(TW803_P1, ucaZoomAdrP1[m_wBuff[0]], ucaZoomDataP1_PAL[m_wBuff[1]]);
			}
			#endif
			// end of add by Sherman
		}

	IC_WritByte(TWIC_P0, 0xe2, 0x11);
}


/*   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)
-------------------------------------------------------------------------*/
void SetIPVideoType(void)
{
	if(m_cChroma==S_NTSC){
		m_wVTotal=525;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01);
		IC_WritByte(TWIC_P2,0x01, IC_ReadByte(TWIC_P2,0x01)|0x09);
		if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
				IC_WritByte(TWIC_P2,0x03, 0x03);
		else 	IC_WritByte(TWIC_P2,0x03, 0x00);
	}
	else if(m_cChroma==S_PAL){
		m_wVTotal=625;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01|0x32);
		IC_WritByte(TWIC_P2,0x01, IC_ReadByte(TWIC_P2,0x01)|0x08);
		IC_WritByte(TWIC_P2,0x03, IC_ReadByte(TWIC_P2,0x03)&0x01|0x02);
	}
	else if(m_cChroma==S_SECAM){
		m_wVTotal=625;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01|0x28);
		IC_WritByte(TWIC_P2,0x03, IC_ReadByte(TWIC_P2,0x03)&0x01|0x02);
	}
	else if(m_cChroma==S_PAL_M){
		m_wVTotal=525;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01|0x04);
	}
	else if(m_cChroma==S_PAL_CN){
		m_wVTotal=625;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01|0x26);
	}
	else if(m_cChroma==S_NTSC_4){
		m_wVTotal=525;
		IC_WritByte(TWIC_P2,0x00, IC_ReadByte(TWIC_P2,0x00)&0x01|0x00);
		if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeSVIDEO)
				IC_WritByte(TWIC_P2,0x03, 0x03);
		else 	IC_WritByte(TWIC_P2,0x03, 0x03);
	}

}
//#ifdef AUTO_DETECT
void Detect_Sig(bit detect)
{
	m_cBuff[0]=1;
			  

	if ((uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB565)|(uiaSrcMux1[EepPublic.cSource].VideoType==itype656))
	{
		IC_WritByte(TWIC_P0, 0x33,0x00);
		twdDelay(50);
	    IC_WritByte(TWIC_P0, 0x32,0x3f);
		twdDelay(50);
		m_cBuff[0]=IC_ReadByte(TWIC_P0, 0x32);    //interrupt status register		
		m_cBuff[0] &= 0x01;             //if lost vsync
	}
 
	if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeRGB)
	{
//	    m_cBuff[0]=!SyncChangDect();
	}

	if (uiaSrcMux1[EepPublic.cSource].SourceRoute==isrcVIDEO)
	{
	    m_cBuff[0]=IC_ReadByte(TWIC_P2, 0x3A)&0x01;        // if signal detected
	}

	if(m_cBuff[0])  // No signal
	{
		if((detect)||(NoSignal!=m_cBuff[0]))  // When switch to signal lost input or Signal lost
		{
			Timer0Stop();
			ClosePanel(0x10, 0xff, 0x40);				
		}
	}
	else
	{
		if((detect)|| (NoSignal!=m_cBuff[0]))  //When video switch and signal is normal
		{
			OpenPanel();
		}	
    }
	NoSignal= m_cBuff[0];
}
//#endif //AUTO_DETECT

⌨️ 快捷键说明

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