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

📄 mode_detect.lst

📁 Realtek 公司的RTD2523A芯片原厂source code,没有被修改过的。
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V6.20c  MODE_DETECT                                                           04/15/2004 12:59:19 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE MODE_DETECT
OBJECT MODULE PLACED IN .\Output\Mode_Detect.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Code\Mode_Detect.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Outp
                    -ut\Mode_Detect.lst) OBJECT(.\Output\Mode_Detect.obj) 

stmt level    source

   1          #define __MODEDETECT__
   2          
   3          #include "Header\MAIN_DEF.H"
   4          #include "Header\ACCESS.H"
   5          #include "Header\CONFIG.H"
   6          #include "Header\LCD_MAIN.H"
   7          #include "Header\LCD_FUNC.H"
   8          #include "Header\LCD_OSD.H"
   9          #include "Header\LCD_AUTO.H"
  10          #include "Header\OSD.H"
  11          #include "Header\SRC_CTRL.H"
  12          #include "Header\FRAME_SYNC.H"
  13          
  14          
  15          /////////////////////////////////////////////////////////
  16          //-------------------  Mode Detector  -----------------//
  17          /////////////////////////////////////////////////////////
  18          bit Input_Mode_Detector(void)
  19          {
  20   1          RTDRead(SYNC_POR_4C, 0x01, N_INC);
  21   1      
  22   1          // Issac :
  23   1          // Mode detection must finish within 20ms * (MODE_DETECT_FREQ + 1)
  24   1          // If mode detection is over before time-out, we should read the
  25   1          // detection result right now.
  26   1          if (0 == (Data[0] & 0x02))      ucModeCnt   = 0;
  27   1      
  28   1          if (ucModeCnt)
  29   1          {                  
  30   2              ucModeCnt   -= 1;
  31   2          }
  32   1          else
  33   1          {
  34   2              ucModeCnt   = MODE_DETECT_FREQ;
  35   2      
  36   2      #if (SOURCE_AUTO_SCAN) 
  37   2              Source_Auto_Scan();
  38   2      #else
                      Mode_Detector();
              #endif				
  41   2              
  42   2              if (!bStable)   return _TRUE;
  43   2          }
  44   1      
  45   1          return _FALSE;
  46   1      }
  47          
  48          void Mode_Detector(void)
  49          {
  50   1          switch (stGUD1.INPUT_SOURCE & 0x07)
  51   1          {
  52   2          case SOURCE_VGA :
  53   2          case SOURCE_DVI :
  54   2              // Save previous values of ucMode_Curr, bHpole_Curr and bVpole_Curr
C51 COMPILER V6.20c  MODE_DETECT                                                           04/15/2004 12:59:19 PAGE 2   

  55   2              bHpole_Prev = bHpole_Curr;
  56   2              bVpole_Prev = bVpole_Curr;
  57   2              
  58   2              if ((MODE_NOSIGNAL == ucMode_Curr) || (MODE_NOSUPPORT == ucMode_Curr))
  59   2                  Detect_Input_Mode();
  60   2              else
  61   2                  Check_Input_Mode();
  62   2              break;
  63   2      
  64   2          default :
  65   2      
  66   2      #if (VIDEO_CHIP != VDC_NONE)
                      if ((MODE_NOSIGNAL == ucMode_Curr) || (MODE_NOSUPPORT == ucMode_Curr))
                          Detect_Video_Mode();        // Set default polarity 
                      else
                          Check_Video_Mode();         // Set polarity after measure
              #else
  72   2              ucMode_Curr = MODE_NOSIGNAL;
  73   2      #endif
  74   2      
  75   2              break;
  76   2          }
  77   1          
  78   1          Measure_Mode();     // Measure mode-timing
  79   1      }
  80          
  81          void Measure_Mode(void)
  82          {
  83   1          RTDSetByte(SYNC_CTRL_4A, 0x00);
  84   1      
  85   1          switch (stGUD1.INPUT_SOURCE & 0x07)
  86   1          {
  87   2          case SOURCE_VGA :
  88   2              RTDSetByte(SYNC_POR_4C, (SYNC_SS == ucSync_Type) ? 0x02 : 0x22);
  89   2              break;
  90   2          case SOURCE_DVI :
  91   2      #if (TMDS_ENABLE)
  92   2              if (0 == ucTMDS_SEARCH_COUNTER)
  93   2              {
  94   3                  RTDCodeW(TMDS_MANUAL_ON);
  95   3                  ucTMDS_SEARCH_COUNTER  = 0x08;
  96   3              }        
  97   2              ucTMDS_SEARCH_COUNTER -= 0x01;
  98   2      #endif
  99   2              //RTDSetByte(SYNC_POR_4C, 0x02);       
 100   2              //break;
 101   2          default :
 102   2              RTDSetByte(SYNC_POR_4C, 0x02);
 103   2              break;
 104   2          }	
 105   1      }
 106          
 107          /*
 108          #if (SOURCE_AUTO_SCAN)
 109          /////////////////////////////////////////////////////////
 110          //---Detect which source with valid signal-------------//
 111          /////////////////////////////////////////////////////////
 112          void Measure_Source(unsigned char source)
 113          {
 114              switch (source)
 115              {
 116              case SOURCE_VGA:
C51 COMPILER V6.20c  MODE_DETECT                                                           04/15/2004 12:59:19 PAGE 3   

 117                  RTDSetByte(SYNC_CTRL_4A, 0x01);
 118                  break;
 119              case SOURCE_DVI:
 120                  RTDSetByte(SYNC_CTRL_4A, 0x03);
 121                  break;
 122              case SOURCE_AV:
 123                  I2CWrite(V_ENABLE);
 124                  I2CWrite(AV_DETECT);
 125                  break;
 126              case SOURCE_SV:
 127                  I2CWrite(V_ENABLE);
 128                  I2CWrite(SV_DETECT);
 129                  break;
 130              }
 131              
 132              RTDSetByte(SYNC_POR_4C, (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07) && SYNC_SS != ucSync_Type) ? 0x22 
             -: 0x02);
 133              
 134              Delay_Xms(35);
 135          }
 136          #endif
 137          */
 138          
 139          unsigned char VGA_Mode_Search(unsigned int HS_Pulse)
 140          {
 141   1          unsigned char   ucMode_Temp, m;
 142   1          
 143   1          // Issac :
 144   1          // Data[0] is just for mode decision between 720x350 and 640x350.
 145   1          // HSYNC pulse in VGA 640x350 is longer than VGA 720x350.
 146   1          Data[0]     = HS_Pulse * 12 / usHsync;
 147   1      
 148   1          ucMode_Temp = MODE_NOSUPPORT;
 149   1      
 150   1          // Search for Standard Mode
 151   1          m   = MODE_1600x1200x60HZ;
 152   1          do
 153   1          {
 154   2              // Issac
 155   2              // Because VGA_Mode[][] table is based on 24.576MHz crystal,
 156   2              // we have to translate the table if not using 24.576MHz crystal
 157   2              if ((usHsync > ((unsigned long)VGA_Mode[m][0] * RTD_XTAL / XTAL24576K)) && (usHsync < ((unsigned l
             -ong)VGA_Mode[m][1] * RTD_XTAL / XTAL24576K)))
 158   2              {   
 159   3                  if ((usVsync >= VGA_Mode[m][2]) && (usVsync <= VGA_Mode[m][3]))
 160   3                  {
 161   4                      if (MODE_1280x1024x75HZ == m)
 162   4                      {
 163   5                          if (0 == (bVpole_Curr | bHpole_Curr))   m   = MODE_1280x1024x76HZ;  // SUN 1024-76
 164   5                      }                            
 165   4                      else if (MODE_1024x0768x75HZ == m)
 166   4                      {
 167   5                          if (0 == (bVpole_Curr | bHpole_Curr))   m   = MODE_1024x0768x74HZ;  // MAC768-75
 168   5                      }         
 169   4                      else if (MODE_0640x0480x60HZ == m && bVpole_Curr != bHpole_Curr)
 170   4                      {
 171   5                          // MODE_VGA350x60Hz         : 640x350 60Hz
 172   5                          // MODE_VGA350x60Hz | 0x40  : 720x350 60Hz
 173   5                          // MODE_VGA400x60Hz         : 640x400 60Hz
 174   5                          // MODE_VGA400x60Hz | 0x40  : 720x400 60Hz
 175   5                          if (bHpole_Curr)
 176   5                              m   = Data[0] ? MODE_VGA350x60Hz : MODE_VGA350x60Hz | 0x40;
C51 COMPILER V6.20c  MODE_DETECT                                                           04/15/2004 12:59:19 PAGE 4   

 177   5                          else
 178   5                              m   = (stGUD1.FUNCTION & 0x10) ? MODE_VGA400x60Hz : MODE_VGA400x60Hz | 0x40;
 179   5      			  }
 180   4      			  else if (MODE_0640x0480x50HZ == m && bVpole_Curr != bHpole_Curr)
 181   4      			  {
 182   5      				  // MODE_VGA350x50Hz         : 640x350 50Hz
 183   5      				  // MODE_VGA350x50Hz | 0x40  : 720x350 50Hz
 184   5      				  // MODE_VGA400x50Hz         : 640x400 50Hz
 185   5      				  // MODE_VGA400x50Hz | 0x40  : 720x400 50Hz
 186   5      				  if (bHpole_Curr)
 187   5      					  m   = Data[0] ? MODE_VGA350x50Hz : MODE_VGA350x50Hz | 0x40;
 188   5      				  else
 189   5      					  m   = (stGUD1.FUNCTION & 0x10) ? MODE_VGA400x50Hz : MODE_VGA400x50Hz | 0x40;
 190   5      			  }
 191   4      			  else if (MODE_0720x0400x85HZ == m)
 192   4      			  {
 193   5      				  if (1 == bHpole_Curr && 0 == bVpole_Curr)
 194   5      					  m   = MODE_0640x0350x85HZ;
 195   5      				  else if (stGUD1.FUNCTION & 0x10)    
 196   5      					  m   = MODE_0640x0400x85HZ;
 197   5      			  }
 198   4      			  else if (MODE_0720x0400x70HZ == m)
 199   4      			  {
 200   5      				  if (1 == bHpole_Curr && 0 == bVpole_Curr)
 201   5      					  m   = Data[0] ? MODE_0640x0350x70HZ : MODE_0720x0350x70HZ;
 202   5      				  else if (stGUD1.FUNCTION & 0x10)
 203   5      					  m   = MODE_0640x0400x70HZ;
 204   5      			  }
 205   4      			  else if (MODE_1024x0768x59HZ == m)
 206   4      			  {
 207   5      				  if (HS_Pulse > 45)
 208   5      					  m = MODE_1024x0768x60HZ;
 209   5      			  }
 210   4      			  else if (MODE_1024x0768x60HZ == m)
 211   4      			  {
 212   5      				  if (HS_Pulse <= 45)
 213   5      					  m = MODE_1024x0768x59HZ;					   
 214   5      			  }
 215   4      
 216   4      			  ucMode_Temp     = m;
 217   4      		  }
 218   3      	  }
 219   2        }
 220   1        while ((0 != --m) && (MODE_NOSUPPORT == ucMode_Temp));
 221   1        
 222   1        // Search for User Mode
 223   1        if (MODE_NOSUPPORT == ucMode_Temp)
 224   1        {
 225   2            usIPV_ACT_LEN   = 0;
 226   2      
 227   2            m   = MODE_USER1600x1200;
 228   2      	  do
 229   2      	  {
 230   3      		  if ((usVsync >= VGA_Mode[m][2]) && (usVsync <= VGA_Mode[m][3]))
 231   3      		  {
 232   4      			  usIPV_ACT_LEN   = CAP_WIN[m][4];
 233   4      			  
 234   4      			  if ((usHsync >= VGA_Mode[m][0]) && (usHsync <= VGA_Mode[m][1]))
 235   4      			  {
 236   5      				  ucMode_Temp     = m;    // Support User Mode
 237   5      			  }
 238   4      		  }
C51 COMPILER V6.20c  MODE_DETECT                                                           04/15/2004 12:59:19 PAGE 5   

 239   3      	  }
 240   2      	  while ((MODE_USER720x400 <= --m) && (MODE_NOSUPPORT == ucMode_Temp));
 241   2        }
 242   1      
 243   1        return ucMode_Temp;
 244   1      }
 245          
 246          
 247          #if (PARTIAL_DISP)
              
              unsigned char Partial_Display(void)
              {
                  unsigned char ucMode_Temp;
              
                  if (DISP_LEN < usIPV_ACT_LEN)   // V Scale-down
                  {
                      // Estimate display clock rate for full screen
                      // DCLK = (XTAL / usHsync) * DCLK per display line * (display image lines / input image lines)
                      ((unsigned int *)Data)[0]   = (unsigned long)(RTD_XTAL / 10) * Mode_Preset[MODE_UNDEFINED1][0] * D
             -ISP_LEN 

⌨️ 快捷键说明

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