📄 scaler.lst
字号:
446 2 temp = ((unsigned long)DV_HFreq * i) / 10; //KHz
447 2 #if 0
if(dclk > temp){
temp = dclk - temp;
}
else{
temp = temp - dclk;
}
if(temp < 100){
break;
}
#else
458 2 if(temp >= dclk){
459 3 break;
460 3 }
461 2 else{
462 3 temp = dclk - temp;
463 3 if(temp < 100){
464 4 break;
465 4 }
466 3 }
467 2 #endif
468 2 }
469 1 dstHtotal = i;
470 1 if((flag3 & BIT_2) != 0x00){
471 2 printf("DCLK = 0x%x 0x%x\r\n",(unsigned short)(dclk >> 16),(unsigned short)dclk);
472 2 printf("DispActiveHeight = %d\r\n",DispActiveHeight);
473 2 printf("DispHFreq = %d\r\n",DV_HFreq);
474 2 printf("dstVtotal = %d\r\n",dstVtotal);
475 2 printf("dstHtotal = %d\r\n",dstHtotal);
476 2 }
477 1 SetDPLL(dclk);
478 1
479 1 WriteWordIIC_HW(Scaler_Addr,0x4e,dstVtotal); // Display Vtotal
480 1 dstVtotal = dstVtotal - PanelMinVSyncWidth - PanelMinVSyncBackPorch;
481 1 WriteWordIIC_HW(Scaler_Addr,0x52,dstVtotal); // Display VStart
482 1 dstVtotal = dstVtotal + PanelMinVSyncWidth;
483 1 WriteWordIIC_HW(Scaler_Addr,0x54,dstVtotal); // Display VEnd
484 1
485 1 WriteWordIIC_HW(Scaler_Addr,0x56,dstHtotal); // Display Htotal
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 9
486 1 dstHtotal = dstHtotal - PanelMinHSyncWidth - PanelMinHSyncBackPorch;
487 1 WriteWordIIC_HW(Scaler_Addr,0x5a,dstHtotal); // Display HStart
488 1 dstHtotal = dstHtotal + PanelMinHSyncWidth;
489 1 WriteWordIIC_HW(Scaler_Addr,0x5c,dstHtotal); // Display HEnd
490 1 }
491
492 void SetScalerAV(void)
493 {
494 1 unsigned char Vfreq;
495 1 unsigned short i,DispActiveHeight,dstVtotal,DV_HFreq,dstHtotal;
496 1 unsigned long dclk,temp;
497 1 code unsigned short H_ActTab[]={
498 1 680,680
499 1 };
500 1 code unsigned short V_ActTab[]={
501 1 232,278
502 1 };
503 1 if((flag2 & BIT_2) == 0)
504 1 Vfreq = 1;
505 1 else
506 1 Vfreq = 0;
507 1 if(Vfreq == 0){ //60Hz
508 2 WriteWordIIC_HW(Scaler_Addr,0x18,150); //H pos
509 2 WriteWordIIC_HW(Scaler_Addr,0x14,0x6015); //V pos
510 2 H_SYNC = 157;
511 2 V_SYNC = 599;
512 2 VTotal = 262;//525;
513 2 }
514 1 else{ //50Hz
515 2 WriteWordIIC_HW(Scaler_Addr,0x18,159); //H pos
516 2 WriteWordIIC_HW(Scaler_Addr,0x14,0x0019); //V pos
517 2 H_SYNC = 156;
518 2 V_SYNC = 500;
519 2 VTotal = 302;//625;
520 2 }
521 1 WriteIIC_HW(Scaler_Addr,0x88,0xc8);
522 1 // Window size
523 1 H_Act = H_ActTab[Vfreq];
524 1 if((flag3 & BIT_2) != 0x00){
525 2 printf("Resolution = %d x %d\r\n",H_ActTab[Vfreq],V_ActTab[Vfreq]);
526 2 }
527 1 WriteWordIIC_HW(Scaler_Addr,0x16,V_ActTab[Vfreq]); // Display V_Active
528 1 WriteWordIIC_HW(Scaler_Addr,0x1a,H_ActTab[Vfreq]); // Display H_Active
529 1 // DCLK
530 1 dclk = ((unsigned long)PanelHeight * VTotal / V_ActTab[Vfreq]) * V_SYNC * PanelMinHTotal / 10000; //KHz
531 1 DispActiveHeight = PanelHeight; // set the vertical active height to the Panel Height
532 1 dclk = dclk / 1000 - 1;
533 1 dclk = (dclk + 2) * 1000;
534 1 // calculate new dst vtotal
535 1 dstVtotal = ((((unsigned long)VTotal * DispActiveHeight) << 4) / V_ActTab[Vfreq] + 8) >> 4; //add .5 for
-rounding, make even
536 1 if(dstVtotal < PanelMinVTotal){
537 2 dstVtotal = PanelMinVTotal;
538 2 DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
539 2 dclk = ((unsigned long)DV_HFreq * PanelMinHTotal) / 10; //KHz
540 2 dclk = dclk / 1000 - 1;
541 2 dclk = (dclk + 2) * 1000;
542 2 }
543 1 else{
544 2 // HFreq
545 2 DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
546 2 }
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 10
547 1 // Htotal
548 1 for(i=PanelMinHTotal; i<PanelMaxHTotal; i=i+2){
549 2 temp = ((unsigned long)DV_HFreq * i) / 10; //KHz
550 2 #if 0
if(dclk > temp){
temp = dclk - temp;
}
else{
temp = temp - dclk;
}
if(temp < 100){
break;
}
#else
561 2 if(temp >= dclk){
562 3 break;
563 3 }
564 2 else{
565 3 temp = dclk - temp;
566 3 if(temp < 100){
567 4 break;
568 4 }
569 3 }
570 2 #endif
571 2 }
572 1 dstHtotal = i;
573 1 if((flag3 & BIT_2) != 0x00){
574 2 printf("DCLK = 0x%x 0x%x\r\n",(unsigned short)(dclk >> 16),(unsigned short)dclk);
575 2 printf("DispActiveHeight = %d\r\n",DispActiveHeight);
576 2 printf("DispHFreq = %d\r\n",DV_HFreq);
577 2 printf("dstVtotal = %d\r\n",dstVtotal);
578 2 printf("dstHtotal = %d\r\n",dstHtotal);
579 2 }
580 1 SetDPLL(dclk);
581 1
582 1 WriteWordIIC_HW(Scaler_Addr,0x4e,dstVtotal); // Display Vtotal
583 1 dstVtotal = dstVtotal - PanelMinVSyncWidth - PanelMinVSyncBackPorch;
584 1 WriteWordIIC_HW(Scaler_Addr,0x52,dstVtotal); // Display VStart
585 1 dstVtotal = dstVtotal + PanelMinVSyncWidth;
586 1 WriteWordIIC_HW(Scaler_Addr,0x54,dstVtotal); // Display VEnd
587 1
588 1 WriteWordIIC_HW(Scaler_Addr,0x56,dstHtotal); // Display Htotal
589 1 dstHtotal = dstHtotal - PanelMinHSyncWidth - PanelMinHSyncBackPorch;
590 1 WriteWordIIC_HW(Scaler_Addr,0x5a,dstHtotal); // Display HStart
591 1 dstHtotal = dstHtotal + PanelMinHSyncWidth;
592 1 WriteWordIIC_HW(Scaler_Addr,0x5c,dstHtotal); // Display HEnd
593 1 }
594
595 void SetDPLL(unsigned long dclk)
596 {
597 1 unsigned long temp;
598 1 WriteIIC_HW(Scaler_Addr,0xff,0x01); // DPLL
599 1 WriteIIC_HW(Scaler_Addr,0xf0,0x00);
600 1 if(dclk >= 140000){
601 2 WriteIIC_HW(Scaler_Addr,0xf1,0x10);
602 2 temp = (dclk / 10) * 131072 / 1200;
603 2 }
604 1 else if(dclk >= 70000){
605 2 WriteIIC_HW(Scaler_Addr,0xf1,0x11);
606 2 temp = (dclk / 10) * 131072 / 600;
607 2 }
608 1 else if(dclk >= 35000){
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 11
609 2 WriteIIC_HW(Scaler_Addr,0xf1,0x12);
610 2 temp = (dclk / 10) * 131072 / 300;
611 2 }
612 1 else{
613 2 WriteIIC_HW(Scaler_Addr,0xf1,0x13);
614 2 temp = (dclk / 10) * 1048576 / 1200;
615 2 }
616 1 WriteIIC_HW(Scaler_Addr,0xf2,(unsigned char)temp);
617 1 WriteIIC_HW(Scaler_Addr,0xf3,(unsigned char)(temp >> 8));
618 1 WriteIIC_HW(Scaler_Addr,0xf4,(unsigned char)(temp >> 16));
619 1 WriteIIC_HW(Scaler_Addr,0xf0,0x01);
620 1 WriteIIC_HW(Scaler_Addr,0xff,0x00);
621 1 }
622
623 void SetHP(void)
624 {
625 1 // Horizontal Start
626 1 WriteWordIIC_HW(Scaler_Addr,0x18,HP_Start);
627 1 if((flag3 & BIT_2) != 0x00){
628 2 printf("HP_Start = %d\r\n",HP_Start);
629 2 }
630 1 }
631
632 void SetVP(void)
633 {
634 1 // Vertical Start
635 1 if((flag3 & BIT_6) != 0){
636 2 WriteWordIIC_HW(Scaler_Addr,0x14,VP_Start | 0x6000);
637 2 }
638 1 else{
639 2 WriteWordIIC_HW(Scaler_Addr,0x14,VP_Start);
640 2 }
641 1 if((flag3 & BIT_2) != 0x00){
642 2 printf("VP_Start = %d\r\n",VP_Start);
643 2 }
644 1 }
645
646 void SetSharpness(void)
647 {
648 1 WriteIIC_HW(Scaler_Addr,0x70,Sharpness);
649 1 if((flag3 & BIT_2) != 0x00){
650 2 printf("Sharpness = %d\r\n",(unsigned short)Sharpness);
651 2 }
652 1 }
653
654 void SetBrightness(void)
655 {
656 1 unsigned char value;
657 1 value = 78 + Brightness;
658 1 if(value > 0x7f)
659 1 value &= 0x7f;
660 1 else
661 1 value |= 0x80;
662 1 WriteIIC_HW(Scaler_Addr,0x6c,value);
663 1 WriteIIC_HW(Scaler_Addr,0x6d,value);
664 1 WriteIIC_HW(Scaler_Addr,0x6e,value);
665 1 if((flag3 & BIT_2) != 0x00){
666 2 printf("Brightness of ASIC = %x\r\n",(unsigned short)value);
667 2 }
668 1 }
669
670 void SetInverter(void)
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 12
671 {
672 1 unsigned char value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -