display.lst
字号:
#endif
239 1 }
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 5
240
241 void DisplaySetTiming(uWORD wDHTotal, uWORD wDVTotal)
242 {
243 1 uWORD wTemp;
244 1
245 1 if(wDHTotal>2400 || wDHTotal<600) return; //unreasonable result
246 1
247 1 wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2;
248 1 I2CWriteByte(TW101, 0xB0, wTemp);
249 1 I2CWriteByte(TW101, 0xB1, wTemp>>8);
250 1
251 1 I2CWriteByte(TW101, 0xB2, DWVSST);
252 1
253 1 #ifdef WVGA
254 1 //Ruby test 2004-06-03
255 1 if(!m_cStandard)//NTSC
256 1 I2CWriteByte(TW101, 0xB2, DWVSST);
257 1 else //PAL
258 1 I2CWriteByte(TW101, 0xB2, DWVSST-4);
259 1 /////
260 1 #endif
261 1
262 1
263 1 #ifdef AU_7
if((m_cScaleratio==Scale4_3)&&(!m_cStandard))//NTSC
I2CWriteByte(TW101, 0xB2, DWVSST-1);
#endif
267 1
268 1 I2CWriteByte(TW101, 0xB3, 0);
269 1
270 1 I2CWriteByte(TW101,0xB4,(uCHAR)(m_wDWHSZ)); //4:3
271 1 I2CWriteByte(TW101,0xB5,(uCHAR)(m_wDWHSZ>>8));
272 1 I2CWriteByte(TW101, 0xB8, (unsigned char) wDHTotal);
273 1
274 1
275 1 I2CWriteByte(TW101, 0xB9, (unsigned char)(wDHTotal>>8));
276 1
277 1 I2CWriteByte(TW101, 0xBA, (unsigned char) wDVTotal);
278 1 I2CWriteByte(TW101, 0xBB, (unsigned char)(wDVTotal>>8));
279 1
280 1 I2CWriteByte(TW101, 0xBC, (unsigned char) DISP_DFLT_HSWIDTH);
281 1 I2CWriteByte(TW101, 0xBD, (unsigned char)(DISP_DFLT_HSWIDTH>>8));
282 1
283 1 I2CWriteByte(TW101, 0xBE, (unsigned char) DISP_DFLT_VSWIDTH);
284 1 I2CWriteByte(TW101, 0xBF, (unsigned char)(DISP_DFLT_VSWIDTH>>8));
285 1 #ifdef LOAD_TIME
if(!m_cStandard)
{
if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX))==Panel_ID)
{
I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8));
I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2));
}
}
else
{
if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX1))==Panel_ID)
{
I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8_PAL));
I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2_PAL));
}
}
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 6
#endif
303 1 }
304
305 float DisplayGetHVTotal(uWORD *wDHTotal, uWORD *wDVTotal, uWORD *wDVFrac, uWORD wDWVSZ, uDWORD dwFrameXclk
-Cnt)
306 {
307 1 float fDHTotalF;
308 1
309 1 //Ruby fDHTotalF = (float)dwFrameXclkCnt * m_wVRes *2/ m_wVTotal / wDWVSZ;
310 1
311 1 fDHTotalF = (float)dwFrameXclkCnt * m_wVRes/ m_wVTotal / wDWVSZ;
312 1 *wDHTotal = (int)fDHTotalF/2 * 2;
313 1
314 1 #ifdef KVGA
/*
if(!m_cStandard)//NTSC
*wDHTotal = ((int)fDHTotalF/2 * 2);
else
*wDHTotal = ((int)fDHTotalF/2 * 2);
*/
/////
if(!m_cStandard)//NTSC
{
#ifdef AU_7
*wDHTotal = (int)0x0266; //0x0266 for LG_7 0x0265 for AU_7 //0x025E; v36 //0x026B; V34
#endif
#ifdef LG_7
*wDHTotal = (int)0x0266;
#endif
#ifdef PVI_7
*wDHTotal = (int)0x026c;
#endif
}
else
{
#ifdef AU_7
*wDHTotal = (int)0x02EC; //0x0266 for LG_7 0x0265 for AU_7 //0x025E; v36 //0x026B; V34
#endif
#ifdef LG_7
*wDHTotal = (int)0x02ED; //0x02E7; v36 //0x02F1; V34
#endif
#ifdef PVI_7
*wDHTotal = (int)0x02F5;
#endif
}
#endif
350 1 #ifdef AT_VGA
*wDHTotal = *wDHTotal-3;
#endif
353 1 /*
354 1 #ifdef WVGA
355 1 if(!m_cStandard)//NTSC
356 1 *wDHTotal = ((int)fDHTotalF/2 * 2);
357 1 else
358 1 *wDHTotal = ((int)fDHTotalF/2 * 2)-0x0a;
359 1
360 1 #endif*/
361 1 m_dwBuff[1] = dwFrameXclkCnt*1000/ (*wDHTotal);
362 1 *wDVTotal = m_dwBuff[1] / 1000;
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 7
363 1 *wDVFrac = m_dwBuff[1] % 1000;
364 1
365 1 return fDHTotalF;
366 1 }
367
368 uWORD DisplayVibration(float fDHTotalF, uWORD wDHTotal, uWORD* wDVTotal, uWORD wDWVSZ, uWORD wDVFrac)
369 {
370 1 uWORD wActiveDiff;
371 1 uWORD wVibLeft;
372 1
373 1 wActiveDiff=(fDHTotalF-wDHTotal)*wDWVSZ;
374 1
375 1 if(wDVFrac % 10 >= 5)
376 1 wDVFrac = wDVFrac / 10 + 1;
377 1 else
378 1 wDVFrac = wDVFrac / 10;
379 1
380 1 if(wDVFrac < 95)
381 1 {
382 2 wDVFrac = wDVFrac + 5;
383 2 m_wBuff[0] = (unsigned long)wDVFrac*wDHTotal/100;
384 2 }
385 1 else
386 1 {
387 2 m_wBuff[0] = 0;
388 2 }
389 1 //m_wBuff[0] is fraction part of output hsync(pixels)
390 1
391 1
392 1 if(m_wBuff[0]<wActiveDiff)
393 1 {
394 2 if(wActiveDiff-m_wBuff[0]>=wDHTotal*0.3)
395 2 {
396 3 *wDVTotal -= 1;
397 3 m_wBuff[0] += wDHTotal;
398 3 }
399 2 }
400 1 if(m_wBuff[0]>=wActiveDiff)
401 1 {
402 2 if(wActiveDiff <= (unsigned long)wDWVSZ * 255 / 128)
403 2 m_cBuff[0]=(unsigned long)wActiveDiff*128/wDWVSZ;
404 2 else
405 2 m_cBuff[0]=255;
406 2 #ifndef T100 //Ruby test 2004-08-19
407 2 // I2CWriteByte(TW101, 0x86, m_cBuff[0]);
408 2 #endif
409 2 //Ruby test 2004-06-03
410 2 m_cBuff[0]=(m_wBuff[0]-wActiveDiff)/(*wDVTotal-DWVSST-DISP_DFLT_VSWIDTH-wDWVSZ);
411 2 /////
412 2 #ifndef T100
413 2 // I2CWriteByte(TW101, 0x87, m_cBuff[0]);
414 2 #endif
415 2 wVibLeft=0;
416 2 }
417 1 else
418 1 {
419 2 if(m_wBuff[0] <= (unsigned long)wDWVSZ*255/128)
420 2 m_cBuff[0]=(unsigned long)m_wBuff[0]*128/wDWVSZ;
421 2 else
422 2 m_cBuff[0]=255;
423 2 #ifndef T100 //Ruby test 2004-08-19
424 2 // I2CWriteByte(TW101, 0x86, m_cBuff[0]);
C51 COMPILER V7.06 DISPLAY 12/28/2004 10:14:03 PAGE 8
425 2 // I2CWriteByte(TW101, 0x87, 0);
426 2 #endif
427 2 wVibLeft=(wActiveDiff-m_wBuff[0]);
428 2 }
429 1 return wVibLeft; //Remap DCLK
430 1 }
431
432
433 uDWORD DisplayGetXclkCnt(uDWORD dwFrameXclkCnt)
434 {
435 1 dwFrameXclkCnt *= DNDIV_40;
436 1 return dwFrameXclkCnt;
437 1 }
438
439 uDWORD GetInputVSyncXclkCnt(void)
440 {
441 1 uDWORD dwVSyncCount;
442 1
443 1 m_cBuff[0] = I2CReadByte(TW101, 0x50);
444 1 I2CWriteByte(TW101, 0x50, m_cBuff[0] | 0x10); //Start to Measurement VSYNC counter using XCLK
445 1
446 1 m_cBuff[0] = 100;
447 1 while(m_cBuff[0]--)
448 1 {
449 2 twdDelay(1);
450 2 if ((I2CReadByte(TW101, 0x50)&0x20)) //V sync counter is done exit
451 2 break;
452 2 }
453 1 m_cBuff[0] = I2CReadByte(TW101, 0x50);
454 1 m_cBuff[0] &= 0xCF; //Disable Auto Position
455 1 I2CWriteByte(TW101, 0x50, m_cBuff[0]);
456 1
457 1 dwVSyncCount = I2CReadByte(TW101, 0x53);
458 1 dwVSyncCount <<= 8;
459 1 dwVSyncCount |= I2CReadByte(TW101, 0x52);
460 1 dwVSyncCount <<= 8;
461 1 dwVSyncCount |= I2CReadByte(TW101, 0x51);
462 1
463 1 return dwVSyncCount;
464 1 }
465
466
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2921 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 84
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 + -