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

📄 modectrl.lst

📁 terawin的t103 LCD驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 490   5                                      m_dwBuff[0] = m_dwBuff[1];
 491   5                                      EepPrivate.cAltID    = m_cBuff[0];
 492   5                              }
 493   4                              }
 494   3                      }
 495   2              }       
 496   1              
 497   1              if (EepPrivate.cAltID == 0xff)
 498   1                      return FALSE;
 499   1              else 
 500   1                      return TRUE;
 501   1      }
 502          
 503          
 504          void SetModeCaptureData(uWORD wHTotal, uWORD wHsst, uCHAR cVsst, uCHAR cVCO)
 505          {
 506   1              //~ Set PLL Freq. ~//   
 507   1              I2CWriteByte(TW803_P0, ADC_PLLDIV_H, (cVCO&0x01)<<6);
 508   1              //~ Set PLL Divider 0x16[3~0],0x15[7~0] ~//
 509   1              I2CWriteByte(TW803_P0, ADC_PLLDIV_H, ((I2CReadByte(TW803_P0, ADC_PLLDIV_H)&0xF0)|((uCHAR)(wHTotal>> 8))))
             -;
 510   1              I2CWriteByte(TW803_P0, ADC_PLLDIV_L, (uCHAR)(wHTotal));  
 511   1              //~ Set VCO and Charge Pump ~//      
 512   1              I2CWriteByte(TW803_P0, ADC_VCOCP, cVCO&0xFE);   
 513   1              //~ Set ADC Capture HSync Back Proch 0x4C, 0x4D ~//
 514   1              I2CWriteByte(TW803_P0, HSST_L, (uCHAR)wHsst);
 515   1              I2CWriteByte(TW803_P0, HSST_H, (uCHAR)(wHsst>>8));
 516   1      
 517   1              //~ Set ADC Capture VSync Back Proch 0x4E, 0x4F ~//
 518   1              I2CWriteByte(TW803_P0, VSST_L, (uCHAR)cVsst);
 519   1              I2CWriteByte(TW803_P0, VSST_H, (uCHAR)(cVsst >> 8));
 520   1      
 521   1              //~ Set ADC Capture HSize 0x48, 0x49 ~//
 522   1              I2CWriteByte(TW803_P0, HATVC_L, (uCHAR)m_pResolutionPtr->wHRes);
 523   1              I2CWriteByte(TW803_P0, HATVC_H, (uCHAR)(m_pResolutionPtr->wHRes>>8));
 524   1              //~ Set ADC Capture VSize 0x4A, 0x4B ~//
 525   1              I2CWriteByte(TW803_P0, VATVR_L, (uCHAR)m_pResolutionPtr->wVRes);
 526   1              I2CWriteByte(TW803_P0, VATVR_H, (uCHAR)(m_pResolutionPtr->wVRes>>8));
 527   1      } 
 528          
 529          
 530          void GetModeCaptureData(void)
 531          {
 532   1              if(m_bAlt)
 533   1              {
 534   2                      m_pAltHTotalPtr = &AltHTotals[EepPrivate.cAltID];
 535   2                      m_cBuff[0] = m_pAltHTotalPtr->cResID;
 536   2                      m_pResolutionPtr = &ResolutionTable[m_cBuff[0]];
 537   2                      EepPrivate.wHTotal = m_pAltHTotalPtr->wHTotal;
 538   2                      m_wHRes = m_pResolutionPtr->wHRes;
 539   2                      m_wVRes = m_pResolutionPtr->wVRes;
 540   2                      m_cBuff[0] = m_pAltHTotalPtr->cModeFlags;  //VCO & Charge Pump
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 10  

 541   2              }
 542   1              else
 543   1              {
 544   2                      m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
 545   2                      
 546   2                      m_cBuff[0] = m_pModeDescriptorPtr->cResID;
 547   2                      m_pResolutionPtr = &ResolutionTable[m_cBuff[0]];
 548   2                      EepPrivate.wHTotal = m_pModeDescriptorPtr->wHTotal;
 549   2                      m_wHRes = m_pResolutionPtr->wHRes;
 550   2                      m_wVRes = m_pResolutionPtr->wVRes;
 551   2                      m_cBuff[0] = m_pModeDescriptorPtr->cModeFlags2; //VCO & Charge Pump
 552   2              }
 553   1      /*  Ruby 2005 11 01
 554   1              if (m_cModeStatus & ADCHIGHRANGE)
 555   1              {
 556   1                      EepPrivate.wHTotal /= 2;
 557   1                      m_wHRes /= 2;   
 558   1              }
 559   1      
 560   1              if (m_cModeStatus & ADCLOWRANGE)
 561   1              {
 562   1                      EepPrivate.wHTotal *= 2;
 563   1                      m_wHRes *= 2;   
 564   1              }       
 565   1      */
 566   1              if(m_bInterlaced)
 567   1              {
 568   2                      m_wVRes /= 2;
 569   2              }
 570   1      
 571   1              
 572   1      }
 573          
 574          //Only used in analog inputs
 575          void SetupMode(void)
 576          { 
 577   1         if(!m_bDigital)
 578   1              {                        
 579   2                      if(I2CReadByte(TW803_P0, 0x3F)&0x10)
 580   2                              I2CWriteByte(TW803_P0, 0x63, 0xCF);
 581   2                      else
 582   2                              I2CWriteByte(TW803_P0, 0x63, 0x40);     
 583   2              }
 584   1         
 585   1              GetModeCaptureData();
 586   1              //m_cBuff[0] saved VCO&Charge Pump
 587   1              SetModeCaptureData(EepPrivate.wHTotal, FIXEDHSST, FIXEDVSST, m_cBuff[0]);
 588   1      
 589   1      }
 590          
 591          
 592          #define MINVRES         0x0000
 593          #define MAXVRES         0xFFFF
 594          BOOL GetVResolution(void)
 595          {
 596   1              //How to define THRESHOLD is a question mark, need confirm later. 
 597   1              McWaitReady(0x04, 0x08);
 598   1      
 599   1              //start data
 600   1              m_wBuff[0] = I2CReadByte(TW803_P0, POS_TB_H);        
 601   1              m_wBuff[0] <<= 8;
 602   1              m_wBuff[0] |= I2CReadByte(TW803_P0, POS_TB_L); 
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 11  

 603   1              
 604   1              //end data
 605   1              m_wBuff[1] = I2CReadByte(TW803_P0, POS_BB_H);       
 606   1              m_wBuff[1] <<= 8;
 607   1              m_wBuff[1] |= I2CReadByte(TW803_P0, POS_BB_L);
 608   1      
 609   1              m_wVRes = m_wBuff[1] - m_wBuff[0] + 1;
 610   1              
 611   1              
 612   1              return FALSE;
 613   1      
 614   1              //How can I know the VRes is valid or not, inputs depend on input pattern 
 615   1              if (m_wVRes >= MINVRES && m_wVRes <= MAXVRES)
 616   1                      return TRUE;
 617   1              else
 618   1                      return FALSE;
 619   1      }          
 620          
 621          
 622          
 623          void GetModeInfo(uWORD *wVTotal, uWORD *wHPeriodCount, uDWORD dwFrameCnt)
 624          {       
 625   1              uWORD   wTemp;
 626   1              int i;
 627   1              
 628   1              //~ Get HSync period. ~//
 629   1              I2CWriteByte(TW803_P0, 0x14, I2CReadByte(TW803_P0, 0x14)&0xEF); // Disable HSo source from PLL.
 630   1              I2CWriteByte(TW803_P0, 0x16, I2CReadByte(TW803_P0, 0x16)|0x04); // Set PLL divider default value.
 631   1              wTemp=0;
 632   1              for(i=0; i<30; i++)
 633   1              {
 634   2                      twdDelay1(10);  
 635   2                      *wHPeriodCount = I2CReadByte(TW803_P0, HS_PERIOD_H);
 636   2                      *wHPeriodCount <<= 8;
 637   2                      *wHPeriodCount += I2CReadByte(TW803_P0, HS_PERIOD_L);
 638   2                      if((wTemp&0xFF00)==((*wHPeriodCount)&0xFF00))
 639   2                              break;
 640   2                      else
 641   2                              wTemp = *wHPeriodCount;
 642   2              }
 643   1              wTemp = dwFrameCnt * 32 * 10 / (*wHPeriodCount); 
 644   1              if(wTemp % 10 >= 9)
 645   1                      m_wBuff[0] = wTemp/10 + 1;
 646   1              else    
 647   1                      m_wBuff[0] = wTemp/10;
 648   1              
 649   1              *wVTotal = m_wBuff[0]; 
 650   1              I2CWriteByte(TW803_P0, 0x14, I2CReadByte(TW803_P0, 0x14)|(~0xEF));      // Enable HSo source from PLL.
 651   1      }
 652          
 653          
 654          
 655                    
 656          // ================================================================
 657          //      McPolDetect                     Kevin Hsu.      Mar. 2th, 2006
 658          // ================================================================
 659          //      Description: Detect VSyn and HSyn polarity. 
 660          //      Output:          VGA sync. type.
 661          //      ---------------------------------------------------------------
 662          uCHAR McPolDetect(void)
 663          {
 664   1              I2CWriteByte(TW803_P0, 0x10, I2CReadByte(TW803_P0, 0x10)|0x10);
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 12  

 665   1              m_cBuff[0] = I2CReadByte(TW803_P0, 0x10)>>6; 
 666   1              return m_cBuff[0]&0x03;
 667   1      }
 668          
 669          BOOL McWaitReady(uCHAR cEnableBit, uCHAR cReadyBit)
 670          {
 671   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)|cEnableBit);
 672   1              
 673   1              m_cBuff[0] = 0xFF;
 674   1              while(m_cBuff[0]--)
 675   1              { 
 676   2                      twdDelay(1);
 677   2                      if(I2CReadByte(TW803_P0, 0x50)&cReadyBit)
 678   2                              break;
 679   2              }
 680   1              //Disable Enable bit for next sync coming in
 681   1              I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)&~(cEnableBit|cReadyBit));
 682   1              if(m_cBuff[0])  return TRUE;
 683   1              else return FALSE; 
 684   1      }
 685          
 686          
 687          // ================================================================
 688          //      GetInputVSyncXclkCnt                    Kevin Hsu.      Mar. 7th, 2006
 689          // ================================================================
 690          //      Description: Get VSync. period  
 691          //      Output:          dwVSyncCount : VSync period.
 692          //      ---------------------------------------------------------------
 693          uDWORD GetInputVSyncXclkCnt(void)                        
 694          {
 695   1              uDWORD dwVSyncCount;
 696   1      
 697   1              I2CWriteByte(TW803_P0, 0x14, I2CReadByte(TW803_P0, 0x14)&0xEF); // Disable HSo source from PLL.
 698   1              
 699   1              m_dwBuff[0] = 0;
 700   1              m_cBuff[1]=20;
 701   1      RECHECK:                
 702   1              twdDelay(100);          
 703   1              m_cBuff[1]--;
 704   1              m_cBuff[0] = I2CReadByte(TW803_P0, 0x50);
 705   1              I2CWriteByte(TW803_P0, 0x50, m_cBuff[0] | 0x10);        //Enable VSYNC counter
 706   1              m_cBuff[0] = 100;
 707   1              while(m_cBuff[0]--)
 708   1              {
 709   2                      twdDelay(1);
 710   2                      if ((I2CReadByte(TW803_P0, 0x50)&0x20)) //V sync counter is done exit
 711   2                              break;
 712   2              }          
 713   1              m_cBuff[0] = I2CReadByte(TW803_P0, 0x50);
 714   1              m_cBuff[0] &= 0xCF;                     //Disable Auto Position
 715   1              I2CWriteByte(TW803_P0, 0x50, m_cBuff[0]);
 716   1      
 717   1              dwVSyncCount =  I2CReadByte(TW803_P0, 0x53);
 718   1              dwVSyncCount <<= 8;
 719   1              dwVSyncCount |= I2CReadByte(TW803_P0, 0x52);
 720   1              dwVSyncCount <<= 8;
 721   1              dwVSyncCount |= I2CReadByte(TW803_P0, 0x51);
 722   1              if((m_dwBuff[0]&0xFFFF00)!=(dwVSyncCount&0xFFFF00))
 723   1              {
 724   2                      m_dwBuff[0] = dwVSyncCount;
 725   2                      if(m_cBuff[1])
 726   2                              goto RECHECK;
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 13  

 727   2              }
 728   1              I2CWriteByte(TW803_P0, 0x14, I2CReadByte(TW803_P0, 0x14)|(~0xEF));      // Enable HSo source from PLL.
 729   1              return dwVSyncCount;    
 730   1      }
 731          void VGAScaling(void)
 732          {
 733   1              float x;
 734   1              m_wBuff[0] = I2CReadByte(TW803_P0, 0x59);
 735   1              m_wBuff[0] <<= 8;
 736   1              m_wBuff[0] |= I2CReadByte(TW803_P0, 0x58);      
 737   1      
 738   1              switch(m_cDspPllSwitch)
 739   1              {
 740   2                      case DSPPLL_100:x=DNDIV_100;break;
 741   2                      case DSPPLL_108:x=DNDIV_108;break;
 742   2                      case DSPPLL_120:x=DNDIV_120;break;

⌨️ 快捷键说明

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