📄 md.lst
字号:
267 1 for(i=0;i<4;i++)
268 1 {
269 2 md_eprom_read(i);
270 2 md_reg_set_area(i);
271 2 }
272 1 }
273
274 /*/////////////////////////////////////////////////////////
275 BOOL md_reset(void)
276
277 * reset md
278 * remark
279 all md configuration set to 0
280 /////////////////////////////////////////////////////////*/
281 void md_reset(void)
282 {
283 1 xdata BYTE ch;
284 1 for(ch=0;ch<4;ch++)
285 1 {
286 2 mdgv_md_sensitivity_levels[ch] = 0;
287 2 mdgv_md_areas[ch][0][0] = 9;
288 2 mdgv_md_areas[ch][0][1] = 5;
289 2 mdgv_md_areas[ch][0][2] = 18;
290 2 mdgv_md_areas[ch][0][3] = 9;
291 2 mdgv_md_areas[ch][1][0] = 27;
292 2 mdgv_md_areas[ch][1][1] = 10;
293 2 mdgv_md_areas[ch][1][2] = 36;
294 2 mdgv_md_areas[ch][1][3] = 14;
295 2 md_eprom_write(ch);
296 2 md_reg_set_area(ch);
297 2 }
298 1 }
299
300 BOOL md_is_enabled(void)
301 {
302 1 return mdgv_md_enabled;
303 1 }
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 6
304
305 /*/////////////////////////////////////////////////////////
306 void md_enable(BOOL enable)
307
308 * enable/disable md
309 enable : BOOL, 1: enable md, 0: disable md
310 * remark
311 global variable mdgv_md_sensitivity_levels[ch] should
312 be set properly before calling this function
313 /////////////////////////////////////////////////////////*/
314 void md_enable(BOOL enable)
315 {
316 1 #ifdef DEBUG_MD_DETECT
printf("\n\rmd_enable: %s", (enable)?"TRUE":"----");
#endif
319 1 #ifdef TW2804
tw2804_md_enable(enable);
#endif
322 1 #ifdef G1PMD
323 1 g1p_md_enable(enable);
324 1 #endif
325 1 }
326
327 /*/////////////////////////////////////////////////////////
328 BOOL md_is_detected(u8 cmd)
329
330 * check see if MD is detected or not
331 * return value
332 TRUE: there's detected channel
333 FALSE: no MD detected
334 * remark
335 after calling this function, the global variable
336 mdgv_channel_detected will be set
337 /////////////////////////////////////////////////////////*/
338 BOOL md_is_detected(u8 cmd)
339 {
340 1 BOOL ret;
341 1 #ifdef TW2804
cmd++;
ret = tw2804_md_is_detected();
#endif
345 1
346 1 #ifdef G1PMD
347 1 ret = g1p_md_is_detected(cmd);
348 1 #endif
349 1 return ret;
350 1 }
351
352
353
354
355
356
357 //=============================================================================
358 //
359 //=============================================================================
360 //
361 //=============================================================================
362
363
364
365
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 7
366
367
368 #ifdef G1PMD
369
370
371 //=============================================================================
372 // * retrieve the number of blocks detected
373 //=============================================================================
374 WORD g1p_md_get_block_count(u8 *ch_num)
375 {
376 1 xdata BYTE temp;
377 1 xdata WORD detected_blk_cnt;
378 1
379 1 // block count of the detected
380 1 detected_blk_cnt = g1pMDreg_read(MD_BCL);
381 1 temp = g1pMDreg_read(MD_BCH);
382 1 detected_blk_cnt |= ((WORD)(temp&0x03))<<8;
383 1
384 1 // channel id of detect block (bit4 and bit5)
385 1 *ch_num = (temp&0x30)>>4;
386 1
387 1 return detected_blk_cnt;
388 1
389 1 }
390
391 //=============================================================================
392 // * retrieve the maximum differences
393 // maximum difference for mean
394 // maximum difference for mean variant
395 //=============================================================================
396 u8 g1p_md_get_max_difference(void)
397 {
398 1 xdata u8 tmp;
399 1 tmp = g1pMDreg_read(MD_DMAXH); // maximum difference for mean variant
400 1 tmp = g1pMDreg_read(MD_DMAXL); // maximum difference for mean
401 1 return tmp;
402 1 }
403
404
405
406
407 //////////////////////////////////////////////////////////////////////////////////////////////////
408 //////////////////////////////////////////////////////////////////////////////////////////////////
409 //////////////////////////////////////////////////////////////////////////////////////////////////
410 void g1p_md_reg_set_area(BYTE ch)
411 {
412 1 BYTE bk, pos;
413 1 BYTE areas[2][4];
414 1 BYTE reg_base;
415 1
416 1 #ifdef DEBUG_G1PMD_AREA
printf("\n\rCH[%d]", (int)ch);
#endif
419 1 // convert 2 block position information (x,y) into 16 x 32 font based position information
420 1 for(bk=0;bk<2;bk++) // for two block
421 1 {
422 2 #ifdef DEBUG_G1PMD_AREA
printf("blk%d ", (int)bk);
#endif
425 2 for(pos=0;pos<4;pos++)
426 2 {
427 3 areas[bk][pos] = mdgv_md_areas[ch][bk][pos]; // X position
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 8
428 3 #ifdef DEBUG_G1PMD_AREA
printf("(%2d,", (int)areas[bk][pos]);
#endif
431 3 pos++;
432 3 areas[bk][pos] = g1p_conv_16x24_to_16x32(mdgv_md_areas[ch][bk][pos]); // Y position
433 3 #ifdef DEBUG_G1PMD_AREA
printf("%2d) ", (int)areas[bk][pos]);
#endif
436 3 }
437 2 }
438 1
439 1 // set the changed position information into G1P MD part
440 1 reg_base = ch*0x10;
441 1 // write first MD block of G1P
442 1 g1pMDreg_write(reg_base+0x00, areas[0][1]); // Y1
443 1 g1pMDreg_write(reg_base+0x01, areas[0][0]); // X1
444 1 g1pMDreg_write(reg_base+0x02, areas[0][3]); // Y2
445 1 g1pMDreg_write(reg_base+0x03, areas[0][2]); // X2
446 1 // write second MD block of G1P
447 1 g1pMDreg_write(reg_base+0x04, areas[1][1]); // Y3
448 1 g1pMDreg_write(reg_base+0x05, areas[1][0]); // X3
449 1 g1pMDreg_write(reg_base+0x06, areas[1][3]); // Y4
450 1 g1pMDreg_write(reg_base+0x07, areas[1][2]); // X4
451 1
452 1 }
453
454 ///////////////////////////////////////////////////////////
455 // NTSC system (720x480)
456 // 16x24 font based: x(0~44) y(0~19)
457 // 16x32 font based: x(0~44) y(0~14)
458 //
459 // PAL system (720x576)
460 // 16x24 font based: x(0~44) y(0~23)
461 // 16x32 font based: x(0~44) y(0~17)
462 //
463 ///////////////////////////////////////////////////////////
464 u8 g1p_conv_16x24_to_16x32(u8 y)
465 {
466 1 u8 r,m;
467 1 u8 pix_y;
468 1 u8 bottom_line;
469 1
470 1 bottom_line = gv_NTSC_PAL ? 17:14;
471 1
472 1 // the result pix_y will be close to 16 x 32 font based position
473 1 r = y % 4;
474 1 if(r==2) r = 1;
475 1 else if(r==3) r = 2;
476 1 else ;
477 1 m = y / 4;
478 1 pix_y = m * 3 + r;
479 1
480 1 if(pix_y > bottom_line)
481 1 pix_y = bottom_line;
482 1 return (u8)pix_y;
483 1 }
484
485 ///////////////////////////////////////////////////////////////////////////////////
486 ////////////////////////////////////////////////////////////////////////////////////
487 ////////////////////////////////////////////////////////////////////////////////////
488 void g1p_md_enable(BOOL enable)
489 {
C51 COMPILER V7.50 MD 12/14/2005 10:05:34 PAGE 9
490 1 xdata BYTE i;
491 1 xdata BYTE mn; // mean
492 1 xdata BYTE mv; // mean variant
493 1
494 1 mdgv_md_active_ch_stat = 0;
495 1 for(i=0;i<4;i++)
496 1 {
497 2 mn = mv = 0; // default value
498 2 if(enable)
499 2 {
500 3 // if now enabling and the channel is enabled
501 3 mn = (mdgvp_md_sensitivity_level_set[mdgv_md_sensitivity_levels[i]]&0xF0)>>4;
502 3 mv = mdgvp_md_sensitivity_level_set[mdgv_md_sensitivity_levels[i]]&0x0F;
503 3
504 3 // set activation status for each channel
505 3 // if both mn and mv are zero -> the channel is disabled
506 3 if(mn+mv)
507 3 mdgv_md_active_ch_stat |= (0x01)<<i;
508 3 }
509 2 // write registers
510 2 g1pMDreg_write(i*0x10+0x08, mn);
511 2 g1pMDreg_write(i*0x10+0x09, mv);
512 2 }
513 1 mdgv_md_enabled = (mdgv_md_active_ch_stat==0)?0:1;
514 1 }
515
516 //////////////////////////////////////////////////////////////////////////////
517 //////////////////////////////////////////////////////////////////////////////
518 //////////////////////////////////////////////////////////////////////////////
519 BOOL g1p_md_is_detected(u8 cmd)
520 {
521 1 static xdata u8 is_FirstMdDetected[4] = {1,1,1,1};
522 1 static xdata u16 s_blk_cnt[4] = {0,0,0,0};
523 1 static xdata u8 s_diff[4] = {0,0,0,0};
524 1
525 1 xdata u8 i;
526 1 xdata BYTE detected_ch_num; // 0,1,2,3
527 1 xdata WORD blk_cnt;
528 1 xdata BYTE max_diff;
529 1
530 1 if(cmd==MD_CLEAR_OLD_REG_V)
531 1 {
532 2 for(i=0;i<4;i++)
533 2 {
534 3 is_FirstMdDetected[i] = 1;
535 3 s_blk_cnt[i] = 0;
536 3 s_diff[i] = 0;
537 3 }
538 2 }
539 1
540 1 mdgv_channel_detected = 0;
541 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -