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

📄 auto.lst

📁 terawin的t103 LCD驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 253   2                      //~ Difference is too large, so following the mode table. ~//
 254   2                      m_wBuff[0] -= 4;
 255   2              }
 256   1              else
 257   1              {
 258   2                      //~ Reset ADC Capture HSize 0x48, 0x49 ~//
 259   2                      I2CWriteByte(TW803_P0, VATVR_L, (uCHAR)m_wVRes);
 260   2                      I2CWriteByte(TW803_P0, VATVR_H, (uCHAR)(m_wVRes>>8));
 261   2              }
 262   1              //~ Fill in the HSync Start Point by the register POS_LB. ~//
 263   1              if(m_wBuff[0]>(m_pModeDescriptorPtr->cVBlk*1.01))
 264   1              {
 265   2                      I2CWriteByte(TW803_P0, VSST_L, (uCHAR)m_pModeDescriptorPtr->cVBlk);
 266   2                      I2CWriteByte(TW803_P0, VSST_H, (uCHAR)(m_pModeDescriptorPtr->cVBlk>>8));
 267   2              }
 268   1              else
 269   1              {
 270   2                      I2CWriteByte(TW803_P0, VSST_L, (uCHAR)m_wBuff[0]);
 271   2                      I2CWriteByte(TW803_P0, VSST_H, (uCHAR)(m_wBuff[0]>>8));
 272   2              }
 273   1      }       
 274          
 275          
 276          BOOL AutoPhaseAdj(void)
 277          {       
 278   1              uWORD MaxTrackValue, MinTarckValue, TrackValue;
 279   1              uCHAR MaxTrackAddre, MinTrackAddre;
 280   1              uCHAR i, PhSetTemp, ADCDetTemp, CountTemp;
 281   1      
 282   1              //~ Find Max and Min phase ~//
 283   1              MaxTrackValue=0x0000;
 284   1              MinTarckValue=0xFFFF;
 285   1              PhSetTemp = I2CReadByte(TW803_P0, 0x20)&0x07;
 286   1              ADCDetTemp = I2CReadByte(TW803_P0, 0x21)&0x7F;
 287   1      
 288   1              //~ Find Max. and Min. phase tracking. ~//
 289   1              for(i=0; i<32; i+=2)
 290   1              {
 291   2                      //~ Set pahse ~//
 292   2                      I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|(i<<3)));
 293   2                      CountTemp = 255;
 294   2                      //~ Enable phase tracking. ~//
 295   2                      I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
 296   2                      /*if((I2CReadByte(TW803_P0, 0x21)&0x80)==0)
 297   2                      {
 298   2                                CountTemp =20;
 299   2                      } */
 300   2                      while(CountTemp)
 301   2                      {
C51 COMPILER V7.50   AUTO                                                                  10/30/2006 16:14:46 PAGE 6   

 302   3                              if(I2CReadByte(TW803_P0, 0x21)&0x80)    
 303   3                                      break;
 304   3                              else 
 305   3                      /*              TrackValue = TrackValue*1000;
 306   3                                      TrackValue = TrackValue/1000;  */
 307   3                                      CountTemp--;
 308   3                      }
 309   2                      TrackValue = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
 310   2                      //~ Disable phase tracking. ~//
 311   2                      I2CWriteByte(TW803_P0, 0x21, ADCDetTemp&0x7F);
 312   2      
 313   2                      if(TrackValue>MaxTrackValue)
 314   2                      {
 315   3                              MaxTrackValue = TrackValue;
 316   3                              MaxTrackAddre = i;
 317   3                      }
 318   2                      if(TrackValue<MinTarckValue)
 319   2                      {
 320   3                              MinTarckValue = TrackValue;
 321   3                              MinTrackAddre = i;
 322   3                      }  
 323   2              }
 324   1      
 325   1              //~ Define evaluation range. ~//
 326   1              if(MaxTrackAddre>MinTrackAddre)
 327   1              {
 328   2                      if((MaxTrackAddre + 6) > 31 )
 329   2                      {
 330   3                              m_cBuff[1] = 31;
 331   3                      }
 332   2                      else
 333   2                      {
 334   3                              m_cBuff[1] = MaxTrackAddre + 6;
 335   3                      }
 336   2                      if(MaxTrackAddre<6)
 337   2                      {
 338   3                              m_cBuff[0] = 0;
 339   3                      }
 340   2                      else
 341   2                      {
 342   3                              m_cBuff[0] = MaxTrackAddre - 6;
 343   3                      }
 344   2              }
 345   1              else
 346   1              {
 347   2                      if((MaxTrackAddre + 6) > 32 )
 348   2                      {
 349   3                              m_cBuff[1] = 32;
 350   3                      }
 351   2                      else
 352   2                      {
 353   3                              m_cBuff[1] = MaxTrackAddre + 6;
 354   3                      }
 355   2                      if(MaxTrackAddre<6)
 356   2                      {
 357   3                              m_cBuff[0] = 0;
 358   3                      }
 359   2                      else
 360   2                      {
 361   3                              m_cBuff[0] = MaxTrackAddre - 6;
 362   3                      }
 363   2              }
C51 COMPILER V7.50   AUTO                                                                  10/30/2006 16:14:46 PAGE 7   

 364   1      
 365   1              //~ Find Min. Delta ~//
 366   1              MaxTrackValue = 0xFFFF;
 367   1              MaxTrackAddre = 0;
 368   1              if(m_cBuff[0]==0) m_cBuff[0] += 1;
 369   1              if(m_cBuff[1]==31) m_cBuff[1] -= 1;
 370   1              for(i=m_cBuff[0]; i<m_cBuff[1]; i++)
 371   1              {
 372   2                      //~ Set pahse 1 ~//
 373   2                      
 374   2                      I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((i-1)<<3)));
 375   2                      CountTemp = 255;
 376   2                      //~ Enable phase tracking. ~//
 377   2                      I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
 378   2                      while(CountTemp)
 379   2                      {
 380   3                              if(I2CReadByte(TW803_P0, 0x21)&0x80)    
 381   3                                      break;
 382   3                              else
 383   3                                      CountTemp--;
 384   3                      }
 385   2                      m_wBuff[0] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
 386   2                                      
 387   2                      //~ Set pahse 2 ~//
 388   2                      I2CWriteByte(TW803_P0, 0x20, (PhSetTemp|((i)<<3)));
 389   2                      CountTemp = 255;
 390   2                      //~ Enable phase tracking. ~//
 391   2                      I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
 392   2                      while(CountTemp)
 393   2                      {
 394   3                              if(I2CReadByte(TW803_P0, 0x21)&0x80)    
 395   3                                      break;
 396   3                              else 
 397   3                                      CountTemp--;
 398   3                      }
 399   2                      m_wBuff[1] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);    
 400   2                      
 401   2                      //~ Set pahse 3 ~//
 402   2                      I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((i+1)<<3)));
 403   2                      CountTemp = 255;
 404   2                      //~ Enable phase tracking. ~//
 405   2                      I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
 406   2                      while(CountTemp)
 407   2                      {
 408   3                              if(I2CReadByte(TW803_P0, 0x21)&0x80)    
 409   3                                      break;
 410   3                              else 
 411   3                                      CountTemp--;
 412   3                      }
 413   2                      m_wBuff[2] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
 414   2                      MinTarckValue = (abs(m_wBuff[1]-m_wBuff[0]) + abs(m_wBuff[2]-m_wBuff[1]))>>1;
 415   2                      if(MinTarckValue<MaxTrackValue)
 416   2                      {
 417   3                              MaxTrackValue = MinTarckValue;
 418   3                              MaxTrackAddre = i;
 419   3                      }
 420   2              }
 421   1      
 422   1              //~ Set phase ~//
 423   1              I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((MaxTrackAddre)<<3)));          
 424   1      }
 425          
C51 COMPILER V7.50   AUTO                                                                  10/30/2006 16:14:46 PAGE 8   

 426          
 427          
 428          uDWORD  GetPhaseQuality(void)
 429          {
 430   1              uDWORD  wdPhase;
 431   1              //uCHAR   cTemp;
 432   1              uCHAR   cCount;
 433   1      
 434   1      #if 0
                      cTemp = I2CReadByte(TW803_P0, 0x50);
                      cTemp |= 0x01;  //Enable auto tracking interrupt
                      I2CWriteByte(TW803_P0, 0x50, cTemp);
              #endif
 439   1                                      
 440   1              cCount = 255;
 441   1              while(cCount--)
 442   1              {
 443   2                      if(INT0==0)     break;
 444   2                      twdDelay(1);        //Time dealy, need adjust
 445   2                      if (I2CReadByte(TW803_P0, 0x50)&0x02)
 446   2                              break;
 447   2              }
 448   1                      
 449   1              wdPhase = I2CReadByte(TW803_P0, 0x57);     
 450   1              wdPhase <<= 8;
 451   1              wdPhase |= I2CReadByte(TW803_P0, 0x56);
 452   1              wdPhase <<= 8;
 453   1              wdPhase |= I2CReadByte(TW803_P0, 0x55);
 454   1              //11.11 wdPhase <<= 8;
 455   1              //wdPhase |= I2CReadByte(TW803_P0, 0x54);
 456   1      
 457   1              //cTemp &= 0xFC;        //Disable auto tracking and clear done bit
 458   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)&0xFC);
 459   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)|0x01);
 460   1              
 461   1              return wdPhase;
 462   1      }
 463          
 464          
 465          uDWORD  GetPhaseDelta(uWORD wTotal)
 466          {
 467   1              uDWORD  IDATA wdMinPhase, wdMaxPhase;
 468   1              uDWORD  IDATA dwPhase1; 
 469   1              
 470   1              wdMaxPhase = 0;
 471   1              wdMinPhase = 0xFFFFFFFFL;
 472   1      
 473   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)|0x01); //Enable auto tracking interrupt
 474   1              //Purpose: phase+2, improve speed
 475   1              for (m_cBuff[3]=0; m_cBuff[3]<16; m_cBuff[3] +=1)
 476   1              {
 477   2                      if(INT0==0)     return FALSE;
 478   2                      I2CWriteByte(TW803_P0, ADC_PHASE, m_cBuff[3]<<4);
 479   2                      dwPhase1 = GetPhaseQuality();
 480   2                      
 481   2                      if (dwPhase1 > wdMaxPhase)
 482   2                      {
 483   3                              wdMaxPhase = dwPhase1;
 484   3                              m_cGoodPhase = m_cBuff[3];
 485   3                      }
 486   2                      if (dwPhase1 < wdMinPhase)
 487   2                      {
C51 COMPILER V7.50   AUTO                                                                  10/30/2006 16:14:46 PAGE 9   

 488   3                              wdMinPhase = dwPhase1;
 489   3           }
 490   2              }
 491   1              //Disable auto tracking and clear done bit
 492   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)&0xFC);
 493   1                   
 494   1              return (wdMaxPhase - wdMinPhase) / wTotal;
 495   1                      
 496   1      }
 497          
 498          
 499          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2435    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      1      22
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----      12
   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 + -