📄 tw88.lst
字号:
568 extern CODE struct RegisterInfo PanelContrastRange;
569 extern CODE struct RegisterInfo PanelBrightnessRange;
570 extern CODE struct RegisterInfo PanelSharpnessRange;
571 extern CODE struct RegisterInfo PanelHueRange;
572 extern CODE struct RegisterInfo PanelSaturationRange;
573
574 void GetInitPanelAttribute1(void)
575 {
576 1 BYTE rdata;
577 1 int regv;
578 1
579 1 rdata = GetPanelContrastEE();
580 1 Mapping1( rdata, &UserRange ,®v, &PanelContrastRange);
581 1 SetRGBContrast( GetPCColorTempModeEE(), (BYTE)regv );
582 1
583 1 rdata = GetPanelBrightnessEE() ;
584 1 Mapping1( rdata, &UserRange , ®v, &PanelBrightnessRange );
585 1 SelectPanelAttrRegGroup(GROUP_RGB); // Need to refresh "INDX_CB" bit // Hans
586 1 SetPanelBrightnessReg(RED, (BYTE)regv);
587 1 SetPanelBrightnessReg(GREEN, (BYTE)regv);
588 1 SetPanelBrightnessReg(BLUE, (BYTE)regv);
589 1
590 1 SelectPanelAttrRegGroup(GROUP_YCbCr);
591 1 SetDTVBrightnessReg(0x80);
592 1 SetDTVContrastReg(0x80);
593 1 SetPanelSaturationReg(U_SAT, 0x80);
594 1 SetPanelSaturationReg(V_SAT, 0x80);
595 1 }
596
597 #endif // SUPPORT_PC
598
599 //-------------------------------------------------------------------
600 // Set Active Region Functions
601 //-------------------------------------------------------------------
602 void SetHactiveStart(WORD hstart)
603 {
C51 COMPILER V7.50 TW88 04/01/2008 15:02:37 PAGE 11
604 1 BYTE val;
605 1
606 1 #ifdef DEBUG_PC
607 1 dPrintf("\r\n === SetHactiveStart(%d)", hstart);
608 1 #endif
609 1 // TW8804 write LSByte first
610 1 val = ReadDecoder(0x49);
611 1 val = val & 0xf8;
612 1 val = val | (hstart>>8);
613 1
614 1 WriteDecoder(0x49, val);
615 1 WriteDecoder(0x47, (BYTE)hstart);
616 1 }
617
618 void SetHactiveEnd(WORD hend)
619 {
620 1 BYTE val, buf;
621 1
622 1 #ifdef DEBUG_PC
623 1 dPrintf("\r\n === SetHactiveEnd(%d)", hend);
624 1 #endif
625 1 // TW8804 write LSByte first
626 1 buf = (BYTE)(hend>>8)<<4;
627 1 val = ReadDecoder(0x49);
628 1 val = val & 0x0f;
629 1 val = val | buf;
630 1
631 1 WriteDecoder(0x49, val);
632 1 WriteDecoder(0x48, (BYTE)hend);
633 1 }
634
635 void SetVactiveStart(WORD vstart)
636 {
637 1 BYTE val, v_h, v_l;
638 1
639 1 #ifdef DEBUG_PC
640 1 dPrintf("\r\n === SetVactiveStart(%d)", vstart);
641 1 #endif
642 1 // TW8804 write LSByte first
643 1 v_l = (BYTE)vstart;
644 1 v_h = (BYTE)(vstart>>8);
645 1
646 1 val = ReadDecoder(0x4d); // high 2 bits
647 1 val = (val & 0xf0);
648 1 val = val | (v_h<<2);
649 1 val = val | v_h;
650 1 WriteDecoder(0x4d, val);
651 1
652 1 WriteDecoder(0x4a, v_l); // Vactive Odd field Line start position
653 1 WriteDecoder(0x4b, v_l); // Vactive Even field Line start position
654 1 }
655
656 void SetVactiveLen(WORD van)
657 {
658 1 // WORD vstop;
659 1 BYTE val, buf;
660 1
661 1 van += 1; // HHY add 1, because of bottom line garbage
662 1 #ifdef DEBUG_PC
663 1 dPrintf("\r\n === SetVactiveLen(%d)", van);
664 1 #endif
665 1
C51 COMPILER V7.50 TW88 04/01/2008 15:02:37 PAGE 12
666 1 // TW8804 write LSByte first
667 1 buf = (BYTE)(van>>8) << 4;
668 1 val = ReadDecoder(0x4d);
669 1 val = val & 0x8f;
670 1 val = val | buf;
671 1 WriteDecoder(0x4d, val);
672 1 WriteDecoder(0x4c, (BYTE)van);
673 1
674 1 }
675
676 void DefaultPanelAttributeForVideo(void)
677 {
678 1 SelectPanelAttrRegGroup(GROUP_RGB);
679 1
680 1 SetPanelContrastReg(RED, 0x80);
681 1 SetPanelContrastReg(GREEN,0x80);
682 1 SetPanelContrastReg(BLUE, 0x80);
683 1
684 1 SetPanelBrightnessReg(RED, 0x80);
685 1 SetPanelBrightnessReg(GREEN,0x80);
686 1 SetPanelBrightnessReg(BLUE, 0x80);
687 1
688 1 SelectPanelAttrRegGroup(GROUP_YCbCr);
689 1
690 1 SetDTVBrightnessReg(0x70); // 0x80
691 1 SetDTVContrastReg(0x80);
692 1 SetPanelSaturationReg(U_SAT, 0xB0); // 0x80
693 1 SetPanelSaturationReg(V_SAT, 0xB0); // 0x80
694 1
695 1 }
696
697 #ifdef SUPPORT_PC
698
699 //=============================================================================
700 // Invert Polarity Functions
701 //=============================================================================
702 /*
703 void InvertHSYNCPolarity(void)
704 {
705 BYTE val;
706
707 val = ReadDecoder(0x40);
708 if( val & 0x04 ) {
709 val &= 0xfb;
710
711 #ifdef DEBUG_PC
712 dPuts("\r\nInvert H Pol: N->P ");
713 #endif
714
715 }
716 else {
717 val |= 0x04;
718
719 #ifdef DEBUG_PC
720 dPuts("\r\nInvert H Pol: P->N ");
721 #endif
722
723 }
724 WriteDecoder(0x40, val);
725 }
726 */
727 void InvertVSYNCPolarity(void)
C51 COMPILER V7.50 TW88 04/01/2008 15:02:37 PAGE 13
728 {
729 1 BYTE val;
730 1
731 1 val = ReadDecoder(0x40);
732 1 if( val & 0x02 ) {
733 2 val &= 0xfd;
734 2
735 2 #ifdef DEBUG_PC
736 2 dPuts("\r\nInvert V Pol: N->P ");
737 2 #endif
738 2
739 2 }
740 1 else {
741 2 val |= 0x02;
742 2
743 2 #ifdef DEBUG_PC
744 2 dPuts("\r\nInvert V Pol: P->N ");
745 2 #endif
746 2
747 2 }
748 1 WriteDecoder(0x40, val);
749 1 }
750
751 //=============================================================================
752 // get sync pulse Functions
753 //=============================================================================
754 WORD GetVSYNCPulse(void)
755 {
756 1 WORD buf;
757 1
758 1 WriteDecoder(0x5b, 0x70); // VSYNC
759 1 delay(10);
760 1 buf = (WORD)ReadDecoder(0x58) << 8;
761 1 buf |= ReadDecoder(0x57);
762 1
763 1 #ifdef DEBUG_PC
764 1 dPrintf("\r\nGetVSYNCPulse():%d ", buf);
765 1 #endif
766 1 return buf;
767 1 }
768
769 /* Not used right now!!
770 WORD GetRelativePosition(void)
771 {
772 WORD buf;
773
774 WriteDecoder(0x5b, 0x70); // VSYNC
775
776 buf = (WORD)ReadDecoder(0x5a) << 8;
777 buf |= ReadDecoder(0x59);
778
779 return buf;
780 }
781 //*/
782
783 WORD GetHSYNCPulse(void)
784 {
785 1 WORD buf;
786 1
787 1 WriteDecoder(0x5b, 0x60); // HSYNC
788 1 buf = (WORD)ReadDecoder(0x58) << 8; // from MSB
789 1 buf |= ReadDecoder(0x57);
C51 COMPILER V7.50 TW88 04/01/2008 15:02:37 PAGE 14
790 1
791 1 return buf;
792 1 }
793
794 #endif // SUPPORT_PC
795
796 //=============================================================================
797 // Internal PLL
798 //=============================================================================
799 #if defined SUPPORT_PC || defined SUPPORT_DTV
800
801 BYTE GetPOST(void)
802 {
803 1 BYTE post;
804 1
805 1 post = ReadDecoder(TW88_PLL_DIV);
806 1 return ((post>>6) & 0x03); // change register position
807 1 }
808
809 DWORD GetPPF(void)
810 {
811 1 DWORD ppf, Freq;
812 1 BYTE i;
813 1
814 1 Freq = ReadDecoder(TW88_FPLL0);
815 1 Freq &= 0x0f;
816 1 Freq <<= 8;
817 1 Freq |= ReadDecoder(TW88_FPLL1);
818 1 Freq <<= 8;
819 1 Freq |= ReadDecoder(TW88_FPLL2);
820 1
821 1 #ifdef DEBUG_PC
822 1 dPrintf("\r\n(GetFBDN) :%ld", Freq);
823 1 #endif
824 1 // 27000000 * 4 * FREQ / 2^17 / 2^POST
825 1 ppf = 824L * ( Freq );
826 1 // ppf = 412L * ( GetFBDN() );
827 1
828 1 i= GetPOST();
829 1
830 1 for(; i>0; i-- ) ppf /= 2;
831 1
832 1 #ifdef DEBUG_PC
833 1 dPrintf("\r\n(GetPPF) :%ld", ppf);
834 1 #endif
835 1 return ppf;
836 1 }
837 #endif
838
839 #if defined SUPPORT_PC || defined SUPPORT_DTV
840 //=============================================================================
841 // Set Measurement Window Functions
842 //=============================================================================
843 void SetMeasureWindowH(WORD start, WORD stop)
844 {
845 1 BYTE val;
846 1
847 1 #ifdef DEBUG_PC
848 1 dPrintf("\r\nSetWindow H. Range(%04x, %04x)", start, stop);
849 1 #endif
850 1
851 1 // TW8804 write LSByte first
C51 COMPILER V7.50 TW88 04/01/2008 15:02:37 PAGE 15
852 1 val = (BYTE)((stop >> 4) & 0xf0);
853 1 val |= (BYTE)((start>>8) & 0x07);
854 1 WriteDecoder(0x53, val); // H-start and H-stop
855 1
856 1 WriteDecoder(0x51, (BYTE)start); // H-start
857 1 WriteDecoder(0x52, (BYTE)stop); // H-stop
858 1 }
859
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -