autoadj.lst

来自「NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码N」· LST 代码 · 共 1,316 行 · 第 1/5 页

LST
1,316
字号
 247   2                      WriteIIC_HW(Scaler_Addr,0x1F,0x00);
 248   2                      WriteIIC_HW(Scaler_Addr,0x1E,0x09);
 249   2                      Timer3 = 10;
 250   2                      while(!(ReadIIC_HW(Scaler_Addr,0x1F) & BIT_0) && Timer3 != 0){
 251   3                              CheckModeChange();
 252   3                              if((flag2 & BIT_0) != 0)
 253   3                                      return;
 254   3                      }
 255   2                      if(Timer3 == 0){
 256   3                              flag2 |= BIT_0;
 257   3                              return;
 258   3                      }
 259   2                      H_Act = ReadWordIIC_HW(Scaler_Addr,0x38) & 0x07ff;
 260   2                      H_Difference = ReadIIC_HW(Scaler_Addr,0x1F);
 261   2                      Compare = (H_Difference & 0x0C) >> 2;
 262   2                      H_Difference = (H_Difference & 0xF0) >> 4;
 263   2                      if((flag3 & BIT_2) != 0x00){    
 264   3                              printf("PLL_Divider = %d\r\n",PLL_Divider);
 265   3                              printf("H_Act = %d\r\n",H_Act);
 266   3                              printf("H_Difference = %d\r\n",(unsigned short)H_Difference);
 267   3                      }
 268   2                      if(Compare==0x01){
 269   3                              break; //H_Ref=H_Act
 270   3                      }
 271   2                      if(Compare==0x00){
 272   3      //                      if(H_Difference == 0x01)
 273   3      //                              break;
 274   3                              HTotal = HTotal + H_Difference;
 275   3                              if(HTotal > 2048){
 276   4                                      i = 0xff;
 277   4                                      break;
 278   4                              }
C51 COMPILER V7.20   AUTOADJ                                                               09/14/2004 12:20:56 PAGE 18  

 279   3                      }
 280   2                      if(Compare == 0x02){
 281   3      //                      if(H_Difference == 0x01)
 282   3      //                              break;
 283   3                              HTotal = HTotal - H_Difference;
 284   3                              if(HTotal < H_Ref){
 285   4                                      i = 0xff;
 286   4                                      break;
 287   4                              }
 288   3                      }
 289   2                      SetADC_PLL();
 290   2                      if((flag3 & BIT_1) != 0){
 291   3                              flag2 |= BIT_0;
 292   3                              return;
 293   3                      }
 294   2              }
 295   1              if(i == 0xff){
 296   2                      NonFullScreen = 1;
 297   2                      flag2 |= BIT_0;
 298   2                      if((flag3 & BIT_2) != 0x00){
 299   3                              printf("Nono full screen H\r\n");
 300   3                      }
 301   2              }
 302   1              else{
 303   2      #if 1
 304   2                      HTotal = (HTotal + 2) & 0xfffc;
 305   2      #else
                              HTotal = (HTotal + 1) & 0xfffe;
              #endif
 308   2                      SetADC_PLL();
 309   2                      if((flag3 & BIT_1) != 0){
 310   3                              flag2 |= BIT_0;
 311   3                              return;
 312   3                      }
 313   2                      if((flag3 & BIT_2) != 0x00){
 314   3                              printf("H_Total = %d\r\n",HTotal);
 315   3                      }
 316   2              }
 317   1      }
 318          
 319          void AutoPhaseFineTune(void)
 320          {
 321   1      unsigned char   qq,yy,zz,uu,i;
 322   1      unsigned long   Phase_0, Phase_1, Phase_2, Phase_Pre3, Phase_Now3, Phase_Delta;
 323   1      unsigned char   value;
 324   1              if((flag2 & BIT_0) != 0x00)
 325   1                      return;
 326   1              if((flag3 & BIT_2) != 0x00){
 327   2                      printf("Auto Phase Fine Tune\r\n");
 328   2              }
 329   1      //-------------------------at color xx , calculate phase-------------------------
 330   1          Phase_1 = 0x00000000;   // (i-1)
 331   1          Phase_2 = 0x00000000;   // (i-2)
 332   1          Phase_Pre3 = 0x00000000;   // (pre sum)->(delta)->(now sum)
 333   1          Phase_Delta = 0xffffffff;   // (min delta)
 334   1      //      ADC_Phase =( ADC_Phase - 6) & 0x3F; // 3 is search range....
 335   1              qq = ADC_Phase;
 336   1      //      SetADC_Phase();
 337   1              WriteIIC_HW(Scaler_Addr,0x20,0x01); // 0x01 --> 0x09
 338   1              Timer3 = 100;
 339   1      //      for(yy=1; yy<16; yy++){
 340   1              for(yy=1; yy<Repeat; yy++){
C51 COMPILER V7.20   AUTOADJ                                                               09/14/2004 12:20:56 PAGE 19  

 341   2                      while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
 342   3                              CheckModeChange();
 343   3                              if((flag2 & BIT_0) != 0)
 344   3                                      return;
 345   3                      }
 346   2                      ADC_Phase = (qq + yy) & 0x3f;
 347   2                      SetADC_Phase();
 348   2                      WriteIIC_HW(Scaler_Addr,0x20,0x01); // 0x01 --> 0x09
 349   2                      Timer3 = 100;
 350   2                      Phase_Now3  = 0x00000000;
 351   2                      for (zz=0x24; zz>0x20; zz--){
 352   3                              value = ReadIIC_HW(Scaler_Addr,zz);
 353   3                          Phase_Now3  = Phase_Now3 << 8;
 354   3                          Phase_Now3  |= value;
 355   3                      }
 356   2                      i = (ADC_Phase - 1) & 0x3f;
 357   2                      if((flag3 & BIT_2) != 0x00)
 358   2                              printf("Phase %d = %x %x\r\n",(unsigned short)i,(unsigned short)(Phase_Now3>>16),(unsigned short)Phase_
             -Now3);        
 359   2              Phase_2 = Phase_1;  // Shift    
 360   2              Phase_1 = Phase_0;
 361   2              Phase_0 = Phase_Now3;
 362   2                      Phase_Now3 = (Phase_0>>1) + (Phase_1>>1) + (Phase_2>>2); // Phase_Now3
 363   2                      if(yy < 4){
 364   3                              Phase_Pre3  = Phase_Now3;   // Phase_Pre3 = Phase_Now3
 365   3                      }
 366   2                      else{
 367   3                              if(Phase_Now3 > Phase_Pre3){
 368   4                                      Phase_Pre3  = Phase_Now3 - Phase_Pre3;
 369   4                              }
 370   3                              else{
 371   4                                      Phase_Pre3  = Phase_Pre3 - Phase_Now3;  // Phase_Pre3=delta
 372   4                              }
 373   3                              if(Phase_Pre3 < Phase_Delta){
 374   4                                      uu = i;           
 375   4                                      Phase_Delta = Phase_Pre3;
 376   4                              }
 377   3                              Phase_Pre3  = Phase_Now3;   // Phase_Pre3 = Phase_Now3
 378   3                      }     
 379   2              }
 380   1              ADC_Phase = (uu - 2) & 0x3f;
 381   1              SetADC_Phase();
 382   1              if((flag3 & BIT_2) != 0x00)
 383   1                      printf("Phase ok = %d\r\n",(unsigned short)ADC_Phase);
 384   1      }
 385          
 386          void SetADC_Offset(unsigned char OffSet)
 387          {
 388   1      unsigned char i,j,k,m,n,value;
 389   1      unsigned long PhaseResult,Temp;
 390   1      //      WriteIIC_HW(Scaler_Addr,0x02,0x36);
 391   1      //      WriteIIC_HW(Scaler_Addr,0x04,0x35);
 392   1      //      WriteIIC_HW(Scaler_Addr,0x06,0x37);
 393   1              WriteIIC_HW(Scaler_Addr,0x26,0x00);
 394   1              WriteIIC_HW(Scaler_Addr,0x27,0x00);
 395   1              for(m=0; m<3; m++){
 396   2                      for(k=OffSet; k<128; k=k+8){
 397   3                              i = 0x0f + m;
 398   3                              WriteIIC_HW(Scaler_Addr,i,k);
 399   3                              WaitSetup(5);
 400   3                              Timer3 = 10;
 401   3                              i = 0x19 + m * 0x10;
C51 COMPILER V7.20   AUTOADJ                                                               09/14/2004 12:20:56 PAGE 20  

 402   3                              WriteIIC_HW(Scaler_Addr,0x20,i);
 403   3                              while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
 404   4                                      CheckModeChange();
 405   4                                      if((flag2 & BIT_0) != 0)
 406   4                                              return;
 407   4                              }
 408   3                              if(Timer3 == 0){
 409   4                                      flag2 |= BIT_0;
 410   4                                      return;
 411   4                              }
 412   3                              j = 0;
 413   3                              Temp = 0;
 414   3                              for(i=0; i<8; i++){
 415   4                                      WriteIIC_HW(Scaler_Addr,0x24,i);
 416   4                                      value = ReadIIC_HW(Scaler_Addr,0x23);
 417   4                                      PhaseResult = value;
 418   4                                      PhaseResult <<= 8;
 419   4                                      value = ReadIIC_HW(Scaler_Addr,0x22);
 420   4                                      PhaseResult += value;
 421   4                                      PhaseResult <<= 8;
 422   4                                      value = ReadIIC_HW(Scaler_Addr,0x21);
 423   4                                      PhaseResult += value;
 424   4                                      if(PhaseResult > Temp){
 425   5                                              Temp = PhaseResult;
 426   5                                              j = i;
 427   5                                      }
 428   4                              }
 429   3                              if(Temp > 0x300){
 430   4                                      i = 0x0f + m;
 431   4                                      j = k+j;
 432   4                                      WriteIIC_HW(Scaler_Addr,i,j);
 433   4                                      break;
 434   4                              }
 435   3                      }
 436   2                      if(k == 128){
 437   3                              flag2 |= BIT_0;
 438   3                              return;
 439   3                      }
 440   2                      for(n=0; n<8; n++){
 441   3                              i = 0x0f + m;
 442   3                              WriteIIC_HW(Scaler_Addr,i,k+n);
 443   3                              WaitSetup(5);
 444   3                              Timer3 = 10;
 445   3                              i = 0x19 + m * 0x10;
 446   3                              WriteIIC_HW(Scaler_Addr,0x20,i);
 447   3                              while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
 448   4                                      CheckModeChange();
 449   4                                      if((flag2 & BIT_0) != 0)
 450   4                                              return;
 451   4                              }
 452   3                              if(Timer3 == 0){
 453   4                                      flag2 |= BIT_0;
 454   4                                      return;
 455   4                              }
 456   3                              j = 0;
 457   3                              Temp = 0;
 458   3                              for(i=0; i<8; i++){
 459   4                                      WriteIIC_HW(Scaler_Addr,0x24,i);
 460   4                                      value = ReadIIC_HW(Scaler_Addr,0x23);
 461   4                                      PhaseResult = value;
 462   4                                      PhaseResult <<= 8;
 463   4                                      value = ReadIIC_HW(Scaler_Addr,0x22);
C51 COMPILER V7.20   AUTOADJ                                                               09/14/2004 12:20:56 PAGE 21  

 464   4                                      PhaseResult += value;
 465   4                                      PhaseResult <<= 8;
 466   4                                      value = ReadIIC_HW(Scaler_Addr,0x21);
 467   4                                      PhaseResult += value;
 468   4                                      if(PhaseResult > Temp){
 469   5                                              Temp = PhaseResult;
 470   5                                              j = i;
 471   5                                      }
 472   4                              }
 473   3                              if(j == 0){
 474   4                                      break;
 475   4                              }
 476   3                      }
 477   2                      i = 0x0f + m;
 478   2                      j = k+n;
 479   2                      WriteIIC_HW(Scaler_Addr,i,j);
 480   2              }
 481   1              Write24C16(0xfa,ReadIIC_HW(Scaler_Addr,0x0f));
 482   1              Write24C16(0xfb,ReadIIC_HW(Scaler_Addr,0x10));
 483   1              Write24C16(0xfc,ReadIIC_HW(Scaler_Addr,0x11));
 484   1      }
 485          
 486          void SetADC_Gain(unsigned char OffSet)
 487          {
 488   1      unsigned char i,j,k,m,n,value;
 489   1      unsigned long PhaseResult,Temp;
 490   1              WriteIIC_HW(Scaler_Addr,0x26,0x00);
 491   1              WriteIIC_HW(Scaler_Addr,0x27,0xf8);
 492   1              for(m=0; m<3; m++){
 493   2                      for(k=OffSet; k>7; k=k-8){
 494   3                              i = 0x02 + m * 2;
 495   3                              WriteIIC_HW(Scaler_Addr,i,k);
 496   3                              WaitSetup(5);
 497  

⌨️ 快捷键说明

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