📄 scaler.lst
字号:
473 #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();
C51 COMPILER V7.06 SCALER 12/11/2007 11:28:43 PAGE 9
}
#endif
487 /*==========================================
488 ==========================================*/
489 void SetADC_Phase(void)
490 {
491 1 WriteIIC563(0x0d9,FuncBuf[pPHASE]);
492 1 }
493 /*==========================================
494 ==========================================*/
495 /*
496 Byte Check_HFreqRange(void)
497 {
498 //first priority
499 if((H_SYNC > H_OverMuteScreenLimit)||(H_SYNC < H_UnderMuteScreenLimit))
500 return OverRangeMuteScreen;
501 //if((H_SYNC > H_OverNormalDisplayLimit)||(H_SYNC < H_UnderNormalDisplayLimit))
502 //return OverRangeWithCanDisplay;
503 return Within_range;
504 }
505 */
506 /*==========================================
507 ==========================================*/
508 /*
509 Byte Check_VFreqRange(void)
510 {
511 //first priority
512 if((V_SYNC > V_OverMuteScreenLimit)||(V_SYNC < V_UnderMuteScreenLimit))
513 return OverRangeMuteScreen;
514
515 // y050818,Eason
516 // if (Hresolution==PanelWidth&& Vresolution==PanelHeight &&abs(V_SYNC-850)<10){
517 // return OverRangeMuteScreen;
518 // }else
519 // if((V_SYNC > V_OverNormalDisplayLimit)||(V_SYNC < V_UnderNormalDisplayLimit))
520 // return OverRangeWithCanDisplay;
521
522 return Within_range;
523 }
524 */
525 /*==========================================
526 ==========================================*/
527 /*
528 Byte Check_PixelRange(Byte Pixel)
529 {
530 //first priority
531 if((Pixel > MaxPixelClock)||(Hresolution> Rel_OverMuteScreenLimit))
532 return OverRangeMuteScreen;
533 //if(Hresolution> Rel_OverNormalDisplayLimit)
534 //return OverRangeWithCanDisplay;
535 return Within_range;
536 }
537 */
538 /*==========================================
539 ==========================================*/
540 /*
541 void CheckFreqRange(Byte Pixel)
542 {
543 if(Check_HFreqRange()==OverRangeMuteScreen||Check_VFreqRange()==OverRangeMuteScreen||Check_PixelRange(Pix
-el)==OverRangeMuteScreen){
544 OutOfRange=OverRangeMuteScreen;
545 return;
C51 COMPILER V7.06 SCALER 12/11/2007 11:28:43 PAGE 10
546 }
547 //if(Check_HFreqRange()==OverRangeWithCanDisplay||Check_VFreqRange()==OverRangeWithCanDisplay||Check_Pixe
-lRange(Pixel)==OverRangeWithCanDisplay){
548 //OutOfRange=OverRangeWithCanDisplay;
549 //return;
550 //}
551 OutOfRange=Within_range;
552 }
553 */
554 /*==========================================
555 ==========================================*/
556 void SetScaler(void)
557 {
558 1 unsigned char temp154,ch;
559 1 unsigned short DispActiveHeight,dstVtotal,DV_HFreq,dstHtotal;
560 1 unsigned long dclk;
561 1 //,old_ratio,new_ratio,delta;//,i
562 1 float temp;
563 1 //xdata unsigned short Hr;
564 1
565 1 if(SyncMode < 3){ //y50316 error setting in DVI mdeo kevin
566 2 ch = ReadIIC563(0x020);
567 2 if(ReadIIC563(0x19a) & BIT_2){
568 3 // Interlance = 1; //kevin
569 3 Interlance = 0; //1280*1024 soft power Off/On abnormal
570 3 // WriteIIC563(0x020,ch|BIT_2); //1280*1024 soft power Off/On abnormal
571 3 }else{
572 3 Interlance = 0;
573 3 WriteIIC563(0x020,ch);
574 3 }
575 2 Interlance = 0;
576 2 }
577 1
578 1 if(SyncMode != 3){
579 2 SetHP();
580 2 SetVP();
581 2 }
582 1 // H_Act = H_ActiveTab[ResolutionPtr];
583 1 if(Interlance){
584 2 WriteWordIIC563(0x032,Vresolution); // Capture V_Active
585 2 }else{
586 2 WriteWordIIC563(0x032,Vresolution); // Capture V_Active
587 2 }
588 1 WriteWordIIC563(0x036,Hresolution); // Capture H_Active
589 1 WriteWordIIC563(0x175,PanelWidth); // Display H_Active
590 1
591 1 dclk = (unsigned long)PanelHeight *VTotal ;// / Vresolution) * V_SYNC * PanelTypHTotal / 10; //Hz
592 1 dclk = (unsigned long)dclk / Vresolution;//) * V_SYNC * PanelTypHTotal / 10; //Hz
593 1 dclk = (unsigned long)dclk * V_SYNC;// * PanelTypHTotal / 10; //Hz
594 1 dclk = (unsigned long)dclk * PanelMinHTotal;// / 10; //Hz
595 1 dclk = (unsigned long)dclk / 10; //Hz
596 1 if(Interlance){
597 2 dclk = dclk*2;
598 2 }
599 1 DispActiveHeight = PanelHeight; // set the vertical active height to the Panel Height
600 1
601 1 dstHtotal = PanelMinHTotal;
602 1 // calculate dst vtotal
603 1 dstVtotal = ((((unsigned long)VTotal * DispActiveHeight ) << 4) / Vresolution + 8)>> 4;
604 1 if(dclk < PanelMinPClk){
605 2 dstHtotal = PanelTypHTotal;
606 2 dclk = ((unsigned long)dstHtotal * dstVtotal * V_SYNC + 5) / 10;
C51 COMPILER V7.06 SCALER 12/11/2007 11:28:43 PAGE 11
607 2 }else if(dclk > PanelMaxPClk){
608 2 dstHtotal = PanelLowHTotal;
609 2 dclk = PanelMaxPClk;
610 2 }
611 1 if(dstVtotal < PanelMinVTotal)
612 1 {
613 2 dstVtotal = PanelMinVTotal;
614 2 dstHtotal = PanelMinHTotal;
615 2 dclk = ((unsigned long)PanelMinHTotal * dstVtotal * V_SYNC + 5) / 10;
616 2 DV_HFreq = dclk / PanelMinHTotal / 100;
617 2 }else
618 1 DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC/1000);
619 1 if(SyncMode<3)
620 1 {
621 2 WriteIIC563(0x0f5,ReadIIC563(0x0f5) & (~BIT_0)); // Disable SSC_EN
622 2 temp154 = ReadIIC563(0x154);
623 2 WriteIIC563(0x154,temp154 & 0xfc); //Normal display
624 2 temp = ((float)dstHtotal-0.1) * PanelHeight * 4096 / H_Counter / Vresolution;
625 2 dclk = (unsigned long)(temp * 12000000);
626 2 }
627 1 Sleep(80);
628 1 //SetDPLL(dclk);
629 1 SetDPLL(33200000);
630 1 //SetDPLL(30000000);
631 1 /*
632 1 if((FuncBuf[pVIDEOSOURCE]==SourceDVI) && (ReadIIC563(0x19a) & BIT_3) ==0x00)
633 1 {
634 1 Hr = ReadWordIIC563(0x184);
635 1 dstHtotal = ReadWordIIC563(0x182);
636 1 old_ratio = ReadWordIIC563(0x0f3);
637 1 old_ratio <<=8;
638 1 ch = ReadIIC563(0x0f2);
639 1 old_ratio += ch;
640 1 delta = old_ratio * Hr / dstHtotal / PanelHeight;
641 1 new_ratio = old_ratio - delta;
642 1 WriteIIC563(0x0f2,(unsigned char)new_ratio);
643 1 WriteIIC563(0x0f3,(unsigned char)(new_ratio >> 8));
644 1 WriteIIC563(0x0f4,(unsigned char)(new_ratio >> 16));
645 1 WriteWordIIC563(0x15e,dstHtotal-1);
646 1 WriteIIC563(0x150, ReadIIC563(0x150)&0xdf);
647 1 }
648 1 */
649 1 /*
650 1 Hr = ReadIIC563(0x184)+(ReadIIC563(0x185)*256);
651 1 if(Hr < 0x80)
652 1 {
653 1 temp = (float)dclk * (abs(0x80-Hr));
654 1 temp2 = temp / ((unsigned long)PanelHeight*dstHtotal);
655 1 dclk += temp2;
656 1 SetDPLL(dclk);
657 1 Sleep(80);
658 1 }
659 1 else if (Hr > (PanelHeight - 0x80))
660 1 {
661 1 temp = (float)dclk * (abs(Hr-0x380));
662 1 temp2 = temp / ((unsigned long)PanelHeight*dstHtotal);
663 1 dclk -= temp2;
664 1 SetDPLL(dclk);
665 1 Sleep(80);
666 1 }
667 1 */
668 1 #if Panel_Spread_Spect_En == 0xff
C51 COMPILER V7.06 SCALER 12/11/2007 11:28:43 PAGE 12
669 1 WriteIIC563(0x0f5,ReadIIC563(0x0f5)|BIT_0);
670 1 #endif
671 1 WriteIIC563(0x154,temp154);
672 1 if(!DetectBacklight()){
673 2 WriteIIC563(0x154,0x02);
674 2 }
675 1 WriteWordIIC563(0x15b,dstVtotal); // Display Vtotal
676 1 if(dstHtotal < PanelMinHTotal){ //y50819 for 2 msg display same time
677 2 dstHtotal = PanelMinHTotal;
678 2 }
679 1 WriteWordIIC563(0x15e,dstHtotal); // Display Htotal
680 1 }
681
682 void SetADC_PLL(void)
683 {
684 1 Byte code DpllSeqTab[4]={100,50,20,0};
685 1 unsigned long PixelRate,LineCounter;
686 1 Byte ch,k;
687 1 float temp;
688 1
689 1 PixelRate = ((unsigned long)FuncBuf[pCLOCK] * H_SYNC)/10000;
690 1 ch = (unsigned char)PixelRate;
691 1 WriteIIC563(0x0d0,0x23);
692 1 //CheckFreqRange(ch);
693 1 //----------------------------------
694 1 if(ForceToBack == 0){
695 2 k = ReadIIC563(0x0d1);
696 2 k &= 0x03;
697 2 }else{
698 2 for(k=0;k<4;k++)
699 2 if(ch > DpllSeqTab[k])
700 2 break;
701 2 WriteIIC563(0x0d1,0x10+k);
702 2 }
703 1 WriteIIC563(0x0d6,0xc0);
704 1 WriteIIC563(0x0db,0x0c);
705 1 LineCounter = 4096;
706 1 ch = ReadIIC563(0x102);
707 1 WriteIIC563(0x102,ch|BIT_5);
708 1 Sleep(5);
709 1 WriteIIC563(0x102,ch);
710 1 if(ForceToBack != 0){
711 2 WriteIIC563(0x0d5,0x01);
712 2 H_Counter = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -