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

📄 mode.lst

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
              }
              
              unsigned char checkFifoState()
              {
                  unsigned char i;
                  
                  RegByteOut(0x02, 0x00);
                  RegByteOut(0xB0, 0x81);
                  for (i = 0; i < 200; i++) {
                      if (!(RegByteIn(0xB0)&0x80)) {
                          return (RegByteIn(0x02)&0x03);
C51 COMPILER V6.23a  MODE                                                                  09/10/2004 16:09:01 PAGE 15  

                      }
                  }
                  return 0;
              }
              
              #endif
 867          
 868          
 869          /*********************************************
 870          * get default mode table                     *
 871          **********************************************/
 872          void getDefModeData(void)
 873          {
 874   1          unsigned char *regtbl;
 875   1      
 876   1              regtbl = (ModeTbl[CurrentMode&0x7f].modeptr) + MODEHSTART;
 877   1              eepModeData.def_hstart = eepModeData.hstart = ((unsigned int)*(regtbl+1)<<8) + *regtbl;
 878   1              eepModeData.def_vstart = eepModeData.vstart = *(regtbl+2);
 879   1              regtbl = ModeTbl[CurrentMode&0x7f].tdaptr;
 880   1              eepModeData.def_pitch = eepModeData.pitch = ((*(regtbl+TDA_DIVH_OFF)&0x07)<<8) + *(regtbl+TDA_DIVL_OFF);
 881   1              eepModeData.pitch_val = DEF_pitchval;
 882   1              eepModeData.def_phase =  eepModeData.phase = *(regtbl+TDA_PHASE_OFF);
 883   1              
 884   1              eepModeData.auto_counter = 0;
 885   1              eepModeData.dummy = 0xff;
 886   1      #if (DEBUGMSG >= 2)
                      printf("    getDefModeData pitch=%x phase=%x\n",eepModeData.pitch,(unsigned int)eepModeData.phase);
              #endif
 889   1      }
 890          
 891          
 892          
 893          /*
 894          void freeRunMode(void)
 895          {
 896                  freeRunFlag = 1;        
 897          
 898          #if PANEL_1280
 899                  TDADataTableOut(Mode48Tda);
 900                  RegDataTableOut(Mode1024Tbl);
 901          #else
 902                  TDADataTableOut(Mode27Tda);
 903                  RegDataTableOut(Mode768Tbl);
 904          #endif  
 905           
 906                  RegBitOut(0x1b,0x40,0x40);
 907                  RegByteOut(0x40,0x60);
 908          }
 909          */
 910          
 911          
 912          
 913          void checkVtotal(void)  //20030219
 914          {
 915   1              unsigned int vTotal;
 916   1      
 917   1      
 918   1              if ((RegByteIn(0x0f)&0x03)!= 0x02)
 919   1                      return;
 920   1      
 921   1      #if (DEBUGMSG>=2)
                      printf("\n   checkVtotal --------------->");
C51 COMPILER V6.23a  MODE                                                                  09/10/2004 16:09:01 PAGE 16  

              #endif
 924   1      
 925   1              RegByteOut(0xB1, 0x80);         // use threshold 
 926   1              RegByteOut(0xB9, 0x30);         // threshold value
 927   1              RegByteOut(0xB2, COLORCMPMASK);     // Set color compare mask
 928   1      
 929   1              RegByteOut(0xB0, 0x01);     // Enable total calibration
 930   1              RegByteOut(0x00, 0x00);     // Clear the calibration status reg
 931   1      
 932   1              if ( waitCalibReady(0x01) )
 933   1              {
 934   2                      RegDataIn(0xD0, buff+8, 3);
 935   2                      vTotal = ((unsigned int)(buff[10]&0x07)<<8) +buff[8];
 936   2              }
 937   1      
 938   1      #if (DEBUGMSG>=2)
                      printf(" vTotal = %d\n",vTotal);
              #endif
 941   1      
 942   1              RegByteOut(0xB0, 0x00);     // Disable total calibration
 943   1              RegByteOut(0x00, 0x00);     // Clear the calibration status reg
 944   1      
 945   1              if (vTotal < 30)
 946   1              {
 947   2                      InputPolarity = 0x02;
 948   2                      RegBitOut(0x32,0x00,0x04);
 949   2                      RegBitOut(0x18,0x00,0x80);
 950   2              }
 951   1      }
 952          
 953          
 954          
 955          
 956          
 957          
 958          
 959          
 960          #if CALCULATE_DCLK
 961          
 962          void calculateDCLK(void)
 963          {
 964   1      
 965   1              unsigned long Fout;
 966   1              unsigned char i;
 967   1      
 968   1              buff[10] = EA;
 969   1              EA = 0;
 970   1              RegByteOut(0x09,1);     //CR09, Vsync error
 971   1              RegByteOut(0x0A,1);     //CR0A, Hsync error
 972   1              RegByteOut(0x01, 0x00);
 973   1              miscDelay(60);
 974   1      
 975   1              for (i = 0;i < 100; i++)
 976   1              {
 977   2                      miscDelay(2);
 978   2                      if((RegByteIn(0x01)& 0x02))
 979   2                              break;
 980   2              }       
 981   1      
 982   1              RegDataIn(0x0B, buff, 5);
 983   1              VsyncCnt = buff[1]*0x100 + buff[0];
 984   1              HsyncCnt = buff[3]*0x100 + buff[2];
C51 COMPILER V6.23a  MODE                                                                  09/10/2004 16:09:01 PAGE 17  

 985   1      
 986   1              RegByteOut(0x09,VERRORRANGE);   //CR09, Vsync error
 987   1              RegByteOut(0x0A,HERRORRANGE);   //CR0A, Hsync error
 988   1              EA = buff[10];
 989   1      
 990   1      redo_DCLK:
 991   1      
 992   1              checkModeChange(); // by seven 030718 for calculateDCLK()
 993   1              if (modechangeflag) // by seven 030718 for calculateDCLK()
 994   1                      return;
 995   1      
 996   1              Fout = HsyncCnt * 22.88853;
 997   1              ival = ((unsigned int)RegByteIn(0x41) + 1) * 8;
 998   1      
 999   1      #if DEBUGMSG
                      printf("  Hsync(i) =  %ld,  Htotal(o) =  %d\n",Fout,ival);
              #endif
1002   1              Fout = Fout * ival / 1000;
1003   1              ival = (unsigned int)(RegByteIn(0x3B) << 8) + RegByteIn(0x3A) + 1;
1004   1              Fout *= PANEL_HEIGHT;
1005   1              Fout /= ival;
1006   1      
1007   1      #if DEBUGMSG
                      printf("  DCLK(o) ------------------>  %ld\n",Fout);
              #endif
1010   1      
1011   1              ival = Fout % 6000;
1012   1              if (ival > 5400 || ival < 600)
1013   1              {
1014   2                      RegByteOut(0x41,RegByteIn(0x41)+1);
1015   2      #if DEBUGMSG
                              printf("  redo  DCLK\n");
              #endif  
1018   2                      goto redo_DCLK;
1019   2              }
1020   1      
1021   1              ival1 = Fout*0.021; //value of N 
1022   1              ival2 = ival1>>8;
1023   1              
1024   1              RegByteOut(0x2B, 252);
1025   1              RegByteOut(0x2C, (unsigned char)ival1);
1026   1              RegByteOut(0x2D, (unsigned char)ival2);
1027   1              RegByteOut(0x2E, 0x32);
1028   1              RegByteOut(0x2F, 0x80);
1029   1      }
1030          
1031          #endif //CALCULATE_DCLK
1032          
1033          
1034          
1035          
1036          #if MODE_ADJ_BY_CALCULATE
1037          
1038          #define mt  ival
1039          #define nt  ival1
1040          
1041          #define NMUL    12              //12 
1042          #define MINM    0x4     //4
1043          #define MAXM    0xFF    //0xFF
1044          #define STEPM   2
1045          #define MAXN    0x7FF   //0xFFF
1046          
C51 COMPILER V6.23a  MODE                                                                  09/10/2004 16:09:01 PAGE 18  

1047          #if PANEL_1280
              #define ONELINEPIXELS           1314
              #define ONELINEERROR            10
              #else
1051          #define ONELINEPIXELS           1072
1052          #define ONELINEERROR            15
1053          #endif
1054          
1055          
1056          bit fineCalculateDCLK(void)
1057          {
1058   1      
1059   1          unsigned long F, fs, ft;
1060   1          unsigned char M; 
1061   1          unsigned int N;
1062   1          unsigned char i;
1063   1      
1064   1      //      return 1;
1065   1      
1066   1      redo_fineDCLK:
1067   1      
1068   1              checkModeChange(); // by seven 030718 for fineCalculateDCLK()
1069   1              if (modechangeflag) // by seven 030718 for fineCalculateDCLK()
1070   1                      return 1;
1071   1      
1072   1      //Read VsyncCnt and HsyncCnt
1073   1              buff[10] = EA;
1074   1              EA = 0;
1075   1              RegByteOut(0x09,1);     //CR09, Vsync error
1076   1              RegByteOut(0x0A,1);     //CR0A, Hsync error
1077   1              RegByteOut(0x01, 0x00);
1078   1              miscDelay(60);
1079   1      
1080   1              for (i = 0;i < 100; i++)
1081   1              {
1082   2                      miscDelay(2);
1083   2                      if((RegByteIn(0x01)& 0x02))
1084   2                              break;
1085   2              }
1086   1      
1087   1              RegDataIn(0x0B, buff, 5);
1088   1              VsyncCnt = buff[1]*0x100 + buff[0];
1089   1              HsyncCnt = buff[3]*0x100 + buff[2];
1090   1              RegByteOut(0x09,VERRORRANGE);   //CR09, Vsync error
1091   1              RegByteOut(0x0A,HERRORRANGE);   //CR0A, Hsync error
1092   1              EA = buff[10];
1093   1      
1094   1      //calculate Vtotal(i) and Vtotal(o)
1095   1              ival1 = (((unsigned long)HsyncCnt * VsyncCnt) >> 13);
1096   1              ival = (((unsigned long)HsyncCnt * VsyncCnt) % 8192);
1097   1              if (ival > 4096)        ival1++;                                                                        // ival1 = Vtotal(i)
1098   1              ival2 = (unsigned long)ival1 * PANEL_HEIGHT / CurrentHeight;    // ival2 = Vtotal(o)
1099   1      #if (DEBUGMSG >= 5)
                  printf("  Vtotal(i) = %d,   Vtotal(o) = %d \n", ival1, ival2);
              #endif  
1102   1      
1103   1      
1104   1      //get Vcount & Hcount
1105   1      #if (USE_TCON + USE_RSDS)
                      RegBitOut(0x24,0xc0,0xc0);
                      miscDelay(100);
              #endif
C51 COMPILER V6.23a  MODE                                                                  09/10/2004 16:09:01 PAGE 19  

1109   1              RegByteOut(0xb1,0x40);
1110   1              miscDelay(100);
1111   1      
1112   1              RegDataIn(0xf9,buff,3);
1113   1              ival  = (buff[0]<< 3) + (buff[2] & 0x07);
1114   1              ival1 = (buff[1]<< 3) + ((buff[2]>>4) & 0x07);
1115   1          RegByteOut(0xb1,0x00);
1116   1      
1117   1      #if (USE_TCON + USE_RSDS)
                      #if 1   //MVXPRL
                      RegBitOut(0x24, 0x80, 0xC0);   
                      #else
                      RegBitOut(0x24, 0x00, 0xC0);   
                      #endif 
              #endif
1124   1      
1125   1      #if (DEBUGMSG >= 5)
                  printf("  Vcount    = %d,  Hcount    = %d ", ival, ival1);
              #endif                          
1128   1              
1129   1              if (ival1 >= ONELINEPIXELS+ONELINEERROR)        ival--; 
1130   1              else if (ival1 >= ONELINEPIXELS-ONELINEERROR)
1131   1              {
1132   2      //-------------------------------------------------------------------------------------------
1133   2      //

⌨️ 快捷键说明

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