📄 mode_detect.lst
字号:
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 + -