欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

display.lst

宏芯T102芯片驱动(51单片机作主控)
LST
第 1 页 / 共 2 页
字号:
              #endif
 239   1      }
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 5   

 240          
 241          void DisplaySetTiming(uWORD wDHTotal, uWORD wDVTotal)
 242          {
 243   1              uWORD wTemp;
 244   1      
 245   1              if(wDHTotal>2400 || wDHTotal<600)       return; //unreasonable result
 246   1      
 247   1              wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2; 
 248   1              I2CWriteByte(TW101, 0xB0, wTemp);
 249   1              I2CWriteByte(TW101, 0xB1, wTemp>>8);
 250   1      
 251   1              I2CWriteByte(TW101, 0xB2, DWVSST);
 252   1      
 253   1      #ifdef WVGA
 254   1      //Ruby test 2004-06-03
 255   1         if(!m_cStandard)//NTSC
 256   1                      I2CWriteByte(TW101, 0xB2, DWVSST);
 257   1         else //PAL
 258   1                      I2CWriteByte(TW101, 0xB2, DWVSST-4);
 259   1      /////
 260   1      #endif
 261   1      
 262   1      
 263   1      #ifdef AU_7
                  if((m_cScaleratio==Scale4_3)&&(!m_cStandard))//NTSC
                              I2CWriteByte(TW101, 0xB2, DWVSST-1);
              #endif
 267   1      
 268   1              I2CWriteByte(TW101, 0xB3, 0);
 269   1      
 270   1              I2CWriteByte(TW101,0xB4,(uCHAR)(m_wDWHSZ));     //4:3
 271   1              I2CWriteByte(TW101,0xB5,(uCHAR)(m_wDWHSZ>>8));
 272   1              I2CWriteByte(TW101, 0xB8, (unsigned char) wDHTotal);
 273   1      
 274   1      
 275   1              I2CWriteByte(TW101, 0xB9, (unsigned char)(wDHTotal>>8));
 276   1              
 277   1              I2CWriteByte(TW101, 0xBA, (unsigned char) wDVTotal);
 278   1              I2CWriteByte(TW101, 0xBB, (unsigned char)(wDVTotal>>8));         
 279   1                    
 280   1              I2CWriteByte(TW101, 0xBC, (unsigned char) DISP_DFLT_HSWIDTH);
 281   1              I2CWriteByte(TW101, 0xBD, (unsigned char)(DISP_DFLT_HSWIDTH>>8));
 282   1              
 283   1              I2CWriteByte(TW101, 0xBE, (unsigned char) DISP_DFLT_VSWIDTH);
 284   1              I2CWriteByte(TW101, 0xBF, (unsigned char)(DISP_DFLT_VSWIDTH>>8));
 285   1      #ifdef LOAD_TIME
                      if(!m_cStandard)   
                      {
                         if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX))==Panel_ID)
                         {
                          I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8));
                              I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2));
                         }
                  }
                      else
                      {
                         if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX1))==Panel_ID)
                         {
                              I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8_PAL));
                              I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2_PAL));
                         }
                  }
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 6   

              #endif
 303   1      }
 304          
 305          float DisplayGetHVTotal(uWORD *wDHTotal, uWORD *wDVTotal, uWORD *wDVFrac, uWORD wDWVSZ, uDWORD dwFrameXclk
             -Cnt)
 306          {
 307   1              float fDHTotalF;
 308   1         
 309   1      //Ruby  fDHTotalF = (float)dwFrameXclkCnt * m_wVRes *2/ m_wVTotal / wDWVSZ;
 310   1      
 311   1              fDHTotalF = (float)dwFrameXclkCnt * m_wVRes/ m_wVTotal / wDWVSZ;
 312   1              *wDHTotal = (int)fDHTotalF/2 * 2;
 313   1      
 314   1      #ifdef KVGA
              /*
                  if(!m_cStandard)//NTSC
                              *wDHTotal = ((int)fDHTotalF/2 * 2); 
                  else
                              *wDHTotal = ((int)fDHTotalF/2 * 2);
              */
               /////
               
              
                  if(!m_cStandard)//NTSC
                  {
                      #ifdef AU_7
                              *wDHTotal = (int)0x0266;      //0x0266 for LG_7 0x0265 for AU_7 //0x025E; v36    //0x026B; V34
                  #endif
                      #ifdef LG_7
                              *wDHTotal = (int)0x0266;
                  #endif
                      #ifdef PVI_7
                              *wDHTotal = (int)0x026c; 
                  #endif
              
                  }
                  else
                  {
                      #ifdef AU_7
                              *wDHTotal = (int)0x02EC;      //0x0266 for LG_7 0x0265 for AU_7 //0x025E; v36    //0x026B; V34
                  #endif
                  #ifdef LG_7
                              *wDHTotal = (int)0x02ED;   //0x02E7; v36   //0x02F1;  V34
                      #endif
                  #ifdef PVI_7
                              *wDHTotal = (int)0x02F5; 
                  #endif
                  }
              #endif  
 350   1      #ifdef AT_VGA
                      *wDHTotal = *wDHTotal-3;
              #endif
 353   1      /*
 354   1      #ifdef WVGA
 355   1         if(!m_cStandard)//NTSC
 356   1                      *wDHTotal = ((int)fDHTotalF/2 * 2); 
 357   1          else
 358   1                      *wDHTotal = ((int)fDHTotalF/2 * 2)-0x0a;
 359   1                      
 360   1      #endif*/                
 361   1              m_dwBuff[1] = dwFrameXclkCnt*1000/ (*wDHTotal);
 362   1              *wDVTotal = m_dwBuff[1] / 1000;
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 7   

 363   1              *wDVFrac  = m_dwBuff[1] % 1000;
 364   1      
 365   1              return fDHTotalF; 
 366   1      }
 367          
 368          uWORD DisplayVibration(float fDHTotalF, uWORD wDHTotal, uWORD* wDVTotal, uWORD wDWVSZ, uWORD wDVFrac)
 369          {
 370   1              uWORD wActiveDiff; 
 371   1              uWORD wVibLeft;
 372   1      
 373   1              wActiveDiff=(fDHTotalF-wDHTotal)*wDWVSZ;
 374   1              
 375   1              if(wDVFrac % 10 >= 5)
 376   1                      wDVFrac = wDVFrac / 10 + 1;
 377   1              else
 378   1                      wDVFrac = wDVFrac / 10;
 379   1      
 380   1              if(wDVFrac < 95)
 381   1              {
 382   2                      wDVFrac = wDVFrac  + 5; 
 383   2              m_wBuff[0] = (unsigned long)wDVFrac*wDHTotal/100;
 384   2              }
 385   1              else
 386   1              {
 387   2                      m_wBuff[0] = 0;
 388   2              }
 389   1              //m_wBuff[0] is fraction part of output hsync(pixels)
 390   1              
 391   1      
 392   1              if(m_wBuff[0]<wActiveDiff)
 393   1              {
 394   2                      if(wActiveDiff-m_wBuff[0]>=wDHTotal*0.3)
 395   2                      {
 396   3                              *wDVTotal -= 1;
 397   3                              m_wBuff[0] += wDHTotal;
 398   3                      }
 399   2              }
 400   1              if(m_wBuff[0]>=wActiveDiff)
 401   1              {
 402   2                      if(wActiveDiff <= (unsigned long)wDWVSZ * 255 / 128)
 403   2                              m_cBuff[0]=(unsigned long)wActiveDiff*128/wDWVSZ;
 404   2                      else
 405   2                              m_cBuff[0]=255;
 406   2      #ifndef T100    //Ruby test 2004-08-19
 407   2              //      I2CWriteByte(TW101, 0x86, m_cBuff[0]);
 408   2      #endif
 409   2      //Ruby test 2004-06-03
 410   2                      m_cBuff[0]=(m_wBuff[0]-wActiveDiff)/(*wDVTotal-DWVSST-DISP_DFLT_VSWIDTH-wDWVSZ);
 411   2      /////   
 412   2      #ifndef T100
 413   2              //      I2CWriteByte(TW101, 0x87, m_cBuff[0]);
 414   2      #endif
 415   2                      wVibLeft=0;
 416   2              }
 417   1              else
 418   1              {
 419   2                      if(m_wBuff[0] <= (unsigned long)wDWVSZ*255/128)
 420   2                              m_cBuff[0]=(unsigned long)m_wBuff[0]*128/wDWVSZ;
 421   2                      else
 422   2                              m_cBuff[0]=255;
 423   2      #ifndef T100    //Ruby test 2004-08-19  
 424   2      //              I2CWriteByte(TW101, 0x86, m_cBuff[0]);
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 8   

 425   2      //              I2CWriteByte(TW101, 0x87, 0);
 426   2      #endif
 427   2                      wVibLeft=(wActiveDiff-m_wBuff[0]);                      
 428   2              }
 429   1              return wVibLeft;   //Remap DCLK
 430   1      }
 431          
 432          
 433          uDWORD DisplayGetXclkCnt(uDWORD dwFrameXclkCnt)
 434          {
 435   1              dwFrameXclkCnt *= DNDIV_40;
 436   1              return dwFrameXclkCnt;
 437   1      }
 438          
 439          uDWORD GetInputVSyncXclkCnt(void)
 440          {
 441   1              uDWORD dwVSyncCount;
 442   1      
 443   1              m_cBuff[0] = I2CReadByte(TW101, 0x50);
 444   1              I2CWriteByte(TW101, 0x50, m_cBuff[0] | 0x10); //Start to Measurement VSYNC counter using XCLK
 445   1                                      
 446   1              m_cBuff[0] = 100;
 447   1              while(m_cBuff[0]--)
 448   1              {
 449   2                      twdDelay(1);
 450   2                      if ((I2CReadByte(TW101, 0x50)&0x20)) //V sync counter is done exit
 451   2                              break;
 452   2              }
 453   1              m_cBuff[0] = I2CReadByte(TW101, 0x50);
 454   1              m_cBuff[0] &= 0xCF;                     //Disable Auto Position
 455   1              I2CWriteByte(TW101, 0x50, m_cBuff[0]);
 456   1      
 457   1              dwVSyncCount =  I2CReadByte(TW101, 0x53);
 458   1              dwVSyncCount <<= 8;
 459   1              dwVSyncCount |= I2CReadByte(TW101, 0x52);
 460   1              dwVSyncCount <<= 8;
 461   1              dwVSyncCount |= I2CReadByte(TW101, 0x51);
 462   1              
 463   1              return dwVSyncCount;    
 464   1      }
 465          
 466          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2921    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20      84
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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