⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md.lst

📁 dvr
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -