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

📄 scaler.lst

📁 车载DVD的主控MCU的源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 473          #if PanelInterface == TCON_TO_RSDS || PanelInterface == TCON_TO_TTL
              void WritePage563(unsigned char addr1,unsigned char addr2,unsigned char *p)
              {
              unsigned char i,ch;
                      IIC_Start();
                      IIC_Tx(SCALER_ADDR);
                      IIC_Tx(addr1);
                      for(i=0; i<16; i++){
                              ch = p[addr2 + i];
                              IIC_Tx(ch);
                      }
                      IIC_Stop();
C51 COMPILER V7.06   SCALER                                                                12/11/2007 11:28:43 PAGE 9   

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

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

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

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

⌨️ 快捷键说明

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