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

📄 modectrl.lst

📁 terawin的t103 LCD驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 743   2                      case DSPPLL_136:x=DNDIV_136;break;
 744   2                      case DSPPLL_140:x=DNDIV_140;break;
 745   2                      default:x=DNDIV_108;break;
 746   2              }
 747   1      
 748   1              if((float)EepPrivate.wHTotal*32/ m_wBuff[0]>x)
 749   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0, 0x70)|DCLKI_IS_FASTER);      //Input clk faster, enable th
             -is bit
 750   1              else
 751   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0,0x70)&~DCLKI_IS_FASTER);      //Input clk slower, disable t
             -his bit
 752   1       
 753   1              //Horizontal    
 754   1              m_wBuff[0] = (float)m_wHRes/VGAState.HDispSize * 0x2000; 
 755   1              I2CWriteByte(TW803_P0, SC_HOR_H1, (uCHAR)m_wBuff[0]);
 756   1          I2CWriteByte(TW803_P0, SC_HOR_H2, (uCHAR)(m_wBuff[0]>>8));
 757   1      
 758   1              //Vertical
 759   1              if(!(m_cModeStatus & VSYNCOVERRANGE))
 760   1              {
 761   2                      m_wBuff[0] = (float)m_wVRes/(VGAState.VDispSize) * 0x2000;
 762   2              }
 763   1              else
 764   1              {
 765   2                      m_wBuff[0] = (float)m_wVRes/(VGAState.VDispSize) * 0x2000;  
 766   2              }
 767   1      
 768   1              I2CWriteByte(TW803_P0, SC_VER_V1, (uCHAR)m_wBuff[0]);
 769   1              I2CWriteByte(TW803_P0, SC_VER_V2, (uCHAR)(m_wBuff[0]>>8)); 
 770   1              I2CWriteByte(TW803_P0, 0xDC, (uCHAR)VGAState.HDispSize);
 771   1              I2CWriteByte(TW803_P0, 0xDD, (uCHAR)(VGAState.HDispSize>>8));
 772   1              I2CWriteByte(TW803_P0, 0xDE, (uCHAR)VGAState.VDispSize);
 773   1              I2CWriteByte(TW803_P0, 0xDF, (uCHAR)(VGAState.VDispSize>>8));
 774   1      }
 775          
 776          void VGASetPll(void)
 777          {                                                               
 778   1              switch(m_pModeDescriptorPtr->cModeFlags0 & DSPPLL_MASK)
 779   1              {
 780   2                      case bDSPPLL_100:m_cDspPllSwitch=DSPPLL_100;break;
 781   2                      case bDSPPLL_108:m_cDspPllSwitch=DSPPLL_108;break;
 782   2                      case bDSPPLL_120:m_cDspPllSwitch=DSPPLL_120;break;
 783   2                      case bDSPPLL_136:m_cDspPllSwitch=DSPPLL_136;break;
 784   2                      case bDSPPLL_140:m_cDspPllSwitch=DSPPLL_140;break;
 785   2                      default:m_cDspPllSwitch=DSPPLL_108;break;
 786   2              }
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 14  

 787   1              switch(m_cDspPllSwitch)
 788   1              {
 789   2                      case DSPPLL_100:I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_100);break;
 790   2                      case DSPPLL_108:I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_108);break;
 791   2                      case DSPPLL_120:I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_120);break;
 792   2                      case DSPPLL_136:I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_136);break;
 793   2                      case DSPPLL_140:I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_140);break;  
 794   2                      default:        I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_108);break;
 795   2              }                                                  
 796   1              I2CWriteByte(TW803_P0, PLLDIV_I,DIDIV);
 797   1              I2CWriteByte(TW803_P0, PLLDIV_O,0x10|DODIV); 
 798   1       /*     m_cDspPllSwitch=DSPPLL_140;
 799   1              I2CWriteByte(TW803_P0, PLLDIV_F,DFDIV_140);
 800   1              I2CWriteByte(TW803_P0, PLLDIV_I,DIDIV);
 801   1              I2CWriteByte(TW803_P0, PLLDIV_O,0x10|DODIV);     */
 802   1      }                                                                                                 
 803          
 804          
 805          
 806          // ================================================================
 807          //      VGACalOPTiming                                                  Kevin Hsu.      Mar. 15th, 2006
 808          // ================================================================
 809          //      Description: Calculate output timming.  
 810          //      Output:          None.
 811          //      --------------------------------------------------------------- 
 812          #define LB_WIDTH 1280   // For T103                                                                                        
 813          void VGACalOPTiming(void)
 814          {
 815   1              uWORD wDVTotal, wDHTotal, wDVBILK, wTemp;
 816   1              float Temp, DNDIV_40_Temp;
 817   1      
 818   1              //~ Calculate PH_TOT and PV_TOT ~//
 819   1              m_wBuff[0] = I2CReadByte(TW803_P0, 0x59);
 820   1              m_wBuff[0] <<= 8;
 821   1              m_wBuff[0] |= I2CReadByte(TW803_P0, 0x58);      
 822   1              m_wBuff[0] /= 32;       
 823   1              m_dwBuff[0] = I2CReadByte(TW803_P0, 0x53);
 824   1              m_dwBuff[0] <<= 8;
 825   1              m_dwBuff[0] |= I2CReadByte(TW803_P0, 0x52);                                             
 826   1              m_dwBuff[0] <<= 8;
 827   1              m_dwBuff[0] |= I2CReadByte(TW803_P0, 0x51);
 828   1              DNDIV_40_Temp = ((float)(I2CReadByte(TW803_P0, PLLDIV_F)+2)/(DIDIV+2)/DRDIV);
 829   1              Temp = (27000000.0/m_dwBuff[0])*m_pModeDescriptorPtr->wHTotal*m_pModeDescriptorPtr->wVTotal;
 830   1              if(Temp>(DNDIV_40_Temp*27000000.0))
 831   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0, 0x70)|0x20);
 832   1              else
 833   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0, 0x70)&0xDF); 
 834   1              wDHTotal=(float)m_wBuff[0]*m_wVRes*DNDIV_40_Temp/VGAState.VDispSize;                    
 835   1              wDVTotal=((DNDIV_40_Temp*(float)XCLK)/(float)(((float)(XCLK)/m_pModeDescriptorPtr->dwVFrameCount)*wDHTota
             -l));
 836   1      
 837   1              twdDelay(100);
 838   1              m_dwBuff[1]=I2CReadByte(TW803_P0, 0x83);
 839   1              m_dwBuff[1] <<= 8;
 840   1              m_dwBuff[1]=I2CReadByte(TW803_P0, 0x82);
 841   1              m_dwBuff[1] <<= 8;
 842   1              m_dwBuff[1] |= I2CReadByte(TW803_P0, 0x81);
 843   1              wDVBILK=m_dwBuff[1];
 844   1              
 845   1              //~ Calculate back porch "DWHS" ~//
 846   1              wTemp = ((wDHTotal - DWHSZ - DISP_DFLT_HSWIDTH)>>1); 
 847   1      
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 15  

 848   1              I2CWriteByte(TW803_P0, 0xB0, wTemp);
 849   1              I2CWriteByte(TW803_P0, 0xB1, wTemp>>8);//Horizontal back porch  
 850   1              I2CWriteByte(TW803_P0, 0xB2, DISP_DFLT_VDS);
 851   1              I2CWriteByte(TW803_P0, 0xB3, DISP_DFLT_VDS>>8);//Vertical back porch 
 852   1              I2CWriteByte(TW803_P0, 0xB4,(uCHAR)(DWHSZ));    
 853   1              I2CWriteByte(TW803_P0, 0xB5,(uCHAR)(DWHSZ>>8));//Horizontal width
 854   1              I2CWriteByte(TW803_P0, 0xB6,(uCHAR)(DWVSZ));    
 855   1              I2CWriteByte(TW803_P0, 0xB7,(uCHAR)(DWVSZ>>8));//Vertical height
 856   1              I2CWriteByte(TW803_P0, 0xB8,(uCHAR) wDHTotal);
 857   1              I2CWriteByte(TW803_P0, 0xB9,(uCHAR)(wDHTotal>>8));//Htotal
 858   1              I2CWriteByte(TW803_P0, 0xBA,(uCHAR) wDVTotal);
 859   1              I2CWriteByte(TW803_P0, 0xBB,(uCHAR)(wDVTotal>>8));//Vtotal                    
 860   1              I2CWriteByte(TW803_P0, 0xBC,(uCHAR) DISP_DFLT_HSWIDTH);
 861   1              I2CWriteByte(TW803_P0, 0xBD,(uCHAR)(DISP_DFLT_HSWIDTH>>8));//HSYNC Width        
 862   1              I2CWriteByte(TW803_P0, 0xBE,(uCHAR) DISP_DFLT_VSWIDTH);
 863   1              I2CWriteByte(TW803_P0, 0xBF,(uCHAR)(DISP_DFLT_VSWIDTH>>8));//VSYNC Width         
 864   1                               
 865   1              //~ Calculate line buffer ~//
 866   1              if(H_Size>m_wHRes)                                // HSize in LB
 867   1                      m_wBuff[1] = m_wHRes; 
 868   1              else
 869   1                      m_wBuff[1] = H_Size; 
 870   1              
 871   1              if(LB_WIDTH >= (m_wBuff[1]<<1))   //PREFILL Size
 872   1                      Temp = 4.0;                                     
 873   1              else
 874   1              {
 875   2                      Temp = 2.45 - ((float)(m_wVRes)/V_Size)/2.0;
 876   2                      if(LB_WIDTH>=m_wBuff[1])
 877   2                              Temp += (LB_WIDTH-m_wBuff[1])/m_wBuff[1];
 878   2                      else
 879   2                              Temp += 0;
 880   2              }                
 881   1              m_wBuff[1] = ((Temp-(int)(Temp))*m_wHRes/EepPrivate.wHTotal + (int)(Temp))*m_wBuff[0]; // T_PerFill
 882   1              m_wBuff[2] = ((DISP_DFLT_VSWIDTH+DISP_DFLT_VDS+I2CReadByte(TW803_P0, 0xDA))*wDHTotal + DISP_DFLT_HSWIDTH 
             -+ wTemp + I2CReadByte(TW803_P0, 0xD8))/DNDIV_40_Temp; //VBo_Xclk
 883   1              m_dwBuff[1] =I2CReadByte(TW803_P0, 0x53);
 884   1              m_dwBuff[1] <<= 8;
 885   1              m_dwBuff[1] |=I2CReadByte(TW803_P0, 0x52);
 886   1              m_dwBuff[1] <<= 8;
 887   1              m_dwBuff[1] |= I2CReadByte(TW803_P0, 0x51);
 888   1              Temp = ((m_dwBuff[1]+1)*DNDIV_40_Temp * m_wVRes)/((m_dwBuff[1]/m_wBuff[0]) *VGAState.VDispSize);  // Idea
             -l PH_TOT
 889   1              m_wBuff[0] =  (Temp - (float)wDHTotal)*VGAState.VDispSize/DNDIV_40_Temp/2;
 890   1              //~ VSDLY_XCLK = T_PreFill + VBi_XClk + (End_LB_Short/2) - VBo_Xclk ~//
 891   1              m_dwBuff[0] = m_wBuff[1] + wDVBILK +m_wBuff[0];
 892   1              wTemp = m_dwBuff[0]-m_wBuff[2];           
 893   1              I2CWriteByte(TW803_P0, 0x84, wTemp);
 894   1              I2CWriteByte(TW803_P0, 0x85, wTemp>>8);//line buffer delay XClk
 895   1      
 896   1              m_dwBuff[0]=(wDVTotal-m_wVRes-DWVSST-DISP_DFLT_VSWIDTH)*wDHTotal;
 897   1              m_dwBuff[1]=wTemp*DNDIV_40_Temp;
 898   1              if(m_dwBuff[0]<m_dwBuff[1])
 899   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0, 0x70)|0x20);
 900   1              else
 901   1                      I2CWriteByte(TW803_P0, 0x70, I2CReadByte(TW803_P0, 0x70)&0xDF);   
 902   1      }                                                                                                                                                 
 903          
 904          
 905          
 906          BOOL SyncChangDect()
 907          {
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 16  

 908   1              //~ Detect V/H Sync changed. ~//
 909   1              if(I2CReadByte(TW803_P0, 0x32)&0x0C)
 910   1              {
 911   2                      ClosePanel(0x10,0xFF,0x40);       
 912   2                      if(!SrcAnalogProcess()) 
 913   2                      {
 914   3                              I2CWriteByte(TW803_P0, 0x32, 0x0F);     
 915   3                              return FALSE;
 916   3                      }
 917   2                      OpenPanel();
 918   2                      I2CWriteByte(TW803_P0, 0x32, 0x0C);     
 919   2                      return TRUE;
 920   2              }
 921   1              //~ Detect if V/H Sync lost. ~//
 922   1              if((I2CReadByte(TW803_P0, 0x32)&0x03)==0x03)
 923   1              {
 924   2                      ClosePanel(0x10,0xFF,0x40);
 925   2                      I2CWriteByte(TW803_P0, 0x32, 0x0F);
 926   2                      return FALSE;
 927   2              } 
 928   1              return TRUE;
 929   1              
 930   1      
 931   1      }
 932          
 933          BOOL SrcAnalogProcess(void)
 934          {
 935   1              Sync_Mode_Detect();
 936   1              if(!ModeDetect()) return FALSE;
 937   1              SetupMode();
 938   1              VGASetPll();    
 939   1              AutoPositionAdj(0xF0);
 940   1              VGAState.HDispSize = H_Size;
 941   1              VGAState.VDispSize = V_Size;
 942   1              VGAState.fHDispSize = H_Size;
 943   1              VGAState.fVDispSize = V_Size;
 944   1              VGAState.AdjHATV = m_wHRes; 
 945   1              VGAState.AdjVATV = m_wVRes; 
 946   1              VGACalOPTiming();
 947   1              VGAScaling(); 
 948   1              OpenPanel();
 949   1              I2CWriteByte(TW803_P0, INT_STATUS, 0x3f);
 950   1              I2CWriteByte(TW803_P0, 0xE2, 0x11);
 951   1              AutoPhaseAdj(); 
 952   1              if(!(m_cModeStatus&(DOSMODE|NORMALMODE))) //(OVERRANGE |SYNCERROR))
 953   1              {
 954   2                      return FALSE;
 955   2              }
 956   1      
 957   1              I2CWriteByte(TW803_P0, INT_STATUS, 0x3f);
 958   1              I2CWriteByte(TW803_P0, 0xE2, 0x11);
 959   1              VGAState.PositionH = I2CReadByte(TW803_P0, 0x45);
 960   1              VGAState.ADCVBaPorch = I2CReadByte(TW803_P0, VSST_L)|(I2CReadByte(TW803_P0, VSST_H)<<8);        
 961   1              VGAState.ADCHBaPorch = I2CReadByte(TW803_P0, HSST_L)|(I2CReadByte(TW803_P0, HSST_H)<<8);        
 962   1              VGAState.HATV = I2CReadByte(TW803_P0, HATVC_L)|(I2CReadByte(TW803_P0, HATVC_H)<<8);
 963   1              VGAState.VATV = I2CReadByte(TW803_P0, VATVR_L)|(I2CReadByte(TW803_P0, VATVR_H)<<8);      
 964   1              return TRUE;
 965   1      }
 966          
 967          #endif
 968          
 969          
C51 COMPILER V7.50   MODECTRL                                                              10/30/2006 16:14:45 PAGE 17  

 970          
 971          
 972          
 973          
 974          
 975          
 976          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   8728    ----
   CONSTANT SIZE    =   3052    ----
   XDATA SIZE       =      2      55
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -