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

📄 scaler.lst

📁 车载SCALER模块源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      IIC_Tx(SCALER_ADDR);
                      IIC_Tx(addr1);
                      for(i=0; i<16; i++){
                              ch = p[addr2 + i];
                              IIC_Tx(ch);
                      }
                      IIC_Stop();
              }
              #endif
 480          /*==========================================
 481          ==========================================*/
 482          void SetADC_Phase(void)
 483          {
 484   1              WriteIIC563(0x0d9,FuncBuf[pPHASE]);
C51 COMPILER V7.06   SCALER                                                                10/16/2007 19:09:01 PAGE 9   

 485   1      }
 486          /*==========================================
 487          ==========================================*/
 488          /*
 489          Byte Check_HFreqRange(void)
 490          {
 491          //first priority
 492                  if((H_SYNC > H_OverMuteScreenLimit)||(H_SYNC < H_UnderMuteScreenLimit))
 493                          return OverRangeMuteScreen;
 494                  //if((H_SYNC > H_OverNormalDisplayLimit)||(H_SYNC < H_UnderNormalDisplayLimit))
 495                          //return OverRangeWithCanDisplay;
 496                  return Within_range;
 497          }
 498          */
 499          /*==========================================
 500          ==========================================*/
 501          /*
 502          Byte Check_VFreqRange(void)
 503          {
 504          //first priority
 505                  if((V_SYNC > V_OverMuteScreenLimit)||(V_SYNC < V_UnderMuteScreenLimit))
 506                          return OverRangeMuteScreen;
 507          
 508          // y050818,Eason
 509          //      if (Hresolution==PanelWidth&& Vresolution==PanelHeight &&abs(V_SYNC-850)<10){
 510          //              return OverRangeMuteScreen;
 511          //      }else
 512          //      if((V_SYNC > V_OverNormalDisplayLimit)||(V_SYNC < V_UnderNormalDisplayLimit))
 513          //              return OverRangeWithCanDisplay;
 514          
 515                  return Within_range;
 516          }
 517          */
 518          /*==========================================
 519          ==========================================*/
 520          /*
 521          Byte Check_PixelRange(Byte Pixel)
 522          {
 523          //first priority
 524                  if((Pixel > MaxPixelClock)||(Hresolution> Rel_OverMuteScreenLimit))
 525                          return OverRangeMuteScreen;
 526                  //if(Hresolution> Rel_OverNormalDisplayLimit)
 527                          //return OverRangeWithCanDisplay;
 528                  return Within_range;
 529          }
 530          */
 531          /*==========================================
 532          ==========================================*/
 533          /*
 534          void CheckFreqRange(Byte Pixel)
 535          {
 536                  if(Check_HFreqRange()==OverRangeMuteScreen||Check_VFreqRange()==OverRangeMuteScreen||Check_PixelRange(Pix
             -el)==OverRangeMuteScreen){
 537                          OutOfRange=OverRangeMuteScreen;
 538                          return;
 539                  }
 540                  //if(Check_HFreqRange()==OverRangeWithCanDisplay||Check_VFreqRange()==OverRangeWithCanDisplay||Check_Pixe
             -lRange(Pixel)==OverRangeWithCanDisplay){
 541                          //OutOfRange=OverRangeWithCanDisplay;
 542                          //return;
 543                  //}
 544                  OutOfRange=Within_range;
C51 COMPILER V7.06   SCALER                                                                10/16/2007 19:09:01 PAGE 10  

 545          }
 546          */
 547          /*==========================================
 548          ==========================================*/
 549          void SetScaler(void)
 550          {
 551   1              unsigned char temp154,ch;
 552   1              unsigned short DispActiveHeight,dstVtotal,DV_HFreq,dstHtotal;
 553   1              unsigned long dclk;
 554   1              //,old_ratio,new_ratio,delta;//,i
 555   1              float temp;
 556   1              //xdata unsigned short Hr;
 557   1      
 558   1           if(SyncMode < 3){       //y50316 error setting in DVI mdeo kevin
 559   2                  ch = ReadIIC563(0x020);
 560   2                  if(ReadIIC563(0x19a) & BIT_2){
 561   3      //                Interlance = 1;                           //kevin
 562   3                        Interlance = 0;                           //1280*1024 soft power Off/On abnormal
 563   3      //                WriteIIC563(0x020,ch|BIT_2);        //1280*1024 soft power Off/On abnormal
 564   3                  }else{
 565   3                        Interlance = 0;
 566   3                        WriteIIC563(0x020,ch);
 567   3                  }
 568   2                        Interlance = 0;
 569   2            }
 570   1      
 571   1              if(SyncMode != 3){
 572   2                      SetHP();
 573   2                      SetVP();
 574   2              }
 575   1      //      H_Act = H_ActiveTab[ResolutionPtr];
 576   1              if(Interlance){
 577   2                      WriteWordIIC563(0x032,Vresolution);             // Capture V_Active
 578   2              }else{
 579   2                      WriteWordIIC563(0x032,Vresolution);             // Capture V_Active
 580   2              }
 581   1              WriteWordIIC563(0x036,Hresolution);             // Capture H_Active
 582   1              WriteWordIIC563(0x175,PanelWidth);              // Display H_Active
 583   1              
 584   1              dclk = (unsigned long)PanelHeight *VTotal ;// / Vresolution) * V_SYNC * PanelTypHTotal / 10;    //Hz
 585   1              dclk = (unsigned long)dclk / Vresolution;//) * V_SYNC * PanelTypHTotal / 10;    //Hz
 586   1              dclk = (unsigned long)dclk * V_SYNC;// * PanelTypHTotal / 10;   //Hz
 587   1              dclk = (unsigned long)dclk * PanelMinHTotal;// / 10;    //Hz
 588   1              dclk = (unsigned long)dclk / 10;        //Hz
 589   1              if(Interlance){
 590   2                      dclk = dclk*2;
 591   2              }
 592   1              DispActiveHeight = PanelHeight;                         // set the vertical active height to the Panel Height
 593   1      
 594   1              dstHtotal = PanelMinHTotal;
 595   1      // calculate dst vtotal
 596   1              dstVtotal = ((((unsigned long)VTotal * DispActiveHeight ) << 4) / Vresolution + 8)>> 4;
 597   1              if(dclk < PanelMinPClk){
 598   2                      dstHtotal = PanelTypHTotal;
 599   2                      dclk = ((unsigned long)dstHtotal * dstVtotal * V_SYNC + 5) / 10;
 600   2              }else if(dclk > PanelMaxPClk){
 601   2                      dstHtotal = PanelLowHTotal;
 602   2                      dclk = PanelMaxPClk;            
 603   2              }
 604   1              if(dstVtotal < PanelMinVTotal)
 605   1              {
 606   2                      dstVtotal = PanelMinVTotal;
C51 COMPILER V7.06   SCALER                                                                10/16/2007 19:09:01 PAGE 11  

 607   2                      dstHtotal = PanelMinHTotal;
 608   2                      dclk = ((unsigned long)PanelMinHTotal * dstVtotal * V_SYNC + 5) / 10;
 609   2                      DV_HFreq = dclk / PanelMinHTotal / 100;
 610   2              }else
 611   1                      DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC/1000);
 612   1              if(SyncMode<3)
 613   1              {
 614   2              WriteIIC563(0x0f5,ReadIIC563(0x0f5) & (~BIT_0));        // Disable SSC_EN
 615   2              temp154 = ReadIIC563(0x154);
 616   2              WriteIIC563(0x154,temp154 & 0xfc);      //Normal display
 617   2              temp = ((float)dstHtotal-0.1) * PanelHeight * 4096 / H_Counter / Vresolution;
 618   2              dclk = (unsigned long)(temp * 12000000);
 619   2              }
 620   1              Sleep(80);
 621   1              //SetDPLL(dclk);
 622   1              SetDPLL(33200000);
 623   1              //SetDPLL(30000000);
 624   1      /*      
 625   1              if((FuncBuf[pVIDEOSOURCE]==SourceDVI) && (ReadIIC563(0x19a) & BIT_3) ==0x00)
 626   1              {
 627   1                      Hr = ReadWordIIC563(0x184);
 628   1                      dstHtotal = ReadWordIIC563(0x182);
 629   1                      old_ratio = ReadWordIIC563(0x0f3);
 630   1                      old_ratio <<=8;
 631   1                      ch = ReadIIC563(0x0f2);
 632   1                      old_ratio += ch;
 633   1                      delta = old_ratio * Hr / dstHtotal / PanelHeight;
 634   1                      new_ratio = old_ratio - delta;
 635   1                      WriteIIC563(0x0f2,(unsigned char)new_ratio);
 636   1                      WriteIIC563(0x0f3,(unsigned char)(new_ratio >> 8));
 637   1                      WriteIIC563(0x0f4,(unsigned char)(new_ratio >> 16));
 638   1                      WriteWordIIC563(0x15e,dstHtotal-1);
 639   1                      WriteIIC563(0x150, ReadIIC563(0x150)&0xdf);
 640   1              }
 641   1      */      
 642   1      /*      
 643   1              Hr = ReadIIC563(0x184)+(ReadIIC563(0x185)*256);
 644   1              if(Hr < 0x80)
 645   1              {
 646   1                      temp = (float)dclk * (abs(0x80-Hr));
 647   1                      temp2 = temp / ((unsigned long)PanelHeight*dstHtotal);
 648   1                      dclk += temp2;
 649   1                      SetDPLL(dclk);
 650   1                      Sleep(80);
 651   1              }
 652   1              else if (Hr > (PanelHeight - 0x80))
 653   1              {
 654   1                      temp = (float)dclk * (abs(Hr-0x380));
 655   1                      temp2 = temp / ((unsigned long)PanelHeight*dstHtotal);
 656   1                      dclk -= temp2;
 657   1                      SetDPLL(dclk);
 658   1                      Sleep(80);
 659   1              }
 660   1      */      
 661   1      #if Panel_Spread_Spect_En == 0xff
 662   1              WriteIIC563(0x0f5,ReadIIC563(0x0f5)|BIT_0);
 663   1      #endif
 664   1              WriteIIC563(0x154,temp154);     
 665   1              if(!DetectBacklight()){
 666   2                      WriteIIC563(0x154,0x02);
 667   2              }
 668   1              WriteWordIIC563(0x15b,dstVtotal);                               // Display Vtotal
C51 COMPILER V7.06   SCALER                                                                10/16/2007 19:09:01 PAGE 12  

 669   1              if(dstHtotal < PanelMinHTotal){                                         //y50819 for 2 msg display same time
 670   2                      dstHtotal = PanelMinHTotal;
 671   2              }
 672   1              WriteWordIIC563(0x15e,dstHtotal);                               // Display Htotal
 673   1      }
 674          
 675          void SetADC_PLL(void)
 676          {
 677   1              Byte code DpllSeqTab[4]={100,50,20,0};
 678   1              unsigned long PixelRate,LineCounter;
 679   1              Byte ch,k;
 680   1              float temp;
 681   1      
 682   1              PixelRate = ((unsigned long)FuncBuf[pCLOCK] * H_SYNC)/10000;
 683   1              ch = (unsigned char)PixelRate;
 684   1              WriteIIC563(0x0d0,0x23);
 685   1              //CheckFreqRange(ch);
 686   1              //----------------------------------
 687   1              if(ForceToBack == 0){
 688   2                      k = ReadIIC563(0x0d1);
 689   2                      k &= 0x03;
 690   2              }else{
 691   2                      for(k=0;k<4;k++)
 692   2                              if(ch > DpllSeqTab[k])
 693   2                                      break;
 694   2                      WriteIIC563(0x0d1,0x10+k);
 695   2              }
 696   1              WriteIIC563(0x0d6,0xc0);
 697   1              WriteIIC563(0x0db,0x0c);
 698   1              LineCounter = 4096;
 699   1              ch = ReadIIC563(0x102);
 700   1              WriteIIC563(0x102,ch|BIT_5);
 701   1              Sleep(5);
 702   1              WriteIIC563(0x102,ch);
 703   1              if(ForceToBack != 0){
 704   2                      WriteIIC563(0x0d5,0x01);
 705   2                      H_Counter = 0;
 706   2                      if((FuncBuf[pVIDEOSOURCE] == SourceDVI) && (ReadIIC563(0x19a) & BIT_3) ==0x00)
 707   2                      {
 708   3                              PixelRate = ReadWordIIC563(0x19b) & 0x1fff;
 709   3                              if((PixelRate == 0x1fff)||(PixelRate == 0))

⌨️ 快捷键说明

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