📄 mode.lst
字号:
}
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 + -