📄 scaler.lst
字号:
219 1 #if Panel_Spread_Spect_En == 0xff
220 1 i = (PanelSpreadSpectrumCtrl << 1) | BIT_0;
221 1 WriteIIC_HW(Scaler_Addr,0xf5,i);
222 1 #endif
223 1 WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
224 1 }
225 #if Use_TCON != 0
void WritePageScaler(unsigned char addr1,unsigned char addr2,unsigned char *p)
{
unsigned char i,ch;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(addr1);
/* transmit data */
for(i=0; i<16; i++){
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 5
ch = p[addr2 + i];
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
#endif
250 void SetADC_Phase(void)
251 {
252 1 WriteIIC_HW(Scaler_Addr,0xFF,0x01); // page1 enable
253 1 WriteIIC_HW(Scaler_Addr,0xD9,ADC_Phase);
254 1 WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
255 1 }
256
257 void SetADC_PLL(void)
258 {
259 1 unsigned long PixelRate,H_Counter;
260 1 unsigned short addr;
261 1 unsigned char ch,k;
262 1 float temp;
263 1 PixelRate = ((unsigned long)HTotal * H_SYNC)/10000;
264 1 ch = (unsigned char)PixelRate;
265 1 WriteIIC_HW(Scaler_Addr,0xFF,0x01); // page1 enable
266 1 //
267 1 WriteIIC_HW(Scaler_Addr,0xd0,0x43);
268 1 //out of range
269 1 addr = 0x106 + (ModePoint * 8);
270 1 k = Read24C16(addr);
271 1 flag3 &= ~BIT_1; //in range
272 1 if((ch > P_Max)||(k == 9))
273 1 flag3 |= BIT_1; //out of range
274 1 if((H_SYNC > H_Max * 10)||(H_SYNC < H_Min * 10))
275 1 flag3 |= BIT_1; //out of range
276 1 if((V_SYNC > V_Max * 10)||(V_SYNC < V_Min * 10))
277 1 flag3 |= BIT_1; //out of range
278 1 //
279 1 if((flag1 & BIT_1) == 0){
280 2 k = ReadIIC_HW(Scaler_Addr,0xd1) & 0x03;
281 2 }
282 1 else{
283 2 if(ch > 100){
284 3 WriteIIC_HW(Scaler_Addr,0xd1,0x10);
285 3 k = 0;
286 3 }
287 2 else if (ch > 50){
288 3 WriteIIC_HW(Scaler_Addr,0xd1,0x11);
289 3 k = 1;
290 3 }
291 2 else{
292 3 WriteIIC_HW(Scaler_Addr,0xd1,0x12);
293 3 k = 2;
294 3 }
295 2 }
296 1 if((flag3 & BIT_2) != 0x00){
297 2 printf("Htotal = %d\r\n",HTotal);
298 2 printf("PixelRate = %d MHz\r\n",(unsigned short)PixelRate);
299 2 }
300 1 if((SyncMode == 0)||(SyncMode == 3))
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 6
301 1 WriteIIC_HW(Scaler_Addr,0xd6,0xbf);
302 1 else
303 1 WriteIIC_HW(Scaler_Addr,0xd6,0xa0);
304 1 WriteIIC_HW(Scaler_Addr,0xdb,0x0c);
305 1
306 1 if((flag1 & BIT_1) == 0){
307 2 //
308 2 if((SyncMode == 1)||(SyncMode == 2)){ //H+V SOG
309 3 WriteIIC_HW(Scaler_Addr,0xd5,0x0D);
310 3 }
311 2 else{
312 3 if((HV_Pol & BIT_4) == 0){
313 4 WriteIIC_HW(Scaler_Addr,0xd5,0x05);
314 4 }
315 3 else{
316 4 WriteIIC_HW(Scaler_Addr,0xd5,0x0d);
317 4 }
318 3 }
319 2 //
320 2 ch = ReadIIC_HW(Scaler_Addr,0xdf) & 0x3f;
321 2 PixelRate = ch;
322 2 PixelRate <<= 8;
323 2 ch = ReadIIC_HW(Scaler_Addr,0xde);
324 2 PixelRate += ch;
325 2 PixelRate <<= 8;
326 2 ch = ReadIIC_HW(Scaler_Addr,0xdd);
327 2 PixelRate += ch;
328 2 }
329 1 else{
330 2 WriteIIC_HW(Scaler_Addr,0xd5,0x00);
331 2 H_Counter = 0;
332 2 Timer3 = 25;
333 2 while(Timer3 != 0){
334 3 ch = ReadIIC_HW(Scaler_Addr,0xdf) & 0x3f;
335 3 PixelRate = ch;
336 3 PixelRate <<= 8;
337 3 ch = ReadIIC_HW(Scaler_Addr,0xde);
338 3 PixelRate += ch;
339 3 PixelRate <<= 8;
340 3 ch = ReadIIC_HW(Scaler_Addr,0xdd);
341 3 PixelRate += ch;
342 3
343 3 if(PixelRate > H_Counter){
344 4 if((PixelRate - H_Counter ) > 2){
345 5 H_Counter = PixelRate;
346 5 Timer3 = 25;
347 5 }
348 4 }
349 3 else{
350 4 if((H_Counter - PixelRate ) > 2){
351 5 H_Counter = PixelRate;
352 5 Timer3 = 25;
353 5 }
354 4 }
355 3 }
356 2 }
357 1 if((flag3 & BIT_2) != 0x00){
358 2 printf("Hcounter = %x %x\r\n",(unsigned short)(PixelRate>>16),(unsigned short)PixelRate);
359 2 }
360 1 temp = ((float)HTotal * 536870912) / PixelRate;
361 1 PixelRate = temp;
362 1 if((flag3 & BIT_2) != 0x00){
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 7
363 2 printf("DSS = %x %x\r\n",(unsigned short)(PixelRate>>16),(unsigned short)PixelRate);
364 2 }
365 1 for(k; k>0; k--){
366 2 PixelRate <<= 1;
367 2 }
368 1 WriteIIC_HW(Scaler_Addr,0xd2,(unsigned char)PixelRate);
369 1 WriteIIC_HW(Scaler_Addr,0xd3,(unsigned char)(PixelRate>>8));
370 1 WriteIICV_HW(Scaler_Addr,0xd4,(unsigned char)(PixelRate>>16));
371 1
372 1 WriteWordIIC_HW(Scaler_Addr,0xd7,HTotal);
373 1 //
374 1 if((SyncMode == 1)||(SyncMode == 2)){ //H+V SOG
375 2 WriteIIC_HW(Scaler_Addr,0xd5,0x0D);
376 2 }
377 1 else{
378 2 if((HV_Pol & BIT_4) == 0){
379 3 WriteIIC_HW(Scaler_Addr,0xd5,0x07);
380 3 }
381 2 else{
382 3 WriteIIC_HW(Scaler_Addr,0xd5,0x0F);
383 3 }
384 2 }
385 1
386 1 WriteIIC_HW(Scaler_Addr,0xFF,0x00); // page1 disable
387 1 }
388
389 void SetScaler(void)
390 {
391 1 unsigned char r;
392 1 unsigned short i,DispActiveHeight,dstVtotal,DV_HFreq,dstHtotal;
393 1 unsigned long dclk,temp;
394 1 if(ModePoint >= ModeNum)//define ModeMun 50
395 1 return;
396 1 if(SyncMode != 3)
397 1 //0 = Separate H & V
398 1 //1 = H+V
399 1 //2 = Sync on green
400 1 {
401 2 SetHP();
402 2 SetVP();
403 2 }
404 1 // WriteIIC_HW(Scaler_Addr,0x88,0xc8);
405 1 // Window size
406 1 i = 0x106 + (ModePoint * 8);
407 1 r = Read24C16(i);
408 1 H_Act = H_ActiveTab[r];
409 1 if((flag3 & BIT_2) != 0x00){
410 2 printf("Resolution = %d x %d\r\n",H_ActiveTab[r],V_ActiveTab[r]);
411 2 }
412 1 if((flag3 & BIT_6) != 0){
413 2 WriteWordIIC_HW(Scaler_Addr,0x16,V_ActiveTab[r]>>1); // Capture V_Active
414 2 }
415 1 else{
416 2 WriteWordIIC_HW(Scaler_Addr,0x16,V_ActiveTab[r]); // Capture V_Active
417 2 }
418 1 WriteWordIIC_HW(Scaler_Addr,0x1a,H_ActiveTab[r]); // Capture H_Active
419 1 // DCLK
420 1 dclk = ((unsigned long)PanelHeight * VTotal / V_ActiveTab[r]) * V_SYNC * PanelMinHTotal / 10000; //KHz
421 1 DispActiveHeight = PanelHeight; // set the vertical active height to the Panel Height
422 1 /*************************************************************************/
423 1 if(dclk > PanelMaxPClk){
424 2 DispActiveHeight = (unsigned long)PanelHeight * PanelMaxPClk / dclk;
C51 COMPILER V7.50 SCALER 03/18/2008 22:04:56 PAGE 8
425 2 dclk = PanelMaxPClk;
426 2 }
427 1 /*****************************************************************************/
428 1 dclk = dclk / 1000 - 1;
429 1 dclk = (dclk + 2) * 1000;
430 1 // calculate new dst vtotal
431 1 dstVtotal = ((((unsigned long)VTotal * DispActiveHeight) << 4) / V_ActiveTab[r] + 8) >> 4; //add .5 for r
-ounding, make even
432 1 if(dstVtotal < PanelMinVTotal){
433 2 dstVtotal = PanelMinVTotal;
434 2 DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
435 2 dclk = ((unsigned long)DV_HFreq * PanelMinHTotal) / 10; //KHz
436 2 dclk = dclk / 1000 - 1;
437 2 dclk = (dclk + 2) * 1000;
438 2 }
439 1 else{
440 2 // HFreq
441 2 DV_HFreq = (unsigned short)((unsigned long)dstVtotal * V_SYNC / 1000);
442 2 }
443 1 // Htotal
444 1 dstHtotal = PanelMaxHTotal;
445 1 for(i=PanelMinHTotal; i<PanelMaxHTotal; i=i+2){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -