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

📄 scaler.lst

📁 NT68521源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -