scaler.lst

来自「台湾联咏NT68663 LCD MONITOR 控制程序(完整版)」· LST 代码 · 共 1,527 行 · 第 1/5 页

LST
1,527
字号
 279   1      #if PanelInterface == TCON_TO_RSDS || PanelInterface == TCON_TO_TTL
              	
              	if(PanelInterface == TCON_TO_RSDS || PanelInterface == TCON_TO_TTL)
              		{
              		WriteIIC563(0x0FF,0x02); // page2 enable
              		#if PRINT_MESSAGE
              			printf("TCON Init\r\n");
              		#endif
              		for(i=0; i<0x70; i=i+16)
              			WritePage563(i,i,TCON_Tab);
              		for(i=0x70; i<0x7b; i++)
              			WriteIIC(SCALER_ADDR,i,TCON_Tab[i]);
              		for(i=0x80; i<0xa0; i=i+16)
              			WritePage563(i,i,TCON_Tab);
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 6   

              		WriteIIC563(0x0FF,0x00); // page1 disable
              		WriteIIC563(0x2d0,0xb5); // Deflicker control
              		
              		}
              #endif
 298   1      
 299   1      #if Panel_Spread_Spect_En == 0xff
 300   1      	i = (PanelSpreadSpectrumCtrl << 1) | BIT_0;
 301   1      	WriteIIC563(0x0f5,i);
 302   1      #endif
 303   1      }
 304          
 305          #if PanelInterface == TCON_TO_RSDS || PanelInterface == TCON_TO_TTL
              void WritePage563(unsigned char addr1,unsigned char addr2,unsigned char *p)
              {
              unsigned char i,ch;
              	IIC_Start();
              	IIC_Tx(SCALER_ADDR);
              	IIC_Tx(addr1);
              	for(i=0; i<16; i++){
              		ch = p[addr2 + i];
              		IIC_Tx(ch);
              	}
              	IIC_Stop();
              }
              #endif
 319          
 320          #if PanelInterface == TCON_TO_RSDS || PanelInterface == TCON_TO_TTL
              void WritePage563(unsigned char addr1,unsigned char addr2,unsigned char *p)
              {
              unsigned char i,ch;
              	IIC_Start();
              	IIC_Tx(SCALER_ADDR);
              	IIC_Tx(addr1);
              	for(i=0; i<16; i++){
              		ch = p[addr2 + i];
              		IIC_Tx(ch);
              	}
              	IIC_Stop();
              }
              #endif
 334          
 335          void SetADC_Phase(void)
 336          {
 337   1      	WriteIIC563(0x0d9,FuncBuf[pPHASE]);
 338   1      	#if PRINT_MESSAGE
              		printf("Phase = %d\r\n",(unsigned short)FuncBuf[pPHASE]);
              	#endif
 341   1      }
 342          
 343          void CheckFreqRange(Byte Pixel)
 344          {
 345   1      	OutOfRange = 0;		
 346   1      	if((H_SYNC > H_Max)||(H_SYNC < H_Min))
 347   1      		//OutOfRange = 1;	
 348   1      		OutOfRange = 2;	// Jacky 0918
 349   1      	if((V_SYNC > V_Max)||(V_SYNC < V_Min))
 350   1      		//OutOfRange = 1;	
 351   1      		OutOfRange = 2;	// Jacky 0918		
 352   1      //	if((H_SYNC > H_HI)||(H_SYNC < H_LO))
 353   1      //		OutOfRange = 2;	
 354   1      //	if((V_SYNC > V_HI)||(V_SYNC < V_LO))
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 7   

 355   1      //		OutOfRange = 2;		
 356   1      //	if(Vresolution == 960)
 357   1      //		OutOfRange = 2; 	
 358   1      	#ifdef X21
              	if((Pixel > P_Max) || (Hresolution > 1600))
              	//if((Pixel > P_Max) || (Hresolution > 1280))
              	#endif
 362   1      	#ifdef X19
              	if((Pixel > P_Max) || (Hresolution > 1280))
              	#endif
 365   1      	#ifdef X17
 366   1      	if((Pixel > P_Max) || (Hresolution > 1280))
 367   1      	//if(Pixel > P_Max)
 368   1      	#endif
 369   1      	#ifdef X15
              	if((Pixel > P_Max) || (Hresolution > 1280))
              	#endif
 372   1      		OutOfRange = 2;		
 373   1      }
 374          #if 1
 375          void SetADC_PLL(void)
 376          {
 377   1      	Byte code DpllSeqTab[4]={100,50,20,0};
 378   1      	unsigned long PixelRate, LineCounter;//,H_Counter
 379   1      	Byte ch,k;
 380   1      	float temp;
 381   1      
 382   1      	PixelRate = ((unsigned long)FuncBuf[pCLOCK] * H_SYNC)/10000;
 383   1      	ch = (unsigned char)PixelRate;
 384   1      	WriteIIC563(0x0d0,0x23);
 385   1      	CheckFreqRange(ch);
 386   1      	//----------------------------------
 387   1      	if(ForceToBack == 0){
 388   2      		k = ReadIIC563(0x0d1);
 389   2      		k &= 0x03;
 390   2      	}
 391   1      	else{
 392   2      		for(k=0;k<4;k++)
 393   2      			if(ch > DpllSeqTab[k])
 394   2      				break;
 395   2      		WriteIIC563(0x0d1,0x10+k);
 396   2      	}
 397   1      	#if PRINT_MESSAGE
              		printf("Htotal = %d\r\n",FuncBuf[pCLOCK]);
              		printf("PixelRate = %d MHz\r\n",(unsigned short)PixelRate);
              	#endif
 401   1      	//WriteIIC563(0x0d6,0xa0);
 402   1      	WriteIIC563(0x0d6,0xc0);
 403   1      //	if(H_SYNC < 240){
 404   1      		WriteIIC563(0x0db,0x0c);
 405   1      		LineCounter = 4096;	//
 406   1      //	}
 407   1      //	else if(H_SYNC < 480){
 408   1      //		WriteIIC563(0x0db,0x0d);
 409   1      //		LineCounter = 8192;
 410   1      //	}
 411   1      //	else{
 412   1      //		WriteIIC563(0x0db,0x0e);
 413   1      //		LineCounter = 16384;
 414   1      //	}
 415   1      	if(SyncMode == 3)	//DVI
 416   1      	{
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 8   

 417   2      		ch = ReadIIC563(0x102);
 418   2      		WriteIIC563(0x102,ch|BIT_5);
 419   2      		Sleep(5);
 420   2      		WriteIIC563(0x102,ch);
 421   2      		//Sleep(20);
 422   2      	}
 423   1      		
 424   1      	if(ForceToBack != 0)
 425   1      	{
 426   2      		WriteIIC563(0x0d5,0x01);
 427   2      		H_Counter = 0;
 428   2      		if(SyncMode == 3 && (ReadIIC563(0x19a) & BIT_3) ==0x00 ){	// Jacky 20050916 for DVI DEmode, and H non-pr
             -esent
 429   3      			PixelRate = ReadWordIIC563(0x19b) & 0x1fff;
 430   3      			if((PixelRate == 0x1fff)||(PixelRate == 0)){
 431   4      				H_SYNC_Temp = 0xffff;
 432   4      			}
 433   3      			else{
 434   4      			    H_Counter = PixelRate * 512;
 435   4      			}
 436   3      		}
 437   2      		else{
 438   3      			LocalTimer = 25;
 439   3      			while(LocalTimer > 0)
 440   3      			{
 441   4      				ch = ReadIIC563(0x0df) & 0x3f;
 442   4      				PixelRate = ch;
 443   4      				PixelRate <<= 8;
 444   4      				ch = ReadIIC563(0x0de);
 445   4      				PixelRate += ch;
 446   4      				PixelRate <<= 8;
 447   4      				ch = ReadIIC563(0x0dd);
 448   4      				PixelRate += ch;
 449   4      				if(abs(PixelRate - H_Counter) > 2)
 450   4      				{
 451   5      					H_Counter = PixelRate;
 452   5      					LocalTimer = 25;
 453   5      				}
 454   4      				if(DetectBacklight())	//waiting for pll stable
 455   4      					break;
 456   4      			}
 457   3      		}
 458   2      		
 459   2      		//temp = ((float)FuncBuf[pCLOCK] * 536870912) / PixelRate;
 460   2      		temp = ((float)FuncBuf[pCLOCK] * 131072 * LineCounter) / PixelRate;
 461   2      		PixelRate = temp;
 462   2      		#if PRINT_MESSAGE
              			printf("DSS = %x %x\r\n",(unsigned short)(PixelRate>>16),(unsigned short)PixelRate);
              		#endif
 465   2      		for(k; k>0; k--)
 466   2      			PixelRate <<= 1;
 467   2      		WriteIIC563(0x0d2,(unsigned char)PixelRate);
 468   2      		WriteIIC563(0x0d3,(unsigned char)(PixelRate>>8));
 469   2      		WriteIIC563(0x0d4,(unsigned char)(PixelRate>>16));
 470   2      	}
 471   1      	
 472   1      	WriteIIC563(0x0d7,(Byte)FuncBuf[pCLOCK]);
 473   1      	WriteIIC563(0x0d8,(Byte)(FuncBuf[pCLOCK]>>8));
 474   1      	if((SyncMode == 1)||(SyncMode == 2)||(SyncMode == 5)||(SyncMode == 6)){ //H+V SOG
 475   2      		WriteIIC563(0x0d5,0x09);
 476   2      	}
 477   1      	else{
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 9   

 478   2      	#if 0
              		if((HV_Pol & BIT_4) == 0)
              			WriteIIC563(0x0d5,0x03&(~BIT_3));
              		else
              			WriteIIC563(0x0d5,0x03|BIT_3);
              	#else
 484   2      		WriteIIC563(0x0d5,0x0b);
 485   2      	#endif
 486   2      	}
 487   1      }
 488          #else
              void SetADC_PLL(void)
              {
              	//Byte code PixelTab[]={40,64,106,200};
              	Byte code DpllSeqTab[4]={100,50,20,0};
              	unsigned long PixelRate,H_Counter;
              	//Word addr;
              	Byte ch,k;
              	float temp;
              /*
              	if(SyncMode > 0)	//composite & SOG mode
              		{
              		PixelRate = ((unsigned long)FuncBuf[pCLOCK] * H_SYNC)/10000;
              		addr = FuncBuf[pCLOCK] - 1;
              		WriteIIC563(0x00b,(unsigned char)addr);		//pll msb
              		ch = addr >> 8;
              		WriteIIC563(0x00a,ch);		//pll lsb
              		ch = (unsigned char)PixelRate;
              		CheckFreqRange(ch);
              		for(i=0;i<4;i++)
              			if(PixelTab[i] > ch)
              				{
              				k = i<<6;
              				break;
              				}
              		if(ch < 75)
              			k |= 0x0f;	//pll charge pump
              		else
              			k |= 0x2f;
              		#if PRINT_MESSAGE
              			printf("Htotal = %d\n",FuncBuf[pCLOCK]);
              			printf("PixelRate = %d MHz\n",(unsigned short)PixelRate);
              			printf("VCO Range = %x\n",(unsigned short)k);
              		#endif
              		WriteIIC563(0x00d,k);
              		}
              */
              /*
              	else		//seperate mode
              		{
              */
              	PixelRate = ((unsigned long)FuncBuf[pCLOCK] * H_SYNC)/10000;
              	ch = (unsigned char)PixelRate;
              	WriteIIC563(0x0d0,0x23);
              	CheckFreqRange(ch);
              	//Jacky 20040910 for DVI pll bandwidth
              	if(SyncMode == 3)
              	{
              		if(ch > 100)
              			WriteIIC563(0x01d,0x01);
              		else
              			WriteIIC563(0x01d,0x1f);
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 10  

              	}
              	//----------------------------------
              	if(ForceToBack == 0){
              		k = ReadIIC563(0x0d1);
              		k &= 0x03;
              	}
              	else{
              		for(k=0;k<4;k++)
              			if(ch > DpllSeqTab[k])
              				break;
              		WriteIIC563(0x0d1,0x10+k);
              	}
              	#if PRINT_MESSAGE
              		printf("Htotal = %d\r\n",FuncBuf[pCLOCK]);
              		printf("PixelRate = %d MHz\r\n",(unsigned short)PixelRate);
              	#endif
              	//WriteIIC563(0x0d5,0x07);
              	WriteIIC563(0x0d6,0xa0);
              	WriteIIC563(0x0db,0x0c);
              		
              	if(ForceToBack == 0){
              /*
              		if((SyncMode == 1)||(SyncMode == 2)){ //H+V SOG
              			WriteIIC563(0x0d5,0x09);
              		}
              		else{
              			if((HV_Pol & BIT_4) == 0){
              				WriteIIC563(0x0d5,0x03&(~BIT_3));
              			}
              			else{
              				WriteIIC563(0x0d5,0x03|BIT_3);
              			}
              		}
              */

⌨️ 快捷键说明

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