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

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

?? nf_drv.c

?? 單片機學習資料主要講述MP3開發 適合初學者進行開發學習
?? C
?? 第 1 頁 / 共 3 頁
字號:
    else
    {
      Nf_CS_ODD();          
      Nf_wait_busy_odd();
      Nf_write_open_C_area_odd(nf_current_physical_sector_addr_odd,0x00);   /* open spare data area */
      nf_update_spare_data();                                               /* update spare data    */
      Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);                            /* send program command */ 
      ((Byte*)&nf_current_physical_sector_addr_odd)[3]++;
    }
    state = ~state;
  } 
}



/*F**************************************************************************
* NAME:     nf_copy_block_head
*----------------------------------------------------------------------------
* PARAMS:   block : physical block number
*           nb_sector : number of sector to be copied
*
* RETURN:
*
*----------------------------------------------------------------------------
* PURPOSE:  This function copy the first part of a block that is not modified
*           during a write operation
*
*****************************************************************************
* NOTE: Uint32 address is global     
*       This function uses the Samsung NF specific command: Copy-Back Program    
*
*****************************************************************************/
void nf_copy_block_head(void)
{
Byte j;
bit state = 0;
Uint32 address2;

  /* address of the source physical block */
  gl_address = (Uint32)(nf_block_to_be_deleted_even) << 5;
  address2 = (Uint32)(nf_block_to_be_deleted_odd) << 5;

  for (j = (((Byte*)&gl_ptr_mem)[3] & 0x3F); j != 0; j--)
  { 
    if (!state)
    {
      Nf_CS_EVEN();
      Nf_wait_busy_even();
      if (NF_COPY_BACK_BIT)
      {
        Nf_send_command_even(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_even(gl_address, 0x00);
        Nf_wait_busy_even();
        Nf_send_command_even (NF_COPY_BACK_TO_PAGE);
        Nf_send_cl_address_even(nf_current_physical_sector_addr_even, 0x00);
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
      }
      else
      {
        Nf_send_command_even(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_even(gl_address, 0x00);
        Nf_wait_busy_even();
        nf_upload_buffer();
        Nf_write_open_A_area_even(nf_current_physical_sector_addr_even, 0x00);
        nf_download_buffer();
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
        Nf_wait_busy_even();
        Nf_send_command_even(NF_READ_B_AREA_CMD);
        Nf_send_cl_address_even(gl_address, 0x00);
        Nf_wait_busy_even();
        nf_upload_buffer();
        Nf_write_open_B_area_even(nf_current_physical_sector_addr_even, 0x00);
        nf_download_buffer();
        nf_update_spare_data();
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
      }

      /* increase counter */
      ((Byte*)&nf_current_physical_sector_addr_even)[3]++;
      ((Byte*)&gl_address)[3]++;

    }
    else
    {
      Nf_CS_ODD();
      Nf_wait_busy_odd();
  
      if (NF_COPY_BACK_BIT)
      {
        Nf_send_command_odd(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_odd(address2, 0x00);
        Nf_wait_busy_odd();
        Nf_send_command_odd (NF_COPY_BACK_TO_PAGE);
        Nf_send_cl_address_odd(nf_current_physical_sector_addr_odd, 0x00);
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
      }
      else
      {
        Nf_send_command_odd(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_odd(address2, 0x00);
        Nf_wait_busy_odd();
        nf_upload_buffer();
        Nf_write_open_A_area_odd(nf_current_physical_sector_addr_odd, 0x00);
        nf_download_buffer();
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
        
        Nf_wait_busy_odd();
        Nf_send_command_odd(NF_READ_B_AREA_CMD);
        Nf_send_cl_address_odd(address2, 0x00);
        Nf_wait_busy_odd();
        nf_upload_buffer();
        Nf_write_open_B_area_odd(nf_current_physical_sector_addr_odd, 0x00);
        nf_download_buffer();
        nf_update_spare_data();
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
      }
      ((Byte*)&nf_current_physical_sector_addr_odd)[3]++;
      ((Byte*)&address2)[3]++;
    }
    state = ~state;
  }       /* end for */
}


/*F**************************************************************************
* NAME:     nf_copy_block_tail
*----------------------------------------------------------------------------
* PARAMS:   block : physical block number
*
* RETURN:
*
*----------------------------------------------------------------------------
* PURPOSE:  This function copy the last part of a block that is not modified
*           during a write operation
*
*****************************************************************************
* NOTE:     Uint32 address is global
*
*****************************************************************************/
void nf_copy_block_tail(void)
{
Byte j;
bit state;
Uint32 address2;

  /* Address of the source block */
  gl_address = ((Uint32)(nf_block_to_be_deleted_even) << 5) +  ((gl_ptr_mem & 0x3F) >> 1) + (gl_ptr_mem & 0x01);
  address2 = ((Uint32)(nf_block_to_be_deleted_odd) << 5) +  ((gl_ptr_mem & 0x3F) >> 1);

  state = ((Byte*)&gl_ptr_mem)[3] & 0x01;

  for (j = (((Byte*)&gl_ptr_mem)[3] & 0x3F); j < 64; j++)
  { 
    if (!state)
    {
      Nf_CS_EVEN();
      Nf_wait_busy_even();
      if (NF_COPY_BACK_BIT)
      {
        Nf_send_command_even(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_even(gl_address, 0x00);
        Nf_wait_busy_even();
        
        Nf_send_command_even (NF_COPY_BACK_TO_PAGE);
        Nf_send_cl_address_even(nf_current_physical_sector_addr_even, 0x00);
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
      }
      else
      {
        Nf_read_open_A_area_even(gl_address, 0x00);
        nf_upload_buffer();
        Nf_write_open_A_area_even(nf_current_physical_sector_addr_even, 0x00);
        nf_download_buffer();
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
        Nf_wait_busy_even();
        Nf_send_command_even(NF_READ_B_AREA_CMD);
        Nf_wait_busy_even();
        Nf_read_open_B_area_even(gl_address, 0x00);
        nf_upload_buffer();
        Nf_write_open_B_area_even(nf_current_physical_sector_addr_even, 0x00);
        nf_download_buffer();
        nf_update_spare_data();
        Nf_send_command_even (NF_PAGE_PROGRAM_CMD);
      }

      /* increase counter */
      ((Byte*)&nf_current_physical_sector_addr_even)[3]++;
      ((Byte*)&gl_address)[3]++;
      state = 1;
    }
    else
    {
      Nf_CS_ODD();
      Nf_wait_busy_odd();
      
      if (NF_COPY_BACK_BIT)
      {
        Nf_send_command_odd(NF_READ_A_AREA_CMD);
        Nf_send_cl_address_odd(address2, 0x00);
        Nf_wait_busy_odd();
        Nf_send_command_odd (NF_COPY_BACK_TO_PAGE);
        Nf_send_cl_address_odd(nf_current_physical_sector_addr_odd, 0x00);
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
      }
      else
      {
        Nf_read_open_A_area_odd(address2, 0x00);
        nf_upload_buffer();
        Nf_write_open_A_area_odd(nf_current_physical_sector_addr_odd, 0x00);
        nf_download_buffer();
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
        Nf_wait_busy_odd();
        Nf_read_open_B_area_odd(address2, 0x00);
        nf_upload_buffer();
        Nf_write_open_B_area_odd(nf_current_physical_sector_addr_odd, 0x00);
        nf_download_buffer();
        nf_update_spare_data();
        Nf_send_command_odd (NF_PAGE_PROGRAM_CMD);
      }
      ((Byte*)&nf_current_physical_sector_addr_odd)[3]++;
      ((Byte*)&address2)[3]++;
        
      state = 0;
    }
  }
}


/*F**************************************************************************
* NAME:     nf_reassign_block
*----------------------------------------------------------------------------
* PARAMS:   block : reassign the physical block
*
* RETURN:
*
*----------------------------------------------------------------------------
* PURPOSE:  This function reassign the block value in LUT (copy of LUT)
*           
*
*****************************************************************************
* NOTE:     
*           
*
*****************************************************************************/
void nf_reassign_block(void)
{
Byte    dummy;
Byte    j;
Uint16  k;
xdata Uint16  start;
xdata Uint16  block_start;                     
xdata Uint32  address2;                           /* LUT Source address */

  if (lut_index[nf_zone] >= 3)                    /* the LUT can be copied 4 times in a block */
  {
    if ((buf_free[nf_gl_buf_free_idx].even & 0x7FFF) == nf_look_up_table_block)
    {
      nf_gl_buf_free_idx++;
      if (nf_gl_buf_free_idx >= nf_spare_block)
      {
        nf_gl_buf_free_idx = 0;
      }      
    }

    /* Source address */
    address2 = ((Uint32)(nf_look_up_table_block)<<5) + 24;               /* 24 = index of last copied LUT */

    nf_look_up_table_block =  buf_free[nf_gl_buf_free_idx].even & 0x7FFF;
    
    nf_gl_buf_free_idx++;
    if (nf_gl_buf_free_idx >= nf_spare_block)
    {
      nf_gl_buf_free_idx = 0;
    }      

    /* Target address : recopy the last 4Kb */
    gl_address = ((Uint32)(nf_look_up_table_block) << 5);

    lut_index[nf_zone] = 0;
  }
  else
  {
    /* Source address */
    address2 = ((Uint32)(nf_look_up_table_block)<<5) + ((Uint32)(lut_index[nf_zone])<<3);

    lut_index[nf_zone]++;

    /* Target address */
    gl_address = address2 + 8; /* 8 pages = size of a copy of the lut */
  }

  j = 0;
  k = 0;
  start = 0;
  block_start = nf_block_min;

  Nf_CS_EVEN();

  do
  {
    /* upload the buffer */
    Nf_wait_busy_even();
    Nf_read_open_A_area_even(address2, 0x00);
    nf_upload_buffer();
    /* update the buffer */    
    while ((k <= nf_gl_buf_idx_max) && (start <= block_start) && ((start + 64) > block_start))
    {
      j = 4 * (block_start & 0x3F);
      gl_buffer[j   ] = buf[k].even.b[0];
      gl_buffer[j+ 1] = buf[k].even.b[1];
      gl_buffer[j+ 2] = buf[k].odd.b[0];
      gl_buffer[j+ 3] = buf[k].odd.b[1];
      k++;
      block_start++;
    }
    Nf_write_open_A_area_even(gl_address, 0x00);
    nf_download_buffer();
    Nf_send_command_even(NF_PAGE_PROGRAM_CMD);

    start += 64;
    Nf_wait_busy_even();
    Nf_read_open_B_area_even(address2, 0x00);
    nf_upload_buffer();

    while ((k <= nf_gl_buf_idx_max) && (start <= block_start) && ((start + 64) > block_start))
    {
      j = 4 * (block_start & 0x3F);
      gl_buffer[j    ] = buf[k].even.b[0];
      gl_buffer[j + 1] = buf[k].even.b[1];
      gl_buffer[j + 2] = buf[k].odd.b[0];
      gl_buffer[j + 3] = buf[k].odd.b[1];
      k++;
      block_start++;
    }   
 
    if (start >= 960)   /* This part update the free physical block table */
    {                   /* 960 = first logical block in part B of the last page of the Lut */
      dummy = 160;      /* 160 = offset for free blocks in part B of the last page of the Lut */
      for (j = 0; j <= 23; j++)
      {           
        gl_buffer[dummy    ] = buf_free[j].even>>8;
        gl_buffer[dummy + 1] = buf_free[j].even; 
        gl_buffer[dummy + 2] = buf_free[j].odd>>8;
        gl_buffer[dummy + 3] = buf_free[j].odd; 
        dummy += 4;
      }
    }

    Nf_write_open_B_area_even(gl_address, 0x00);
    nf_download_buffer();    /* download the buffer */

    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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人精品视频| 国产成人日日夜夜| 国产色产综合产在线视频| www.99精品| 男人的j进女人的j一区| 亚洲欧美综合在线精品| 日韩一区二区三区四区| www.亚洲色图| 免费一级片91| 亚洲精品国久久99热| 精品91自产拍在线观看一区| 在线视频国内自拍亚洲视频| 美女一区二区视频| 一个色妞综合视频在线观看| 久久久www免费人成精品| 欧美日韩免费电影| 91丝袜国产在线播放| 极品少妇一区二区| 婷婷久久综合九色综合绿巨人| 国产精品女同互慰在线看| 欧美va亚洲va在线观看蝴蝶网| 欧美视频一区二区三区四区 | 亚洲欧美一区二区三区孕妇| 91精品国产全国免费观看| 在线观看国产一区二区| www.av亚洲| 成人激情小说网站| 国产成人av资源| 精品午夜久久福利影院| 日日骚欧美日韩| 偷拍一区二区三区四区| 亚洲黄色尤物视频| 日韩高清不卡一区二区| 亚洲靠逼com| 国产精品女人毛片| 中文字幕国产一区| 国产欧美日韩三区| 国产欧美视频在线观看| 久久嫩草精品久久久久| 精品国产成人在线影院| 欧美成人一区二区三区片免费 | 欧美三级电影网站| 日本韩国欧美在线| 欧美性受极品xxxx喷水| 欧洲一区二区三区在线| 欧美午夜一区二区三区免费大片| 99久久精品国产精品久久| av网站免费线看精品| www.亚洲色图| 欧洲视频一区二区| 欧美日韩另类一区| 日韩欧美aaaaaa| 久久久综合激的五月天| 国产女同性恋一区二区| 中文字幕在线不卡一区| 亚洲色欲色欲www| 亚洲国产va精品久久久不卡综合| 亚洲一区av在线| 日本欧美一区二区三区乱码| 麻豆91免费观看| 国产馆精品极品| 成人午夜电影网站| 色激情天天射综合网| 欧美一级专区免费大片| 久久久精品人体av艺术| 亚洲三级在线观看| 五月天丁香久久| 激情综合网av| aaa欧美大片| 欧美三级欧美一级| 欧美v日韩v国产v| 最新不卡av在线| 日韩国产精品大片| 国产成人亚洲精品青草天美| 欧洲色大大久久| 国产亚洲综合性久久久影院| 亚洲伦理在线精品| 免费成人在线播放| 白白色亚洲国产精品| 欧美一区二区三区喷汁尤物| 国产欧美日韩综合| 亚洲午夜久久久久中文字幕久| 久久9热精品视频| 色综合天天视频在线观看| 欧美顶级少妇做爰| 国产精品青草综合久久久久99| 亚洲一区中文日韩| 国产乱子伦一区二区三区国色天香| 97久久精品人人澡人人爽| 91精品中文字幕一区二区三区| 久久精品人人爽人人爽| 亚洲不卡一区二区三区| 国产精品亚洲一区二区三区妖精| 欧美伊人精品成人久久综合97| 精品国产伦一区二区三区观看体验| 国产精品成人一区二区艾草 | 欧美二区在线观看| 久久久国产综合精品女国产盗摄| 亚洲国产综合视频在线观看| 国产精品1区2区3区| 欧美放荡的少妇| 亚洲欧美电影院| 国产美女在线观看一区| 欧美日本免费一区二区三区| 国产精品网站在线播放| 青青草成人在线观看| 91国内精品野花午夜精品| 国产日韩三级在线| 老司机精品视频一区二区三区| 91社区在线播放| 久久久.com| 看电影不卡的网站| 欧美日韩精品免费| 一区二区三区中文字幕在线观看| 国产精品一区一区| 日韩欧美卡一卡二| 午夜精品久久久久久久99水蜜桃 | 不卡一区二区在线| 久久久99久久| 精品一区二区三区在线播放视频 | 中文久久乱码一区二区| 国产麻豆精品在线| 精品国产第一区二区三区观看体验| 午夜精品久久久久久久久久| 在线观看精品一区| 亚洲综合在线观看视频| av在线播放成人| 中文字幕在线一区免费| 岛国一区二区在线观看| 国产日韩v精品一区二区| 国产精品一区专区| 久久午夜老司机| 国产在线不卡视频| 久久综合久久综合九色| 精品伊人久久久久7777人| 日韩欧美www| 国产在线观看一区二区| 2023国产精品| 成人综合激情网| 国产精品热久久久久夜色精品三区 | 中文字幕精品在线不卡| 国产一区二区三区观看| 欧美精品一区二区三区高清aⅴ | 国产成人午夜电影网| 久久九九影视网| 粉嫩aⅴ一区二区三区四区五区| 日本一区二区三区四区| 99精品久久免费看蜜臀剧情介绍| 国产精品国模大尺度视频| 91麻豆产精品久久久久久 | 亚洲成a人片在线不卡一二三区| 欧美三区免费完整视频在线观看| 亚洲午夜精品一区二区三区他趣| 欧美专区亚洲专区| 午夜精品福利在线| 日韩三级视频在线看| 国产一区二区三区精品欧美日韩一区二区三区 | 欧洲国内综合视频| 亚洲成人激情自拍| 日韩一区二区三区四区| 国产精品一区免费在线观看| 国产精品久久久久婷婷 | 欧美成人精品福利| 国产成人免费视频一区| 中文字幕制服丝袜成人av| 在线观看成人小视频| 日韩成人一级片| 国产欧美日韩三级| 欧美综合天天夜夜久久| 免费人成在线不卡| 精品国产91九色蝌蚪| 成人动漫视频在线| 视频一区二区三区中文字幕| 久久看人人爽人人| 欧亚洲嫩模精品一区三区| 久久99久国产精品黄毛片色诱| 中文字幕欧美日本乱码一线二线| 欧美这里有精品| 狠狠色狠狠色合久久伊人| 18涩涩午夜精品.www| 91精品国产综合久久久久| 国产成人精品一区二| 午夜精品免费在线| 欧美国产一区视频在线观看| 欧美性受xxxx黑人xyx性爽| 激情综合网天天干| 亚洲福利一二三区| 国产精品日韩成人| 日韩亚洲欧美在线| 色老汉一区二区三区| 国产高清不卡二三区| 天天综合天天综合色| 亚洲国产精品国自产拍av| 制服.丝袜.亚洲.中文.综合| 成人av网站在线| 九色porny丨国产精品| 亚洲永久免费视频| 国产欧美日韩另类一区| 日韩欧美电影一二三| 欧美在线播放高清精品|