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

📄 scaler.lst

📁 NT68521源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 219   1      #if Panel_Spread_Spect_En == 0xff
 220   1              i = (PanelSpreadSpectrumCtrl << 1) | BIT_0;
 221   1              WriteIIC_HW(Scaler_Addr,0xf5,i);
 222   1      #endif
 223   1              WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
 224   1      }
 225          #if Use_TCON != 0
              void WritePageScaler(unsigned char addr1,unsigned char addr2,unsigned char *p)
              {
              unsigned char i,ch;
              /* start bit */
              /* transmit device */
                      INTIIC1_FLG = 0xff;
                      IIC1_DATA = Scaler_Addr;
                      IIC1_CLK = 0x20 | IIC_BaudRate;
                      IIC1_CON = 0x00;
              /* transmit addr */
                      MasterSendByte(addr1);
              /* transmit data */
                      for(i=0; i<16; i++){
C51 COMPILER V7.50   SCALER                                                                03/18/2008 22:04:56 PAGE 5   

                              ch = p[addr2 + i];
                              MasterSendByte(ch);
                      }
              /* transmit dumy data for stop bit */
                      WaitTx();
              /* stop bit */
                      IIC1_CLK = 0xA0|IIC_BaudRate;
              //      IIC1_CON = 0x00;
                      WaitStop();
              }
              #endif
 250          void SetADC_Phase(void)
 251          {
 252   1              WriteIIC_HW(Scaler_Addr,0xFF,0x01); // page1 enable
 253   1              WriteIIC_HW(Scaler_Addr,0xD9,ADC_Phase);
 254   1              WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
 255   1      }
 256          
 257          void SetADC_PLL(void)
 258          {
 259   1      unsigned long PixelRate,H_Counter;
 260   1      unsigned short addr;
 261   1      unsigned char ch,k;
 262   1      float temp;
 263   1              PixelRate = ((unsigned long)HTotal * H_SYNC)/10000;
 264   1              ch = (unsigned char)PixelRate;
 265   1              WriteIIC_HW(Scaler_Addr,0xFF,0x01); // page1 enable
 266   1      //
 267   1              WriteIIC_HW(Scaler_Addr,0xd0,0x43);
 268   1      //out of range
 269   1              addr = 0x106 + (ModePoint * 8);
 270   1              k = Read24C16(addr);
 271   1              flag3 &= ~BIT_1;                //in range
 272   1              if((ch > P_Max)||(k == 9))
 273   1                      flag3 |= BIT_1;         //out of range
 274   1              if((H_SYNC > H_Max * 10)||(H_SYNC < H_Min * 10))
 275   1                      flag3 |= BIT_1;         //out of range
 276   1              if((V_SYNC > V_Max * 10)||(V_SYNC < V_Min * 10))
 277   1                      flag3 |= BIT_1;         //out of range
 278   1      //
 279   1              if((flag1 & BIT_1) == 0){
 280   2                      k = ReadIIC_HW(Scaler_Addr,0xd1) & 0x03;
 281   2              }
 282   1              else{
 283   2                      if(ch > 100){
 284   3                              WriteIIC_HW(Scaler_Addr,0xd1,0x10);
 285   3                              k = 0;
 286   3                      }
 287   2                      else if (ch > 50){
 288   3                              WriteIIC_HW(Scaler_Addr,0xd1,0x11);
 289   3                              k = 1;
 290   3                      }
 291   2                      else{
 292   3                              WriteIIC_HW(Scaler_Addr,0xd1,0x12);
 293   3                              k = 2;
 294   3                      }
 295   2              }
 296   1              if((flag3 & BIT_2) != 0x00){
 297   2                      printf("Htotal = %d\r\n",HTotal);
 298   2                      printf("PixelRate = %d MHz\r\n",(unsigned short)PixelRate);
 299   2              }
 300   1              if((SyncMode == 0)||(SyncMode == 3))
C51 COMPILER V7.50   SCALER                                                                03/18/2008 22:04:56 PAGE 6   

 301   1                      WriteIIC_HW(Scaler_Addr,0xd6,0xbf);
 302   1              else
 303   1                      WriteIIC_HW(Scaler_Addr,0xd6,0xa0);
 304   1              WriteIIC_HW(Scaler_Addr,0xdb,0x0c);
 305   1      
 306   1              if((flag1 & BIT_1) == 0){
 307   2      //
 308   2                      if((SyncMode == 1)||(SyncMode == 2)){ //H+V SOG
 309   3                              WriteIIC_HW(Scaler_Addr,0xd5,0x0D);
 310   3                      }
 311   2                      else{
 312   3                              if((HV_Pol & BIT_4) == 0){
 313   4                                      WriteIIC_HW(Scaler_Addr,0xd5,0x05);
 314   4                              }
 315   3                              else{
 316   4                                      WriteIIC_HW(Scaler_Addr,0xd5,0x0d);
 317   4                              }
 318   3                      }
 319   2      //
 320   2                      ch = ReadIIC_HW(Scaler_Addr,0xdf) & 0x3f;
 321   2                      PixelRate = ch;
 322   2                      PixelRate <<= 8;
 323   2                      ch = ReadIIC_HW(Scaler_Addr,0xde);
 324   2                      PixelRate += ch;
 325   2                      PixelRate <<= 8;
 326   2                      ch = ReadIIC_HW(Scaler_Addr,0xdd);
 327   2                      PixelRate += ch;
 328   2              }
 329   1              else{
 330   2                      WriteIIC_HW(Scaler_Addr,0xd5,0x00);
 331   2                      H_Counter = 0;
 332   2                      Timer3 = 25;
 333   2                      while(Timer3 != 0){
 334   3                              ch = ReadIIC_HW(Scaler_Addr,0xdf) & 0x3f;
 335   3                              PixelRate = ch;
 336   3                              PixelRate <<= 8;
 337   3                              ch = ReadIIC_HW(Scaler_Addr,0xde);
 338   3                              PixelRate += ch;
 339   3                              PixelRate <<= 8;
 340   3                              ch = ReadIIC_HW(Scaler_Addr,0xdd);
 341   3                              PixelRate += ch;
 342   3              
 343   3                              if(PixelRate > H_Counter){
 344   4                                      if((PixelRate - H_Counter ) >  2){
 345   5                                              H_Counter = PixelRate;
 346   5                                              Timer3 = 25;
 347   5                                      }
 348   4                              }
 349   3                              else{
 350   4                                      if((H_Counter - PixelRate ) >  2){
 351   5                                              H_Counter = PixelRate;
 352   5                                              Timer3 = 25;
 353   5                                      }
 354   4                              }
 355   3                      }
 356   2              }
 357   1              if((flag3 & BIT_2) != 0x00){
 358   2                      printf("Hcounter = %x %x\r\n",(unsigned short)(PixelRate>>16),(unsigned short)PixelRate);
 359   2              }
 360   1              temp = ((float)HTotal * 536870912) / PixelRate;
 361   1              PixelRate = temp;
 362   1              if((flag3 & BIT_2) != 0x00){
C51 COMPILER V7.50   SCALER                                                                03/18/2008 22:04:56 PAGE 7   

 363   2                      printf("DSS = %x %x\r\n",(unsigned short)(PixelRate>>16),(unsigned short)PixelRate);
 364   2              }
 365   1              for(k; k>0; k--){
 366   2                      PixelRate <<= 1;
 367   2              }
 368   1              WriteIIC_HW(Scaler_Addr,0xd2,(unsigned char)PixelRate);
 369   1              WriteIIC_HW(Scaler_Addr,0xd3,(unsigned char)(PixelRate>>8));
 370   1              WriteIICV_HW(Scaler_Addr,0xd4,(unsigned char)(PixelRate>>16));
 371   1      
 372   1              WriteWordIIC_HW(Scaler_Addr,0xd7,HTotal);
 373   1      //
 374   1              if((SyncMode == 1)||(SyncMode == 2)){ //H+V SOG
 375   2                      WriteIIC_HW(Scaler_Addr,0xd5,0x0D);
 376   2              }
 377   1              else{
 378   2                      if((HV_Pol & BIT_4) == 0){
 379   3                              WriteIIC_HW(Scaler_Addr,0xd5,0x07);
 380   3                      }
 381   2                      else{
 382   3                              WriteIIC_HW(Scaler_Addr,0xd5,0x0F);
 383   3                      }
 384   2              }
 385   1      
 386   1              WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
 387   1      }
 388          
 389          void SetScaler(void)
 390          {
 391   1      unsigned char r;
 392   1      unsigned short i,DispActiveHeight,dstVtotal,DV_HFreq,dstHtotal;
 393   1      unsigned long dclk,temp;
 394   1              if(ModePoint >= ModeNum)//define ModeMun 50    
 395   1                      return;
 396   1              if(SyncMode != 3)
 397   1      //0 = Separate H & V
 398   1      //1 = H+V
 399   1      //2 = Sync on green
 400   1              {
 401   2                      SetHP();
 402   2                      SetVP();
 403   2              }
 404   1      // WriteIIC_HW(Scaler_Addr,0x88,0xc8);
 405   1      // Window size
 406   1              i = 0x106 + (ModePoint * 8);
 407   1              r = Read24C16(i);
 408   1              H_Act = H_ActiveTab[r];
 409   1              if((flag3 & BIT_2) != 0x00){
 410   2                      printf("Resolution = %d x %d\r\n",H_ActiveTab[r],V_ActiveTab[r]);
 411   2              }
 412   1              if((flag3 & BIT_6) != 0){
 413   2                      WriteWordIIC_HW(Scaler_Addr,0x16,V_ActiveTab[r]>>1);            // Capture V_Active
 414   2              }
 415   1              else{
 416   2                      WriteWordIIC_HW(Scaler_Addr,0x16,V_ActiveTab[r]);               // Capture V_Active
 417   2              }
 418   1              WriteWordIIC_HW(Scaler_Addr,0x1a,H_ActiveTab[r]);               // Capture H_Active
 419   1      // DCLK
 420   1              dclk = ((unsigned long)PanelHeight * VTotal / V_ActiveTab[r]) * V_SYNC * PanelMinHTotal / 10000;        //KHz
 421   1              DispActiveHeight = PanelHeight; // set the vertical active height to the Panel Height
 422   1      /*************************************************************************/
 423   1              if(dclk > PanelMaxPClk){                            
 424   2                      DispActiveHeight = (unsigned long)PanelHeight * PanelMaxPClk / dclk;
C51 COMPILER V7.50   SCALER                                                                03/18/2008 22:04:56 PAGE 8   

 425   2                      dclk = PanelMaxPClk;
 426   2              }
 427   1      /*****************************************************************************/
 428   1              dclk = dclk / 1000 - 1;
 429   1              dclk = (dclk + 2) * 1000;
 430   1      // calculate new dst vtotal
 431   1              dstVtotal = ((((unsigned long)VTotal * DispActiveHeight) << 4) / V_ActiveTab[r] + 8) >> 4;      //add .5 for r
             -ounding, make even    
 432   1              if(dstVtotal < PanelMinVTotal){
 433   2                      dstVtotal = PanelMinVTotal;
 434   2                      DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
 435   2                      dclk = ((unsigned long)DV_HFreq * PanelMinHTotal) / 10; //KHz
 436   2                      dclk = dclk / 1000 - 1;
 437   2                      dclk = (dclk + 2) * 1000;
 438   2              }
 439   1              else{
 440   2      // HFreq
 441   2                      DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
 442   2              }
 443   1      // Htotal
 444   1              dstHtotal = PanelMaxHTotal;
 445   1              for(i=PanelMinHTotal; i<PanelMaxHTotal; i=i+2){

⌨️ 快捷键说明

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