📄 modectrl.lst
字号:
239 3 {
240 4 m_cBuff[1] = m_pModeDescriptorPtr->cResID;
241 4 m_pResolutionPtr = &ResolutionTable[m_cBuff[1]];
242 4 if ((m_wBuff[1]=abs(m_pResolutionPtr->wVRes-m_wVRes)) <= m_wBuff[0])
243 4 {
244 5 if (m_wBuff[1] == m_wBuff[0])
245 5 {
246 6 m_dwBuff[1] |= dwModeListMask;
247 6 cTotalFound++;
248 6 }
249 5 else
250 5 {
251 6 cTotalFound = 1;
252 6 m_dwBuff[1] = dwModeListMask;
253 6 m_wBuff[0] = m_wBuff[1];
254 6 m_cBuff[0] = EepPrivate.cModeID;
255 6 }
256 5 }
257 4 }
258 3 }
259 2 cTotalModes = cTotalFound;
260 2 }
261 1
262 1 //If there are still two or more equidistant modes, then choose the first one
263 1 EepPrivate.cModeID = m_cBuff[0];
264 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
265 1
266 1 m_cModeStatus = MODEFOUND;
267 1 if(m_pModeDescriptorPtr->cModeFlags1 & bDosMode)
268 1 {
269 2 m_cModeStatus |= DOSMODE;
270 2 m_bDosMode = 1;
271 2 }
272 1
273 1
274 1 //If there are alternate HTotals
275 1 if (m_pModeDescriptorPtr->cModeFlags2 & bAltHTotal)
276 1 {
277 2 SearchAltMode();
278 2 }
279 1
280 1 if(m_bAlt)
281 1 {
282 2 m_pAltHTotalPtr = &AltHTotals[EepPrivate.cAltID];
283 2 EepPrivate.wHTotal = m_pAltHTotalPtr->wHTotal;
284 2 m_cBuff[0] = m_pAltHTotalPtr->cResID;
285 2 m_pResolutionPtr = &ResolutionTable[m_cBuff[0]];
286 2 if(m_pAltHTotalPtr->cModeFlags & bSubSample)
287 2 m_cModeStatus |= ADCHIGHRANGE;
288 2 else if(m_pAltHTotalPtr->cModeFlags & bDoubSample)
289 2 m_cModeStatus |= ADCLOWRANGE;
290 2 }
291 1 else
292 1 {
293 2 EepPrivate.wHTotal = m_pModeDescriptorPtr->wHTotal;
294 2 m_cBuff[0] = m_pModeDescriptorPtr->cResID;
295 2 m_pResolutionPtr = &ResolutionTable[m_cBuff[0]];
296 2 if(m_pModeDescriptorPtr->cModeFlags1 & bSubSample)
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 6
297 2 m_cModeStatus |= ADCHIGHRANGE;
298 2 else if(m_pModeDescriptorPtr->cModeFlags1 & bDoubSample)
299 2 m_cModeStatus |= ADCLOWRANGE;
300 2 }
301 1
302 1 if(m_cModeStatus==MODEFOUND)
303 1 m_cModeStatus |= NORMALMODE;
304 1
305 1 return TRUE;
306 1 }
307 // ================================================================
308 // Sync_Mode_Detect Kevin Hsu. Mar. 2th, 2006
309 // ================================================================
310 // Description: Detect what kind of Sync. in VGA signal.
311 // Output: m_Synctype : VGA sync. type.
312 // ---------------------------------------------------------------
313 void Sync_Mode_Detect(void)
314 {
315 1 int i;
316 1
317 1 //~ Enable Sync exist detect ~//
318 1 I2CWriteByte(TW803_P0, 0x21, 0x04);
319 1
320 1 //~ Wait for Checking HS/VS finish. ~//
321 1 i=300;
322 1 while(i)
323 1 {
324 2 twdDelay(10);
325 2 i--;
326 2 if(I2CReadByte(TW803_P0, 0x21)&0x04)
327 2 break;
328 2 }
329 1 //~ Check if HS and VS is exist. ~//
330 1 if((I2CReadByte(TW803_P0, 0x21)&0x03)==3) //~ Synchronize is possible the Composite type or Separate type
-. ~//
331 1 {
332 2
333 2 //~ Set up HS/VS polarity. We set it as auto-adjusting. ~//
334 2 I2CWriteByte(TW803_P0,0x10,0x19);
335 2 //~ Suppose that sync. is Composite type and setup its route. ~//
336 2 m_Synctype=Sync_CS;
337 2 I2CWriteByte(TW803_P0,0x14,0x65);
338 2 twdDelay(500);
339 2 //~ Enable CSync detect and XCLK ~//
340 2 /* I2CWriteByte(TW803_P0,0x13,0x22);
341 2 twdDelay(1000);
342 2
343 2 if(I2CReadByte(TW803_P0, 0x13)&0x80) //~ Check CSync detection is done or not. ~//
344 2 {
345 2 //~ If true, sync is Composite type. ~//
346 2 m_Synctype=Sync_CS;
347 2 }
348 2 else //~ Sync. is Separate type. ~//
349 2 {*/
350 2 //~ Setup Separate type. ~//
351 2 m_Synctype=Sync_SS;
352 2 //~ Setup Separate type route. ~//
353 2 I2CWriteByte(TW803_P0,0x14,0xF0);
354 2
355 2 //}
356 2 }
357 1 else //~ No HS and VS, we suppose that synchronize is SOG type. ~//
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 7
358 1 {
359 2 //~ Setup SOG/SOY type. ~//
360 2 m_Synctype=Sync_SOG;
361 2 //~ Set up SOG/SOY polarity. We set it as non-invert. ~//
362 2 I2CWriteByte(TW803_P0,0x10,0x39);
363 2 //~ Setup SOG/SOY type route. ~//
364 2 I2CWriteByte(TW803_P0,0x11,0x20);
365 2 I2CWriteByte(TW803_P0,0x12,0xef);
366 2 I2CWriteByte(TW803_P0,0x14,0x6c);
367 2 }
368 1 m_cSource = itypeRGB;
369 1
370 1 }
371
372
373 void SearchAltMode(void)
374 {
375 1 m_pModeDescriptorPtr = &ModeTable[EepPrivate.cModeID];
376 1
377 1 m_cBuff[0] = m_pModeDescriptorPtr->cResID;
378 1 m_pResolutionPtr = &ResolutionTable[m_cBuff[0]];
379 1
380 1 if(m_pModeDescriptorPtr->cModeFlags1 & bSubSample)
381 1 {
382 2 SetModeCaptureData(m_pModeDescriptorPtr->wHTotal/2, (m_pModeDescriptorPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)/
-2,
383 2 (m_pModeDescriptorPtr->cVBlk-VSGEPW),m_pModeDescriptorPtr->cModeFlags2);
384 2 }
385 1 else if(m_pModeDescriptorPtr->cModeFlags1 & bDoubSample)
386 1 {
387 2 SetModeCaptureData(m_pModeDescriptorPtr->wHTotal*2, (m_pModeDescriptorPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)*
-2,
388 2 (m_pModeDescriptorPtr->cVBlk-VSGEPW),m_pModeDescriptorPtr->cModeFlags2);
389 2 }
390 1 else
391 1 {
392 2 SetModeCaptureData(m_pModeDescriptorPtr->wHTotal,(m_pModeDescriptorPtr->wHBlk-HOFFSETPW-HOFFSET_MIN),
393 2 (m_pModeDescriptorPtr->cVBlk-VSGEPW), m_pModeDescriptorPtr->cModeFlags2);
394 2 }
395 1
396 1 if ((m_cSource&0x0F)==(isrcANALOG|isrcSOG))
397 1 twdDelay(250);
398 1 else
399 1 twdDelay(350); //for 3100(802B)
400 1
401 1 if(!m_bDosMode)
402 1 {
403 2 GetVResolution();
404 2 if(abs(m_pResolutionPtr->wVRes-m_wVRes) >2)
405 2 {
406 3 m_dwBuff[0] = 0;
407 3 m_bAlt = GetAlternate();
408 3 }
409 2 else
410 2 {
411 3 m_wBuff[0] = m_pModeDescriptorPtr->wHTotal;
412 3 m_dwBuff[0] = GetPhaseDelta(m_wBuff[0]);
413 3 m_bAlt = GetAlternate();
414 3 }
415 2 }
416 1 else
417 1 {
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 8
418 2 m_wBuff[0] = m_pModeDescriptorPtr->wHTotal;
419 2 m_dwBuff[0] = GetPhaseDelta(m_wBuff[0]);
420 2 m_bAlt = GetAlternate();
421 2 }
422 1 }
423
424 BOOL GetAlternate(void)
425 {
426 1 m_cBuff[2] = 0xFF;
427 1
428 1 for (m_cBuff[0] = 0; m_cBuff[0] <= ALTHTOTAL; m_cBuff[0]++)
429 1 {
430 2 m_pAltHTotalPtr = &AltHTotals[m_cBuff[0]];
431 2 if (m_pAltHTotalPtr->cModeID == EepPrivate.cModeID)
432 2 {
433 3 if(!m_bDosMode) //None Dos Mode
434 3 {
435 4 m_cBuff[1] = m_pAltHTotalPtr->cResID;
436 4 m_pResolutionPtr = &ResolutionTable[m_cBuff[1]];
437 4 if ((m_cBuff[3] = abs(m_wVRes - m_pResolutionPtr->wVRes)) < 5)
438 4 {
439 5 if(m_pAltHTotalPtr->cModeFlags & bSubSample)
440 5 {
441 6 SetModeCaptureData(m_pAltHTotalPtr->wHTotal/2,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)/2,
442 6 (m_pAltHTotalPtr->cVBlk-VSGEPW),m_pAltHTotalPtr->cModeFlags);
443 6 }
444 5 else if(m_pAltHTotalPtr->cModeFlags & bDoubSample)
445 5 {
446 6 SetModeCaptureData(m_pAltHTotalPtr->wHTotal*2,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)*2,
447 6 (m_pAltHTotalPtr->cVBlk-VSGEPW),m_pAltHTotalPtr->cModeFlags);
448 6 }
449 5 else
450 5 {
451 6 SetModeCaptureData(m_pAltHTotalPtr->wHTotal,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN),
452 6 (m_pAltHTotalPtr->cVBlk-VSGEPW), m_pAltHTotalPtr->cModeFlags);
453 6 }
454 5
455 5 twdDelay(300); //Add for 3100
456 5 m_wBuff[0] = m_pAltHTotalPtr->wHTotal;
457 5 m_dwBuff[1] = GetPhaseDelta(m_wBuff[0]);
458 5 //Keep bigger one
459 5 if(m_dwBuff[0] < m_dwBuff[1])
460 5 {
461 6 m_dwBuff[0] = m_dwBuff[1];
462 6 EepPrivate.cAltID = m_cBuff[0];
463 6 }
464 5 }
465 4 }
466 3 else //Dos Mode
467 3 {
468 4 if(m_pAltHTotalPtr->cModeFlags & bSubSample)
469 4 {
470 5 SetModeCaptureData(m_pAltHTotalPtr->wHTotal/2,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)/2,
471 5 (m_pAltHTotalPtr->cVBlk-VSGEPW),m_pAltHTotalPtr->cModeFlags);
472 5 }
473 4 else if(m_pAltHTotalPtr->cModeFlags & bDoubSample)
474 4 {
475 5 SetModeCaptureData(m_pAltHTotalPtr->wHTotal*2,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN)*2,
476 5 (m_pAltHTotalPtr->cVBlk-VSGEPW),m_pAltHTotalPtr->cModeFlags);
477 5 }
478 4 else
479 4 {
C51 COMPILER V7.50 MODECTRL 10/30/2006 16:14:45 PAGE 9
480 5 SetModeCaptureData(m_pAltHTotalPtr->wHTotal,(m_pAltHTotalPtr->wHBlk-HOFFSETPW-HOFFSET_MIN),
481 5 (m_pAltHTotalPtr->cVBlk-VSGEPW), m_pAltHTotalPtr->cModeFlags);
482 5 }
483 4
484 4 twdDelay(300); //Add for 3100
485 4 m_wBuff[0] = m_pAltHTotalPtr->wHTotal;
486 4 m_dwBuff[1] = GetPhaseDelta(m_wBuff[0]);
487 4 //Keep bigger one
488 4 if(m_dwBuff[0] < m_dwBuff[1])
489 4 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -