autoadj.lst
来自「NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码N」· LST 代码 · 共 1,316 行 · 第 1/5 页
LST
1,316 行
247 2 WriteIIC_HW(Scaler_Addr,0x1F,0x00);
248 2 WriteIIC_HW(Scaler_Addr,0x1E,0x09);
249 2 Timer3 = 10;
250 2 while(!(ReadIIC_HW(Scaler_Addr,0x1F) & BIT_0) && Timer3 != 0){
251 3 CheckModeChange();
252 3 if((flag2 & BIT_0) != 0)
253 3 return;
254 3 }
255 2 if(Timer3 == 0){
256 3 flag2 |= BIT_0;
257 3 return;
258 3 }
259 2 H_Act = ReadWordIIC_HW(Scaler_Addr,0x38) & 0x07ff;
260 2 H_Difference = ReadIIC_HW(Scaler_Addr,0x1F);
261 2 Compare = (H_Difference & 0x0C) >> 2;
262 2 H_Difference = (H_Difference & 0xF0) >> 4;
263 2 if((flag3 & BIT_2) != 0x00){
264 3 printf("PLL_Divider = %d\r\n",PLL_Divider);
265 3 printf("H_Act = %d\r\n",H_Act);
266 3 printf("H_Difference = %d\r\n",(unsigned short)H_Difference);
267 3 }
268 2 if(Compare==0x01){
269 3 break; //H_Ref=H_Act
270 3 }
271 2 if(Compare==0x00){
272 3 // if(H_Difference == 0x01)
273 3 // break;
274 3 HTotal = HTotal + H_Difference;
275 3 if(HTotal > 2048){
276 4 i = 0xff;
277 4 break;
278 4 }
C51 COMPILER V7.20 AUTOADJ 09/14/2004 12:20:56 PAGE 18
279 3 }
280 2 if(Compare == 0x02){
281 3 // if(H_Difference == 0x01)
282 3 // break;
283 3 HTotal = HTotal - H_Difference;
284 3 if(HTotal < H_Ref){
285 4 i = 0xff;
286 4 break;
287 4 }
288 3 }
289 2 SetADC_PLL();
290 2 if((flag3 & BIT_1) != 0){
291 3 flag2 |= BIT_0;
292 3 return;
293 3 }
294 2 }
295 1 if(i == 0xff){
296 2 NonFullScreen = 1;
297 2 flag2 |= BIT_0;
298 2 if((flag3 & BIT_2) != 0x00){
299 3 printf("Nono full screen H\r\n");
300 3 }
301 2 }
302 1 else{
303 2 #if 1
304 2 HTotal = (HTotal + 2) & 0xfffc;
305 2 #else
HTotal = (HTotal + 1) & 0xfffe;
#endif
308 2 SetADC_PLL();
309 2 if((flag3 & BIT_1) != 0){
310 3 flag2 |= BIT_0;
311 3 return;
312 3 }
313 2 if((flag3 & BIT_2) != 0x00){
314 3 printf("H_Total = %d\r\n",HTotal);
315 3 }
316 2 }
317 1 }
318
319 void AutoPhaseFineTune(void)
320 {
321 1 unsigned char qq,yy,zz,uu,i;
322 1 unsigned long Phase_0, Phase_1, Phase_2, Phase_Pre3, Phase_Now3, Phase_Delta;
323 1 unsigned char value;
324 1 if((flag2 & BIT_0) != 0x00)
325 1 return;
326 1 if((flag3 & BIT_2) != 0x00){
327 2 printf("Auto Phase Fine Tune\r\n");
328 2 }
329 1 //-------------------------at color xx , calculate phase-------------------------
330 1 Phase_1 = 0x00000000; // (i-1)
331 1 Phase_2 = 0x00000000; // (i-2)
332 1 Phase_Pre3 = 0x00000000; // (pre sum)->(delta)->(now sum)
333 1 Phase_Delta = 0xffffffff; // (min delta)
334 1 // ADC_Phase =( ADC_Phase - 6) & 0x3F; // 3 is search range....
335 1 qq = ADC_Phase;
336 1 // SetADC_Phase();
337 1 WriteIIC_HW(Scaler_Addr,0x20,0x01); // 0x01 --> 0x09
338 1 Timer3 = 100;
339 1 // for(yy=1; yy<16; yy++){
340 1 for(yy=1; yy<Repeat; yy++){
C51 COMPILER V7.20 AUTOADJ 09/14/2004 12:20:56 PAGE 19
341 2 while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
342 3 CheckModeChange();
343 3 if((flag2 & BIT_0) != 0)
344 3 return;
345 3 }
346 2 ADC_Phase = (qq + yy) & 0x3f;
347 2 SetADC_Phase();
348 2 WriteIIC_HW(Scaler_Addr,0x20,0x01); // 0x01 --> 0x09
349 2 Timer3 = 100;
350 2 Phase_Now3 = 0x00000000;
351 2 for (zz=0x24; zz>0x20; zz--){
352 3 value = ReadIIC_HW(Scaler_Addr,zz);
353 3 Phase_Now3 = Phase_Now3 << 8;
354 3 Phase_Now3 |= value;
355 3 }
356 2 i = (ADC_Phase - 1) & 0x3f;
357 2 if((flag3 & BIT_2) != 0x00)
358 2 printf("Phase %d = %x %x\r\n",(unsigned short)i,(unsigned short)(Phase_Now3>>16),(unsigned short)Phase_
-Now3);
359 2 Phase_2 = Phase_1; // Shift
360 2 Phase_1 = Phase_0;
361 2 Phase_0 = Phase_Now3;
362 2 Phase_Now3 = (Phase_0>>1) + (Phase_1>>1) + (Phase_2>>2); // Phase_Now3
363 2 if(yy < 4){
364 3 Phase_Pre3 = Phase_Now3; // Phase_Pre3 = Phase_Now3
365 3 }
366 2 else{
367 3 if(Phase_Now3 > Phase_Pre3){
368 4 Phase_Pre3 = Phase_Now3 - Phase_Pre3;
369 4 }
370 3 else{
371 4 Phase_Pre3 = Phase_Pre3 - Phase_Now3; // Phase_Pre3=delta
372 4 }
373 3 if(Phase_Pre3 < Phase_Delta){
374 4 uu = i;
375 4 Phase_Delta = Phase_Pre3;
376 4 }
377 3 Phase_Pre3 = Phase_Now3; // Phase_Pre3 = Phase_Now3
378 3 }
379 2 }
380 1 ADC_Phase = (uu - 2) & 0x3f;
381 1 SetADC_Phase();
382 1 if((flag3 & BIT_2) != 0x00)
383 1 printf("Phase ok = %d\r\n",(unsigned short)ADC_Phase);
384 1 }
385
386 void SetADC_Offset(unsigned char OffSet)
387 {
388 1 unsigned char i,j,k,m,n,value;
389 1 unsigned long PhaseResult,Temp;
390 1 // WriteIIC_HW(Scaler_Addr,0x02,0x36);
391 1 // WriteIIC_HW(Scaler_Addr,0x04,0x35);
392 1 // WriteIIC_HW(Scaler_Addr,0x06,0x37);
393 1 WriteIIC_HW(Scaler_Addr,0x26,0x00);
394 1 WriteIIC_HW(Scaler_Addr,0x27,0x00);
395 1 for(m=0; m<3; m++){
396 2 for(k=OffSet; k<128; k=k+8){
397 3 i = 0x0f + m;
398 3 WriteIIC_HW(Scaler_Addr,i,k);
399 3 WaitSetup(5);
400 3 Timer3 = 10;
401 3 i = 0x19 + m * 0x10;
C51 COMPILER V7.20 AUTOADJ 09/14/2004 12:20:56 PAGE 20
402 3 WriteIIC_HW(Scaler_Addr,0x20,i);
403 3 while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
404 4 CheckModeChange();
405 4 if((flag2 & BIT_0) != 0)
406 4 return;
407 4 }
408 3 if(Timer3 == 0){
409 4 flag2 |= BIT_0;
410 4 return;
411 4 }
412 3 j = 0;
413 3 Temp = 0;
414 3 for(i=0; i<8; i++){
415 4 WriteIIC_HW(Scaler_Addr,0x24,i);
416 4 value = ReadIIC_HW(Scaler_Addr,0x23);
417 4 PhaseResult = value;
418 4 PhaseResult <<= 8;
419 4 value = ReadIIC_HW(Scaler_Addr,0x22);
420 4 PhaseResult += value;
421 4 PhaseResult <<= 8;
422 4 value = ReadIIC_HW(Scaler_Addr,0x21);
423 4 PhaseResult += value;
424 4 if(PhaseResult > Temp){
425 5 Temp = PhaseResult;
426 5 j = i;
427 5 }
428 4 }
429 3 if(Temp > 0x300){
430 4 i = 0x0f + m;
431 4 j = k+j;
432 4 WriteIIC_HW(Scaler_Addr,i,j);
433 4 break;
434 4 }
435 3 }
436 2 if(k == 128){
437 3 flag2 |= BIT_0;
438 3 return;
439 3 }
440 2 for(n=0; n<8; n++){
441 3 i = 0x0f + m;
442 3 WriteIIC_HW(Scaler_Addr,i,k+n);
443 3 WaitSetup(5);
444 3 Timer3 = 10;
445 3 i = 0x19 + m * 0x10;
446 3 WriteIIC_HW(Scaler_Addr,0x20,i);
447 3 while((ReadIIC_HW(Scaler_Addr,0x20) & BIT_0) && Timer3 != 0){
448 4 CheckModeChange();
449 4 if((flag2 & BIT_0) != 0)
450 4 return;
451 4 }
452 3 if(Timer3 == 0){
453 4 flag2 |= BIT_0;
454 4 return;
455 4 }
456 3 j = 0;
457 3 Temp = 0;
458 3 for(i=0; i<8; i++){
459 4 WriteIIC_HW(Scaler_Addr,0x24,i);
460 4 value = ReadIIC_HW(Scaler_Addr,0x23);
461 4 PhaseResult = value;
462 4 PhaseResult <<= 8;
463 4 value = ReadIIC_HW(Scaler_Addr,0x22);
C51 COMPILER V7.20 AUTOADJ 09/14/2004 12:20:56 PAGE 21
464 4 PhaseResult += value;
465 4 PhaseResult <<= 8;
466 4 value = ReadIIC_HW(Scaler_Addr,0x21);
467 4 PhaseResult += value;
468 4 if(PhaseResult > Temp){
469 5 Temp = PhaseResult;
470 5 j = i;
471 5 }
472 4 }
473 3 if(j == 0){
474 4 break;
475 4 }
476 3 }
477 2 i = 0x0f + m;
478 2 j = k+n;
479 2 WriteIIC_HW(Scaler_Addr,i,j);
480 2 }
481 1 Write24C16(0xfa,ReadIIC_HW(Scaler_Addr,0x0f));
482 1 Write24C16(0xfb,ReadIIC_HW(Scaler_Addr,0x10));
483 1 Write24C16(0xfc,ReadIIC_HW(Scaler_Addr,0x11));
484 1 }
485
486 void SetADC_Gain(unsigned char OffSet)
487 {
488 1 unsigned char i,j,k,m,n,value;
489 1 unsigned long PhaseResult,Temp;
490 1 WriteIIC_HW(Scaler_Addr,0x26,0x00);
491 1 WriteIIC_HW(Scaler_Addr,0x27,0xf8);
492 1 for(m=0; m<3; m++){
493 2 for(k=OffSet; k>7; k=k-8){
494 3 i = 0x02 + m * 2;
495 3 WriteIIC_HW(Scaler_Addr,i,k);
496 3 WaitSetup(5);
497
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?