亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nf.c

?? 該原碼為在ateml的單片機上實現的mp3播放器.里面有電路圖和完整的源程序.
?? C
?? 第 1 頁 / 共 5 頁
字號:
      if ((byte_6 == 0xE8) && ((gl_address & 0x1F) == 0))
      {
        lut_index[i]--;
        gl_address = gl_address - NB_PAGE_BY_LUT;
      }
      else
      {
        lut_index[i]-=2;
        gl_address = gl_address - (NB_PAGE_BY_LUT << 1);
      }

      Nf_read_open_C_area_even(gl_address, 0x00);
      if (Nf_rd_byte_even() != 0xFF)                              /* LUT have been modified */
      {
        nf_block_erase(gl_address);
        lut_is_present[i] = FALSE;   
        lut_index[i] = 0;
        Nf_wait_busy_even();
      }
    }
  }
  
  
  /*****************************************************************/
  /*          Find free physical block for LUT for each zone       */
  /*****************************************************************/
  for (i = 0; i < NF_ZONE_MAX_CPT; i++)
  {
    if (lut_is_present[i] == FALSE)
    {
      block = last_physical_used_block_even[i];
      start = (Uint16)(i);                                    /* starting value for each zone */
      j = 0;                                                  /* reset turn around counter    */
      if (block == start)                                     /* starting block for scan      */
      {
        block = start + ((NF_ZONE_MAX_CPT << 10) - NF_ZONE_MAX_CPT);
      }
      block_valid = FALSE;                                    /* init flag block valid */
      do
      {
        gl_address = (Uint32)(block) << 5;
        Nf_read_open_C_area_even(gl_address, 0x05);
        byte_5 = Nf_rd_byte_even();
        byte_6 = Nf_rd_byte_even();
    
        if ( (byte_5 == 0xFF) && (byte_6 == 0xFF) )           /* not assigned and valid block */
        {
          block_valid = TRUE;                                 /* find a correct block         */
        }
        else                                                  /* else decrease block number   */
        {
          if (block == start)                       
          {
            block = start + ((NF_ZONE_MAX_CPT << 10) - NF_ZONE_MAX_CPT);
          }
          else
          {
            block-=NF_ZONE_MAX_CPT;
          }
        }
        j++;
      }
      while (( !block_valid  ) && (j < 1024));
      if (j == 1024)
        return KO;
      lut_block[i] = block;                                   /* Update look up table address */
    }
  }
      
    
    /**********************************************************/
    /* Create the look-up table                               */
    /* Process is done zone per zone and by step of 256 blocks*/
    /* ********************************************************/
    for (nf_zone = 0; nf_zone < NF_ZONE_MAX_CPT; nf_zone++)           /* for each zone */
    {
      if (lut_is_present[nf_zone] == FALSE)
      {
        start = 0x00;
        end   = 0x40;                                             /* 256 bytes for gl_buffer <-> 64 blocks */

        free_bloc_pos_even  = (Uint16)(last_physical_used_block_even[nf_zone]);
        free_bloc_pos_odd   = (Uint16)(last_physical_used_block_odd[nf_zone]);
        gl_address          = (Uint32)(lut_block[nf_zone]) << 5; 
        lut_part            = 0;
        do
        {
          Nf_CS_EVEN();                                         /* even Part                  */
          nf_init_buffer();                                     /* reinitialize the buffer    */
          temp_address = (Uint32)(nf_zone) << 5;                /* at the beginning           */
          block        = (Uint16)(nf_zone);
          Nf_wait_busy_even();

          for (j = NF_BLOCK_PER_ZONE; j != 0 ; j--)             /* for each block             */
          { 
            Nf_read_open_C_area_even(temp_address, 0x05);
            if (Nf_rd_byte_even() == 0xFF)                      /* If not a bad block         */
            {
              block2.b[0] = Nf_rd_byte_even();                  /* Read logical block address */
              block2.b[1] = Nf_rd_byte_even();
              if ( (block2.b[0] & 0xF8) == 0x10)
              {
                block2.w = (block2.w & 0x0FFF) >> 1;          
                if ( (block2.w < end) && (block2.w >= start)) 
                { 
                  gl_buffer[(Byte)(4 * block2.b[1])] = block >> 8;        /* Save logical block value */
                  gl_buffer[(Byte)(4 * block2.b[1] + 1)] = block & 0xFF;  /* in the buffer            */
                }
              }
            }
            temp_address += (NF_ZONE_MAX_CPT << 5); 
            block+=NF_ZONE_MAX_CPT;
          }
            
          /* affect to the free physical block a fictive logical block */
          /* free physical block => gl_buffer[x] = 0xFF */
          temp_address = (Uint32)(free_bloc_pos_even) << 5;
          for (j = 0; j <= 0xFC; j += 4)
          {
            if (gl_buffer[j] == 0xFF)
            {
              do                                                    /* Search free physical block */
              {
                temp_address += (NF_ZONE_MAX_CPT << 5);
                if (temp_address >= ((Uint32)(NF_ZONE_MAX_CPT) << 15) )
                    temp_address = (Uint32)(nf_zone) << 5;
                Nf_read_open_C_area_even(temp_address, 0x05);
                byte_5 = Nf_rd_byte_even();                          /* Invalid/Valid block */
                byte_6 = Nf_rd_byte_even();                          /* Used/Unused block   */
              }
              while ( ( (byte_6 != 0xFF) && (byte_6 != 0xE8) ) || (byte_5 != 0xFF) );
              free_bloc_pos_even = temp_address >> 5;
              gl_buffer[j] = (free_bloc_pos_even >> 8) | 0x80;
              gl_buffer[j + 1] = free_bloc_pos_even;
            }
          }

          Nf_CS_ODD();                                            /* Odd Part */  
          temp_address  = (Uint32)(nf_zone) << 5;                 /* We start at the beginning  */
          block         = (Uint16)(nf_zone);
          Nf_wait_busy_odd();
          for (j = NF_BLOCK_PER_ZONE; j != 0 ; j--)               /* for each block             */
          { 
            Nf_read_open_C_area_odd(temp_address, 0x05);
            if (Nf_rd_byte_odd() == 0xFF)                         /* If not a bad block         */
            {
              block2.b[0] = Nf_rd_byte_odd();                     /* Read logical block address */
              block2.b[1] = Nf_rd_byte_odd();
              if ( (block2.b[0] & 0xF8) == 0x10)
              {
                
                block2.w = (block2.w & 0x0FFF) >> 1;          
                if ( (block2.w < end) && (block2.w >= start)) 
                { /* Save logical block value in the buffer */
                  gl_buffer[(Byte)(4 * block2.b[1] + 2)] = block >> 8;
                  gl_buffer[(Byte)(4 * block2.b[1] + 1 + 2)] = block;
          
                }
              }
            }
            temp_address += (NF_ZONE_MAX_CPT << 5); 
            block+= NF_ZONE_MAX_CPT;
          }
          
          /* affect to the free physical block a fictive logical block */
          /* free physical block => gl_buffer[x] = 0xFF */
          temp_address = (Uint32)(free_bloc_pos_odd) << 5;
          for (j = 2; j <= 0xFE; j+=4)
          {
            if (gl_buffer[j] == 0xFF)
            {
              do                                                /* Search free physical block */
              {
                temp_address += (NF_ZONE_MAX_CPT << 5);
                if (temp_address >= ((Uint32)(NF_ZONE_MAX_CPT) << 15) )
                    temp_address = (Uint32)(nf_zone) << 15;
                Nf_read_open_C_area_odd(temp_address, 0x05);
                byte_5 = Nf_rd_byte_odd();                          /* Invalid/Valid block */
                byte_6 = Nf_rd_byte_odd();                          /* Used/Unused block */
              }
              while ( ( (byte_6 != 0xFF) && (byte_6 != 0xE8) ) || (byte_5 != 0xFF) );
    
              free_bloc_pos_odd = temp_address >> 5;
              gl_buffer[j] = (free_bloc_pos_odd >> 8) | 0x80;
              gl_buffer[j + 1] = free_bloc_pos_odd;
            }
          }
            
          Nf_CS_EVEN();
          Nf_wait_busy_even();  
          if (lut_part == 0)
          {
            Nf_write_open_A_area_even(gl_address, 0x00);    /* First part of LUT */
            nf_download_buffer();
          }
          else
          {
            Nf_write_open_B_area_even(gl_address, 0x00);
            nf_download_buffer();
            /* Write redundant data */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xE8); Nf_wr_byte_even(0xFF);                         /* Logical block value */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);  /* ECC area 2 */
            Nf_wr_byte_even(0xE8); Nf_wr_byte_even(0xFF);                         /* Logical block value */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);  /* ECC area 1 */
            /* Increase the address of the conversion table */
            gl_address++;
          }
          lut_part = ~lut_part;

          Nf_send_command_even(NF_PAGE_PROGRAM_CMD);
          start    += 0x40;                                 /* process next 64 logical block   */
          end      += 0x40;
          nf_init_buffer();                                 /* reinitialize the global buffer   */
        }
        while (start < NF_BLOCK_PER_ZONE);
      }
  }
  Nf_wait_busy_even();
  return OK;
}


/*F**************************************************************************
* NAME: nf_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   OK : init complete
*   KO : - NF not supported or not recognise
*----------------------------------------------------------------------------
* PURPOSE:
*   NF initialisation
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit nf_init (void)
{   
Byte manufacturer;

  P2 = NF_IDLE_STATE_ADD;
  Nf_CS_EVEN();
  Nf_wait_busy_even();
  Nf_send_command_even(NF_RESET_CMD);
  Nf_CS_ODD();
  Nf_wait_busy_odd();
  Nf_send_command_odd(NF_RESET_CMD);
  Nf_wait_busy_odd();

  #if (NF_CAPACITY_AUTO_DETECT == TRUE)

    Nf_send_command_even(NF_READ_ID_CMD);
    Nf_send_address_even(0x00);
    manufacturer = Nf_rd_byte_even();
    nf_copy_back = FALSE;
    switch (Nf_rd_byte_even())
    {
      /******************************************************************************/
      case 0x73 :                                 /*--------- 2 * 16 Mbyte ---------*/
        nf_device_type = NF_SIZE_32MB;
        nf_zone_max = 1;                          /* 1 zone / slot : 1024 blocks    */
        nf_mem_size =  NF_SECTOR_SIZE_32MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 0;                       /* 3 address cycles           */
      break;
      /******************************************************************************/
      case 0x75 :                                 /*--------- 2 * 32 Mbyte ---------*/
        nf_device_type = NF_SIZE_64MB;
        nf_zone_max = 2;                          /* 2 zones / slot : 2048 blocks   */
        nf_mem_size =  NF_SECTOR_SIZE_64MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 0;                   /* 3 address cycles               */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }
      break;
      /******************************************************************************/
      case 0x76 :                                  /*--------- 2 * 64 Mbyte --------*/
        nf_device_type = NF_SIZE_128MB;
        nf_zone_max = 4;                           /* 4 zones / slot : 4096 blocks  */
        nf_mem_size =  NF_SECTOR_SIZE_128MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 1;                    /* 4 address cycles              */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }
        break;
      /******************************************************************************/
      case 0x79 :                                  /*-------- 2 * 128 Mbyte --------*/
        nf_device_type = NF_SIZE_256MB;
        nf_zone_max = 8;                           /* 8 zones / slot : 8192 blocks  */
        nf_mem_size =  NF_SECTOR_SIZE_256MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 1;                    /* 4 address cycles              */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }        
        break;
      /******************************************************************************/
      default:                                     /* Nand Flash not recognise or   */
        return KO;                                 /* bad response                  */
      /******************************************************************************/
    }
  #else
    nf_mem_size = NF_DISK_SIZE - MEM_RESERVED_SIZE;
  #endif

  nf_reserved_space_start = nf_mem_size + 1;

  return OK;


}

/*F**************************************************************************
* NAME: nf_read_open

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲福利电影网| 91在线观看美女| av动漫一区二区| 欧美一区二区三级| 亚洲丝袜精品丝袜在线| 极品少妇一区二区| 欧美午夜免费电影| 自拍偷拍亚洲欧美日韩| 蜜桃视频免费观看一区| 色激情天天射综合网| 中文乱码免费一区二区| 麻豆久久久久久| 欧美日韩国产中文| 亚洲蜜桃精久久久久久久| 国产美女精品一区二区三区| 精品视频1区2区3区| 亚洲欧美视频在线观看视频| 国产成人av影院| 2021久久国产精品不只是精品| 日韩制服丝袜先锋影音| 欧美专区在线观看一区| 国产精品久久久一本精品| 国产麻豆成人传媒免费观看| 欧美va亚洲va在线观看蝴蝶网| 亚洲综合一区在线| 日本丶国产丶欧美色综合| 亚洲日本va在线观看| 成人的网站免费观看| 国产精品理论片在线观看| 国产精品自拍三区| 久久久久久久久久久久久女国产乱| 日本午夜一区二区| 日韩精品一区二区三区视频| 日本美女一区二区三区| 日韩一区二区三区在线观看| 日本va欧美va瓶| 日韩一级黄色片| 国精产品一区一区三区mba视频| 欧美电视剧在线看免费| 国产麻豆精品在线| 欧美激情综合五月色丁香小说| 国产大陆精品国产| 亚洲色图欧美在线| 精品视频一区二区不卡| 麻豆视频一区二区| 久久久久久99久久久精品网站| 国产aⅴ综合色| 成人免费在线播放视频| 色综合久久精品| 亚洲成a人v欧美综合天堂| 日韩欧美一级在线播放| 国产福利一区在线| 亚洲毛片av在线| 4438x亚洲最大成人网| 国产一区二区在线观看免费| 国产女主播视频一区二区| 99精品桃花视频在线观看| 亚洲精品成a人| 日韩一级精品视频在线观看| 福利一区二区在线观看| 亚洲高清三级视频| 精品成人在线观看| 91女人视频在线观看| 日本在线不卡视频| 国产精品久久久久毛片软件| 欧美亚洲一区二区在线观看| 久久99精品国产| 亚洲三级免费电影| 日韩欧美国产高清| 91色婷婷久久久久合中文| 日本三级亚洲精品| 亚洲欧美日韩久久| 欧美一卡在线观看| 99久久精品国产毛片| 日本亚洲最大的色成网站www| 国产精品女同一区二区三区| 5月丁香婷婷综合| 99视频在线精品| 裸体一区二区三区| 亚洲精品国产a| 久久久久久免费| 69精品人人人人| 在线观看日韩电影| 成人性生交大片免费看在线播放| 日韩电影在线免费| 一区二区三区免费在线观看| 久久久国产精品麻豆| 欧美一区2区视频在线观看| 91福利视频网站| 成人午夜视频网站| 国产一区二区日韩精品| 蜜桃免费网站一区二区三区| 亚洲一区二区欧美| 亚洲视频一区在线| 国产视频亚洲色图| 日韩亚洲欧美在线| 欧美男同性恋视频网站| 欧美视频在线一区二区三区| 成人国产精品免费| 岛国精品在线观看| 国产伦理精品不卡| 国产在线精品一区二区夜色| 五月激情综合网| 午夜精品久久久久影视| 亚洲午夜在线观看视频在线| 亚洲三级小视频| 亚洲精品中文在线影院| 自拍偷拍亚洲欧美日韩| 成人免费在线播放视频| 国产精品国产三级国产a| 国产日韩欧美a| 国产精品欧美久久久久一区二区| 国产喂奶挤奶一区二区三区| 久久久久久久久久久电影| 精品福利视频一区二区三区| 久久嫩草精品久久久久| 国产香蕉久久精品综合网| 久久久久九九视频| 国产精品久久久久久久久搜平片| 国产精品乱码一区二区三区软件| 中文字幕精品一区二区三区精品| 国产日产精品1区| 国产精品视频观看| |精品福利一区二区三区| 中文字幕一区二区三区视频| 伊人婷婷欧美激情| 视频一区免费在线观看| 蜜臀av一区二区在线免费观看| 美脚の诱脚舐め脚责91| 国产一区二区三区免费在线观看| 国产成人精品影视| 色视频欧美一区二区三区| 欧美在线free| 日韩欧美国产精品一区| 欧美经典三级视频一区二区三区| 亚洲素人一区二区| 日本v片在线高清不卡在线观看| 激情文学综合丁香| eeuss鲁一区二区三区| 91福利在线看| 2014亚洲片线观看视频免费| wwwwxxxxx欧美| 亚洲乱码国产乱码精品精98午夜| 亚洲福利电影网| 国产激情精品久久久第一区二区| 91免费视频观看| 3d动漫精品啪啪1区2区免费| 国产欧美精品一区aⅴ影院| 亚洲激情综合网| 国产精品中文字幕一区二区三区| 99国产精品久| 日韩三级伦理片妻子的秘密按摩| 欧美国产禁国产网站cc| 亚洲va欧美va天堂v国产综合| 国产呦萝稀缺另类资源| 91麻豆视频网站| 日韩精品在线一区| 一区二区三区av电影| 国产一区二区三区| 欧美日韩一区国产| 国产欧美精品一区二区色综合朱莉| 亚洲电影视频在线| 成人性色生活片免费看爆迷你毛片| 欧美色精品在线视频| 中文欧美字幕免费| 久久国产精品区| 欧美四级电影在线观看| 中文天堂在线一区| 国内偷窥港台综合视频在线播放| 欧美视频在线不卡| 亚洲一区在线观看网站| 国产精品一区二区在线播放| 成人免费福利片| 日韩免费成人网| 亚洲成人手机在线| 色婷婷国产精品综合在线观看| 久久久久国产一区二区三区四区| 日本三级亚洲精品| 欧美午夜精品久久久久久超碰| 国产精品久久久久aaaa樱花 | 亚洲视频一区在线| 极品少妇xxxx偷拍精品少妇| 欧美日韩精品一区二区天天拍小说| 国产精品乱码一区二三区小蝌蚪| 国产高清不卡二三区| 久久伊人中文字幕| 久久se这里有精品| 91精品国产91久久综合桃花 | 精品一区二区在线视频| 欧美三片在线视频观看| 一区二区三区自拍| 91在线小视频| 亚洲日本在线a| 日本高清不卡aⅴ免费网站| 亚洲欧美综合色| 91首页免费视频| 一二三区精品视频| 欧美日韩另类国产亚洲欧美一级| 亚洲视频电影在线| 99国产精品国产精品久久|