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

📄 modehandle.c

📁 车载DVD的主控MCU的源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
				WriteIIC563(0x1a9,0x3c);	//added by kevin y50321
				GetMode();

				if(SyncMode == 3)
				{
					if(Hresolution <= 800)// joe 2005/5/3 for dvi 800x600@56 color dot 
					{
						WriteIIC563(0x144,0x04);//Jacky 20041221 
						WriteIIC563(0x145,0x03);//Jacky 20041221 
					}
					else
					{
						WriteIIC563(0x145,0x00);//Jacky 20041221 
						WriteIIC563(0x144,0x00);

					}
				}

				
				SetDisplayNormal();
				WriteIIC563(0x158, PanelDethMode);
				PanelPowerUpSequence();
				I_OBackLightHigh;
				VideoMute = 0;
			}
		}
	}
}
void GetFuncRange(Byte Ptr)
{
	FuncMin = 0;
	switch(Ptr)
		{
		case pBRIGHTNESS:
			FuncMax = 100;
			//FuncMax = 255;
			break;
		case pCONTRAST:
			FuncMax = 100;
			//FuncMax = FuncBuf[pContMax];
			//FuncMin= FuncBuf[pContMin];
			break;
		case pPHASE:
			FuncMax = 0x3f;
			break;
		case pCLOCK:
			FuncMax = ClockBase + 50;
			FuncMin = ClockBase - 50;
			//FuncMax = ClockBase / 10 * 11;		///10%
			//FuncMin = ClockBase / 10 * 9;
			break;
		case pHPOSITION:
				FuncMin = 1;
			FuncMax = FuncBuf[pCLOCK] - Hresolution - 2;
			break;
		case pVPOSITION:
			FuncMin = 1;
			//FuncMax = VTotal > Vresolution ? VTotal - Vresolution : 12;	//test
			FuncMax = VTotal > Vresolution ? VTotal - Vresolution : 12;	//for は篜 ISSUE
			
			break;
		case pRCOLOR:
		case pGCOLOR:
		case pBCOLOR:
			FuncMax = 200;
			break;
		case pCOLORTEMP:
			FuncMax = MAX_COLOR_TEMP-1;
			break;
		case pLANGUAGE:
		case pSHARPNESS:
			if(FuncBuf[pVIDEOSOURCE]<2)
//			FuncMax = 31; // change by Kevin y50303
				FuncMax = 15; // change by Kevin y50303
			else
				FuncMax = 23; // change by Kevin y50303
			break;
		case pVIDEOSOURCE:
			if(Saa7114En)
				FuncMax = 4;
			else
				FuncMax = 2;
			break;
		case pVOLUME:
			FuncMax = 100;
			break;
		case pRADC:
		case pGADC:
		case pBADC:
			FuncMax = 255;
			break;
		case pROFFSET:
		case pGOFFSET:
		case pBOFFSET:
			FuncMax = 255;
			break;
		};
}
void CheckDVIresolution()
{
	Union Hf,Vf;
	if(SyncMode == 3){
		Vf.w = ReadWordIIC563(0x03e);
		Hf.w = ReadWordIIC563(0x03c);
//		CheckFreqRange(Hf.w>>8);
			Hresolution = Hf.w;
			Vresolution = Vf.w;
	}
}

void GetMode(void)
{
#if 1
	bit PolPass;
	Byte ch;
	Union Hf,Vf;
#endif	
	VTotal = (Word)(((unsigned long)H_SYNC * 1000)/ V_SYNC);
#if 1	
	for(ModePoint=0;ModePoint< T_Total_Mode_No;ModePoint++){
		Hf.b[0] = EEP_ModeMap[T_EEaddr_H_Freq_Hi_Byte];	//check h_sync
		Hf.b[1] = EEP_ModeMap[T_EEaddr_H_Freq_Low_Byte];
		Vf.b[0] = EEP_ModeMap[T_EEaddr_V_Freq_Hi_Byte];
		Vf.b[1] = EEP_ModeMap[T_EEaddr_V_Freq_Low_Byte];
		
		PolPass = 0;
		if(Vf.b[0] & 0x80)
			PolPass = 1;
		if((Vf.b[0] & 0x30) == HV_Pol)
			PolPass = 1;
		if(Vf.b[0] & 0x40){
			ch = (Vf.b[0] & 0x40) >> 1;
			ch |= ch >> 1;
			if(ch == HV_Pol)
				PolPass = 1;
		}
		if(PolPass){
			if(abs(Hf.w - H_SYNC)<3){
				Vf.b[0] &= 0x0f;
				if(abs(Vf.w - V_SYNC) < 10){
						break;
					}
				}
			}
		}
#endif		
/*
	if(ModePoint >=Graphic_Text_Mode_Start_No&&ModePoint <=Graphic_Text_Mode_End_No&&(SyncMode == 0 || SyncMode == 3)){
		GTmodeEn = 1;
		if(TextMode)
			ModePoint++;		//for set in text mode kevin y50202
	}else{
		GTmodeEn = 0;
	}
	if(ModePoint >= T_Total_Mode_No){
		NewMode = 1;
		SetUserMode();
	}else{
		NewMode = 0;
		}
*/	
	if(ModePoint >= 19)
		ModePoint = 11;
	LoadModeDependentSettings();
/*	
	if(ModePoint ==1)
		FuncBuf[pHPOSITION] = 0x96;//0x4B;
	else{
		FuncBuf[pHPOSITION] = 0x2e;//0x4B;
		FuncBuf[pVPOSITION] = 0x14;//0x4B;
	}
*/	
	ResolutionPtr = EEP_ModeMap[T_EEaddr_Resol]&0x7f;
	Hresolution = Active_Tab[Get_active_index()].H_Active;
	Vresolution = Active_Tab[Get_active_index()].V_Active;
	if(Vresolution>VTotal)
		Vresolution=VTotal-20;
	ClockBase = EEP_ModeMap[T_EEaddr_BaseHTotal];	//EEP_SyncMap[Addr+2];
	ClockBase <<= 8;
	ClockBase |=  EEP_ModeMap[T_EEaddr_BaseHTotal+1];	//[Addr+3];
	
	SetInterface();
	SetScaler();
//	SetADC_PLL();
	if(SyncMode < 3)	//skip setadcpll while in DVI mode
		{
		SetADC_PLL();
		SetADC_Phase();
		}
	else
		{
		CheckDVIresolution();
//		CheckDVIFreqRange();
		}
	if(SyncMode == 3)	//DVI
		{
		#if DVImode == DEmode
			//FuncBuf[pVPOSITION] = 0x1e0;	// for DE mode scaler shut down Jacky20040629
			FuncBuf[pVPOSITION] = 0;	// for DE mode scaler shut down Jacky20040629
			FuncBuf[pHPOSITION] = 0;
		//	SetDVI_Sharpness();
			WriteWordIIC563(0x030,FuncBuf[pVPOSITION]);
			WriteWordIIC563(0x02e,FuncBuf[pVPOSITION]);
			WriteWordIIC563(0x030,FuncBuf[pVPOSITION]);
			WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
		#else
			AutoPosition();
		#endif
		}	
	
//	SetVP();
//	SetHP();
	WriteIIC563(0x66,0x07);
//	SetSharpness();
}
/*
void SetUserMode(void)
{
#ifdef Wide19
code unsigned short Vt_Tab[]={
            490,590,610,730,778,800,874,910,970,1050,1080
};

code unsigned char UserTimeTab[]={
	T_Timing_Parameters(0x10,0x60,0x384,Re_0720x0400),
	T_Timing_Parameters(0x10,0x50,0x342,Re_0640x0480),
	T_Timing_Parameters(0x10,0x17,0x3b0,Re_0720x0576),
	T_Timing_Parameters(0x10,0x98,0x418,Re_0800x0600),
	T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0720),
	T_Timing_Parameters(0x12,0xc8,0x680,Re_1280x0768),
	T_Timing_Parameters(0x10,0xd0,0x540,Re_1024x0768),
	T_Timing_Parameters(0x10,0xd0,0x5c8,Re_1152x0864),
	T_Timing_Parameters(0x19,0xe8,0x778,Re_1440x0900),
	T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0960),
	T_Timing_Parameters(0x10,0xf8,0x698,Re_1280x1024),
	T_Timing_Parameters(0x2e,0x130,0x870,Re_1600x1200),
};
unsigned char i,j;
      for(i=0; i<11; i++){
            if(VTotal < Vt_Tab[i]){
                  break;
            }
      }
#else
code unsigned short Vt_Tab[]={
            490,590,610,730,778,874,970,1050,1080
};

code unsigned char UserTimeTab[]={
	T_Timing_Parameters(0x10,0x60,0x3a8,Re_0720x0400),
	T_Timing_Parameters(0x10,0x50,0x342,Re_0640x0480),
	T_Timing_Parameters(0x10,0x17,0x3b0,Re_0720x0576),
	T_Timing_Parameters(0x10,0x98,0x418,Re_0800x0600),
	T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0720),
	T_Timing_Parameters(0x10,0xd0,0x540,Re_1024x0768),
	T_Timing_Parameters(0x10,0xd0,0x5c8,Re_1152x0864),
	T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0960),
	T_Timing_Parameters(0x10,0xf8,0x698,Re_1280x1024),
	T_Timing_Parameters(0x2e,0x130,0x870,Re_1600x1200),
};
unsigned char i,j;
      for(i=0; i<9; i++){
            if(VTotal < Vt_Tab[i]){
                  break;
            }
      }
#endif	  
      j = i * T_Timing_Data_No;
      ModePoint = Read24C16(T_EEaddr_User_Start);
      if((ModePoint <T_Preset_Timing_No)||(ModePoint >=T_Total_Mode_No)){
            ModePoint = T_Preset_Timing_No;
      }
      Write24C16(T_EEaddr_User_Start,ModePoint+1);          //index to nextuser mode
      for(i=0; i<T_Timing_Data_No; i++){
            Write24C16(T_EEaddr_Mode_data+i,UserTimeTab[j+i]);
      }
      Write24C16(T_EEaddr_H_Freq_Hi_Byte,H_SYNC >> 8);
      Write24C16(T_EEaddr_H_Freq_Low_Byte,(Byte)H_SYNC);
      Write24C16(T_EEaddr_V_Freq_Hi_Byte,(V_SYNC >> 8)|HV_Pol);
      Write24C16(T_EEaddr_V_Freq_Low_Byte,V_SYNC);
      ResolutionPtr = Read24C16(T_EEaddr_Resol)&0x7f;
}
*/
/*==========================================
==========================================*/


void CheckModeChange(void)
{

	unsigned char temp;
	if(DetectIRQ() || ChangeMode>0){
			temp = ReadIIC563(0x1ab);
			if((temp & 0x3c) != 0){
				BackLightOff();
				Abort = 1;
				H_SYNC_Temp = 0xffff;
				V_SYNC_Temp = 0xffff;
			}
			
			temp = ReadIIC563(0x19a);
			if(((SyncMode > 0)&&(SyncMode < 3))||((SyncMode > 4)&&(SyncMode < 7))){ 	//compostive
				if((temp & BIT_5) == 0){
					BackLightOff();
					Abort = 1;
					H_SYNC_Temp = 0xffff;
					V_SYNC_Temp = 0xffff;
					return;
				}
			}else{
				if((temp & 0x18) != 0x18){
					BackLightOff();
					Abort = 1;
					H_SYNC_Temp = 0xffff;
					V_SYNC_Temp = 0xffff;
					return;
				}
			}
	}
}

bit VsyncValide()
{
/*
	Word VsyncWidth;
	LocalTimer = 2;	//20ms
	while(!V_SyncPresent)	//Vsync Lo
		{
		if(LocalTimer == 0)
			return 0;
		}
	LocalTimer = 10;	//100ms
	while(V_SyncPresent)	//Vsync Hi
		{
		if(LocalTimer == 0)
			return 0;
		}
	VsyncWidth = 0;
	while(!V_SyncPresent)	//Vsync Hi 1:7us
		{
		VsyncWidth ++;
		if(VsyncWidth > 50)		//over 350us
			return 0;
		}
	VsyncWidth = 0;
	while(V_SyncPresent)		//Vsync Hi 1:7us
		{
		VsyncWidth ++;
		if(VsyncWidth > 714)	//over 5ms
			return 1;
		}
*/	return 0;
}

void LoadModeDependentSettings(void)
{
//	Sharp,V_BP,H_BP,H_Tatol,Phase
//unsigned short addr;
//	addr = T_EEaddr_Mode_data;
	FuncBuf[pSHARPNESS] = EEP_ModeMap[T_EEaddr_Sharp];//(addr++);
	FuncBuf[pVPOSITION] = EEP_ModeMap[T_EEaddr_VBP];//(addr++);
	FuncBuf[pHPOSITION] = EEP_ModeMap[T_EEaddr_HBP];//(addr++);
	FuncBuf[pHPOSITION] <<= 8;
	FuncBuf[pHPOSITION] |= EEP_ModeMap[T_EEaddr_HBP+1];//(addr++);
	FuncBuf[pCLOCK] = EEP_ModeMap[T_EEaddr_HTotal];//(addr++);
	FuncBuf[pCLOCK] <<= 8;
	FuncBuf[pCLOCK] |= EEP_ModeMap[T_EEaddr_HTotal+1];//(addr++);
//	addr++;
	FuncBuf[pPHASE] = EEP_ModeMap[T_EEaddr_Phase];//(addr);	
}

⌨️ 快捷键说明

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