📄 auto.lst
字号:
253 2 //~ Difference is too large, so following the mode table. ~//
254 2 m_wBuff[0] -= 4;
255 2 }
256 1 else
257 1 {
258 2 //~ Reset ADC Capture HSize 0x48, 0x49 ~//
259 2 I2CWriteByte(TW803_P0, VATVR_L, (uCHAR)m_wVRes);
260 2 I2CWriteByte(TW803_P0, VATVR_H, (uCHAR)(m_wVRes>>8));
261 2 }
262 1 //~ Fill in the HSync Start Point by the register POS_LB. ~//
263 1 if(m_wBuff[0]>(m_pModeDescriptorPtr->cVBlk*1.01))
264 1 {
265 2 I2CWriteByte(TW803_P0, VSST_L, (uCHAR)m_pModeDescriptorPtr->cVBlk);
266 2 I2CWriteByte(TW803_P0, VSST_H, (uCHAR)(m_pModeDescriptorPtr->cVBlk>>8));
267 2 }
268 1 else
269 1 {
270 2 I2CWriteByte(TW803_P0, VSST_L, (uCHAR)m_wBuff[0]);
271 2 I2CWriteByte(TW803_P0, VSST_H, (uCHAR)(m_wBuff[0]>>8));
272 2 }
273 1 }
274
275
276 BOOL AutoPhaseAdj(void)
277 {
278 1 uWORD MaxTrackValue, MinTarckValue, TrackValue;
279 1 uCHAR MaxTrackAddre, MinTrackAddre;
280 1 uCHAR i, PhSetTemp, ADCDetTemp, CountTemp;
281 1
282 1 //~ Find Max and Min phase ~//
283 1 MaxTrackValue=0x0000;
284 1 MinTarckValue=0xFFFF;
285 1 PhSetTemp = I2CReadByte(TW803_P0, 0x20)&0x07;
286 1 ADCDetTemp = I2CReadByte(TW803_P0, 0x21)&0x7F;
287 1
288 1 //~ Find Max. and Min. phase tracking. ~//
289 1 for(i=0; i<32; i+=2)
290 1 {
291 2 //~ Set pahse ~//
292 2 I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|(i<<3)));
293 2 CountTemp = 255;
294 2 //~ Enable phase tracking. ~//
295 2 I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
296 2 /*if((I2CReadByte(TW803_P0, 0x21)&0x80)==0)
297 2 {
298 2 CountTemp =20;
299 2 } */
300 2 while(CountTemp)
301 2 {
C51 COMPILER V7.50 AUTO 10/30/2006 16:14:46 PAGE 6
302 3 if(I2CReadByte(TW803_P0, 0x21)&0x80)
303 3 break;
304 3 else
305 3 /* TrackValue = TrackValue*1000;
306 3 TrackValue = TrackValue/1000; */
307 3 CountTemp--;
308 3 }
309 2 TrackValue = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
310 2 //~ Disable phase tracking. ~//
311 2 I2CWriteByte(TW803_P0, 0x21, ADCDetTemp&0x7F);
312 2
313 2 if(TrackValue>MaxTrackValue)
314 2 {
315 3 MaxTrackValue = TrackValue;
316 3 MaxTrackAddre = i;
317 3 }
318 2 if(TrackValue<MinTarckValue)
319 2 {
320 3 MinTarckValue = TrackValue;
321 3 MinTrackAddre = i;
322 3 }
323 2 }
324 1
325 1 //~ Define evaluation range. ~//
326 1 if(MaxTrackAddre>MinTrackAddre)
327 1 {
328 2 if((MaxTrackAddre + 6) > 31 )
329 2 {
330 3 m_cBuff[1] = 31;
331 3 }
332 2 else
333 2 {
334 3 m_cBuff[1] = MaxTrackAddre + 6;
335 3 }
336 2 if(MaxTrackAddre<6)
337 2 {
338 3 m_cBuff[0] = 0;
339 3 }
340 2 else
341 2 {
342 3 m_cBuff[0] = MaxTrackAddre - 6;
343 3 }
344 2 }
345 1 else
346 1 {
347 2 if((MaxTrackAddre + 6) > 32 )
348 2 {
349 3 m_cBuff[1] = 32;
350 3 }
351 2 else
352 2 {
353 3 m_cBuff[1] = MaxTrackAddre + 6;
354 3 }
355 2 if(MaxTrackAddre<6)
356 2 {
357 3 m_cBuff[0] = 0;
358 3 }
359 2 else
360 2 {
361 3 m_cBuff[0] = MaxTrackAddre - 6;
362 3 }
363 2 }
C51 COMPILER V7.50 AUTO 10/30/2006 16:14:46 PAGE 7
364 1
365 1 //~ Find Min. Delta ~//
366 1 MaxTrackValue = 0xFFFF;
367 1 MaxTrackAddre = 0;
368 1 if(m_cBuff[0]==0) m_cBuff[0] += 1;
369 1 if(m_cBuff[1]==31) m_cBuff[1] -= 1;
370 1 for(i=m_cBuff[0]; i<m_cBuff[1]; i++)
371 1 {
372 2 //~ Set pahse 1 ~//
373 2
374 2 I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((i-1)<<3)));
375 2 CountTemp = 255;
376 2 //~ Enable phase tracking. ~//
377 2 I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
378 2 while(CountTemp)
379 2 {
380 3 if(I2CReadByte(TW803_P0, 0x21)&0x80)
381 3 break;
382 3 else
383 3 CountTemp--;
384 3 }
385 2 m_wBuff[0] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
386 2
387 2 //~ Set pahse 2 ~//
388 2 I2CWriteByte(TW803_P0, 0x20, (PhSetTemp|((i)<<3)));
389 2 CountTemp = 255;
390 2 //~ Enable phase tracking. ~//
391 2 I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
392 2 while(CountTemp)
393 2 {
394 3 if(I2CReadByte(TW803_P0, 0x21)&0x80)
395 3 break;
396 3 else
397 3 CountTemp--;
398 3 }
399 2 m_wBuff[1] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
400 2
401 2 //~ Set pahse 3 ~//
402 2 I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((i+1)<<3)));
403 2 CountTemp = 255;
404 2 //~ Enable phase tracking. ~//
405 2 I2CWriteByte(TW803_P0, 0x21, ADCDetTemp|0x80);
406 2 while(CountTemp)
407 2 {
408 3 if(I2CReadByte(TW803_P0, 0x21)&0x80)
409 3 break;
410 3 else
411 3 CountTemp--;
412 3 }
413 2 m_wBuff[2] = I2CReadByte(TW803_P0, 0x23) | (I2CReadByte(TW803_P0, 0x24)<<8);
414 2 MinTarckValue = (abs(m_wBuff[1]-m_wBuff[0]) + abs(m_wBuff[2]-m_wBuff[1]))>>1;
415 2 if(MinTarckValue<MaxTrackValue)
416 2 {
417 3 MaxTrackValue = MinTarckValue;
418 3 MaxTrackAddre = i;
419 3 }
420 2 }
421 1
422 1 //~ Set phase ~//
423 1 I2CWriteByte(TW803_P0, 0x20,(PhSetTemp|((MaxTrackAddre)<<3)));
424 1 }
425
C51 COMPILER V7.50 AUTO 10/30/2006 16:14:46 PAGE 8
426
427
428 uDWORD GetPhaseQuality(void)
429 {
430 1 uDWORD wdPhase;
431 1 //uCHAR cTemp;
432 1 uCHAR cCount;
433 1
434 1 #if 0
cTemp = I2CReadByte(TW803_P0, 0x50);
cTemp |= 0x01; //Enable auto tracking interrupt
I2CWriteByte(TW803_P0, 0x50, cTemp);
#endif
439 1
440 1 cCount = 255;
441 1 while(cCount--)
442 1 {
443 2 if(INT0==0) break;
444 2 twdDelay(1); //Time dealy, need adjust
445 2 if (I2CReadByte(TW803_P0, 0x50)&0x02)
446 2 break;
447 2 }
448 1
449 1 wdPhase = I2CReadByte(TW803_P0, 0x57);
450 1 wdPhase <<= 8;
451 1 wdPhase |= I2CReadByte(TW803_P0, 0x56);
452 1 wdPhase <<= 8;
453 1 wdPhase |= I2CReadByte(TW803_P0, 0x55);
454 1 //11.11 wdPhase <<= 8;
455 1 //wdPhase |= I2CReadByte(TW803_P0, 0x54);
456 1
457 1 //cTemp &= 0xFC; //Disable auto tracking and clear done bit
458 1 I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)&0xFC);
459 1 I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)|0x01);
460 1
461 1 return wdPhase;
462 1 }
463
464
465 uDWORD GetPhaseDelta(uWORD wTotal)
466 {
467 1 uDWORD IDATA wdMinPhase, wdMaxPhase;
468 1 uDWORD IDATA dwPhase1;
469 1
470 1 wdMaxPhase = 0;
471 1 wdMinPhase = 0xFFFFFFFFL;
472 1
473 1 I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)|0x01); //Enable auto tracking interrupt
474 1 //Purpose: phase+2, improve speed
475 1 for (m_cBuff[3]=0; m_cBuff[3]<16; m_cBuff[3] +=1)
476 1 {
477 2 if(INT0==0) return FALSE;
478 2 I2CWriteByte(TW803_P0, ADC_PHASE, m_cBuff[3]<<4);
479 2 dwPhase1 = GetPhaseQuality();
480 2
481 2 if (dwPhase1 > wdMaxPhase)
482 2 {
483 3 wdMaxPhase = dwPhase1;
484 3 m_cGoodPhase = m_cBuff[3];
485 3 }
486 2 if (dwPhase1 < wdMinPhase)
487 2 {
C51 COMPILER V7.50 AUTO 10/30/2006 16:14:46 PAGE 9
488 3 wdMinPhase = dwPhase1;
489 3 }
490 2 }
491 1 //Disable auto tracking and clear done bit
492 1 I2CWriteByte(TW803_P0, 0x50, I2CReadByte(TW803_P0, 0x50)&0xFC);
493 1
494 1 return (wdMaxPhase - wdMinPhase) / wTotal;
495 1
496 1 }
497
498
499
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2435 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 22
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 12
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 + -