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

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

?? flash_intel.c~

?? 針對德州儀器DM270開發(fā)板的bootloader,其實現(xiàn)了內核的下載以及文件系統(tǒng)的下載
?? C~
?? 第 1 頁 / 共 3 頁
字號:
/****************************** Routine: Description:******************************/static void clear_status(unsigned short *block_addr){#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS  #define CLEAR_CODE 0x00500050;  unsigned long *addr;  addr = (unsigned long *)((unsigned long)block_addr&0xfffffffc);  *addr = CLEAR_CODE;#else  #define CLEAR_CODE 0x50;  *block_addr = CLEAR_CODE;#endif  }/****************************** Routine: Description:******************************/static unsigned short read_status(unsigned short *block_addr){#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS  #define STATUS_CODE 0x00700070  unsigned long  l_status;  unsigned short status;  unsigned long *addr;  addr = (unsigned long *)((unsigned long)block_addr&0xfffffffc);  *addr = STATUS_CODE;  l_status = *addr;  // Next, take the upper 16bits and OR it with the  // lower 16bits forming a single 16bit return value.  status = (unsigned short)(l_status & 0x0000ffff);  status = status | (unsigned short)(l_status >> 16);  return status;#else  #define STATUS_CODE 0x70  unsigned short status;  *block_addr = STATUS_CODE;  status = *block_addr;  // util_printf("status read = %x\n",status); // *debug* temp  return status;#endif}/****************************** Routine: Description:******************************/static int is_busy(unsigned short *block_addr){#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS  #define STATUS_CODE 0x00700070  #define BUSY_BIT_POS 0x00800080  unsigned long status;  unsigned long *addr;  addr = (unsigned long *)((unsigned long)block_addr&0xfffffffc);  *addr = STATUS_CODE;  status = *addr;  if ((status & BUSY_BIT_POS) != BUSY_BIT_POS) {    // at least one of the bits is a zero indicating at    // at least one of the chips is busy.    return TRUE;  }  else {    return FALSE;  }#else    #define BUSY_BIT_POS 0x0080  unsigned short status;  status = read_status(block_addr);  if (0 == (BUSY_BIT_POS & status)) {    return TRUE;  }  else {    return FALSE;  }#endif  }/****************************** Routine: Description:******************************/static int was_error(unsigned short *block_addr){  #define ERASE_STATUS_BIT_POS      0x20  #define PROG_STATUS_BIT_POS       0x10  #define VOLT_STATUS_BIT_POS       0x08  #define PROG_SUSP_STATUS_BIT_POS  0x04  #define WRITE_PROT_STATUS_BIT_POS 0x02  unsigned short status;  unsigned char mask;  mask = 0;  mask |= WRITE_PROT_STATUS_BIT_POS;  mask |= PROG_SUSP_STATUS_BIT_POS;  mask |= VOLT_STATUS_BIT_POS;  mask |= PROG_STATUS_BIT_POS;  mask |= ERASE_STATUS_BIT_POS;  status = read_status(block_addr);  if (0 == (status & mask)) {    return 0;   // no errors.  }  else {    return status; // errors.  }}/****************************** Routine: Description:******************************/static int block_erase(unsigned short *block_addr){#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS  #define BLOCK_ERASE_CODE   0x00200020;  #define ERASE_CONFIRM_CODE 0x00D000D0;#else  #define BLOCK_ERASE_CODE   0x20;  #define ERASE_CONFIRM_CODE 0xD0;#endif  unsigned short status;  unsigned long *l_addr;  unsigned int retry_tally = 0;  l_addr = (unsigned long *)((unsigned long)block_addr&0xfffffffc);retry:    clear_status(block_addr);  if (0xBEEFFEED != FlashLockMode) {    util_printf("Error: Please Unlock Flash before trying to modify it.\n");    util_printf("       Giving up.\n");    return 1; // failed  }#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS  *l_addr = BLOCK_ERASE_CODE;  *l_addr = ERASE_CONFIRM_CODE;#else  *block_addr = BLOCK_ERASE_CODE;  *block_addr = ERASE_CONFIRM_CODE;#endif  while (is_busy(block_addr)) {}  if (was_error(block_addr)) {    status = read_status(block_addr);    util_printf("Erase error. block addr = 0x%X, status = 0x%x\n",block_addr,status);    util_printf("[retrying]\n");    if (retry_tally++ < 3) {      goto retry;    }    else {      util_printf("Giving up!\n");      enable_read_mode(block_addr);      return 1; // failed    }  }#if 0 /* stuff that was helpful for a while on C547X but now doesn't seem necessary. */  {    unsigned long val;    enable_read_mode(block_addr);    val = *l_addr;    if (0xffffffff != val) { // basic sanity check.      util_printf("Erase error. block addr = 0x%X, l_addr = 0x%X, val = 0x%X\n",block_addr,l_addr,val);      status = read_status(block_addr);      util_printf("[status = 0x%x]\n",status);      util_printf("[retrying]\n");      if (retry_tally++ < 3) {        goto retry;      }      else {        util_printf("Giving up!\n");        enable_read_mode(block_addr);        return 1; // failed      }    }  }#endif    enable_read_mode(block_addr);  return 0; // success}#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS   /******************************    Routine:    Description:   ******************************/   static int prog_data_32(unsigned long *block_addr, unsigned long data)   {     #define PROG_CODE_32 0x00400040;     unsigned short status;     // util_printf("0x%X = 0x%X\n", block_addr, data); // *debug* tmp     if ((*block_addr & data) != data) {       // we can only change bits from a "1" to "0".       util_printf("Error, not previously erased; addr = 0x%X, data = 0x%X\n",block_addr,*block_addr);       return 1; // failed     }     clear_status((unsigned short *)block_addr);     if (0xBEEFFEED != FlashLockMode) {       util_printf("Error: Please Unlock Flash before trying to modify it.\n");       util_printf("       Giving up.\n");       return 1; // failed     }     *block_addr = PROG_CODE_32; // Put each chip in program mode, and then...     *block_addr = data;         // 16bits+16bits=32bits; Give each chip a 16bit data value.     while (is_busy((unsigned short *)block_addr)) {}     if (was_error((unsigned short *)block_addr)) {       status = read_status((unsigned short *)block_addr);       util_printf("Prog error. addr = %X, status = %x\n",block_addr,status);       clear_status((unsigned short *)block_addr);  // *debug* temp       util_printf("Prog error. addr = %X, status = %x\n",block_addr,status);       SYSTEM_FATAL("Terminating.");     }     enable_read_mode((unsigned short *)block_addr);     return 0; // success   }    #else   /******************************    Routine:    Description:   ******************************/   static int prog_data_16(unsigned short *block_addr, unsigned short data)   {     #define PROG_CODE_16 0x40;     unsigned short status;     // util_printf("0x%X = 0x%x\n", block_addr, data); // *debug* tmp     if ((*block_addr & data) != data) {       // we can only change bits from a "1" to "0".       util_printf("Error, not previously erased; addr = 0x%X, data = 0x%X\n",block_addr,*block_addr);       return 1; // failed     }     clear_status(block_addr);     if (0xBEEFFEED != FlashLockMode) {       util_printf("Error: Please Unlock Flash before trying to modify it.\n");       util_printf("       Giving up.\n");       return 1; // failed     }     *block_addr = PROG_CODE_16;     *block_addr = data;     while (is_busy(block_addr)) {}     if (was_error(block_addr)) {       status = read_status(block_addr);       util_printf("Prog error. addr = %X, status = %x\n",block_addr,status);       clear_status(block_addr);  // *debug* temp       util_printf("Prog error. addr = %X, status = %x\n",block_addr,status);       SYSTEM_FATAL("Terminating.");     }     enable_read_mode(block_addr);     return 0; // success   }#endif/****************************** Routine: Description:   Note: See flash.h for description. ******************************/void flash_read(unsigned int offset,  // Of flash.                unsigned short *dest, // Destination buffer                unsigned int num_bytes,                PutValAtAddrCallBack_t CBack){  unsigned int i, num_words;  unsigned short fval, *s_addr, *d_addr;  s_addr = (unsigned short *)(BSPCONF_FLASH_BASE+offset);  d_addr = dest;  // Flash; read word at a time, not byte at a time.  num_words = ((num_bytes+1)>>1); // round up.  for (i=0; i<num_words; i++) {    fval = *s_addr;    if (CBack) {      (*CBack)(d_addr,fval); // write out the the 16bit value.    }    else {      *d_addr=fval; // write out the the 16bit value.    }    s_addr++;    d_addr++;  }}/****************************** Routine: Description:   Note: See flash.h for description. ******************************/int flash_write(unsigned int offset,  // Of flash.                 unsigned short *src,  // source buffer.                 unsigned int num_bytes,                 GetValAtAddrCallBack_t CBack){#ifdef TWO_16BIT_FLASH_CHIPS_INVOLVED_IN_EACH_32BIT_ACCESS

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱子伦一区| 国产一区二区三区美女| 亚洲精品在线三区| 奇米888四色在线精品| 欧美乱妇15p| 国产日本欧洲亚洲| 国产精品一区二区三区99| 久久久亚洲午夜电影| 久国产精品韩国三级视频| 精品精品国产高清a毛片牛牛| 免费一区二区视频| 国产亚洲欧洲997久久综合 | 亚洲午夜精品网| 88在线观看91蜜桃国自产| 久久成人久久爱| 国产亚洲1区2区3区| aa级大片欧美| 亚洲不卡在线观看| 久久婷婷成人综合色| 成人午夜精品在线| 亚洲影院理伦片| 日韩午夜中文字幕| 国产盗摄视频一区二区三区| 国产精品久久久久天堂| 欧美在线播放高清精品| 麻豆精品新av中文字幕| 国产精品色呦呦| 欧美日韩一区二区三区四区五区 | 国产无人区一区二区三区| 99久久精品免费| 日韩精品国产欧美| 中文字幕欧美三区| 欧美日韩精品电影| 国产精品1024久久| 午夜精品视频一区| 国产精品久久三| 欧美一区二区久久久| 99亚偷拍自图区亚洲| 免费久久精品视频| 亚洲乱码中文字幕综合| 精品久久久影院| 欧美主播一区二区三区美女| 国模无码大尺度一区二区三区| 一区二区三区在线免费播放| 精品国产91乱码一区二区三区 | 亚洲综合在线免费观看| 精品国产123| 欧美日本一区二区三区| 丁香五精品蜜臀久久久久99网站| 日本中文一区二区三区| 亚洲青青青在线视频| 精品电影一区二区| 在线播放中文字幕一区| 色拍拍在线精品视频8848| 国产高清成人在线| 另类成人小视频在线| 天天做天天摸天天爽国产一区| 中文字幕一区二区三区在线观看 | 国产成人综合精品三级| 一区二区日韩av| 国产精品久久久久影视| 久久综合色8888| 91精品国产入口| 色综合中文综合网| 国产精品灌醉下药二区| 久久综合给合久久狠狠狠97色69| 制服丝袜在线91| 欧美日韩国产精品自在自线| 色噜噜狠狠成人网p站| 成人h精品动漫一区二区三区| 国产在线播放一区| 久久电影国产免费久久电影| 免费成人在线网站| 美脚の诱脚舐め脚责91| 美女网站视频久久| 青青草视频一区| 日本欧美一区二区| 日韩不卡一二三区| 乱中年女人伦av一区二区| 蜜臀av一区二区在线免费观看| 日本在线播放一区二区三区| 日韩国产精品久久久久久亚洲| 视频一区免费在线观看| 奇米色一区二区| 高清国产午夜精品久久久久久| 午夜精品久久久久久久久久 | 国产麻豆欧美日韩一区| 久久久久国色av免费看影院| 久久久蜜臀国产一区二区| 久久一日本道色综合| 久久久久久夜精品精品免费| 国产清纯白嫩初高生在线观看91| 国产视频一区二区三区在线观看 | 欧美日韩精品一区二区天天拍小说| 欧洲在线/亚洲| 欧美日韩精品欧美日韩精品一| 91精品国产麻豆国产自产在线 | 精品国产乱码久久久久久夜甘婷婷| 日韩欧美成人午夜| 久久久久久综合| 中文字幕日本不卡| 一区二区三区四区激情| 午夜激情久久久| 精品亚洲成a人| 丁香另类激情小说| 色综合欧美在线视频区| 91麻豆精品国产91久久久久久久久 | 激情久久五月天| www.色精品| 欧美日韩国产高清一区二区三区 | 亚洲欧洲另类国产综合| 亚洲综合激情另类小说区| 麻豆国产欧美一区二区三区| 国产乱色国产精品免费视频| 95精品视频在线| 欧美一二区视频| 中文字幕一区二| 石原莉奈在线亚洲二区| 成人一区在线看| 91精品国产aⅴ一区二区| 国产欧美一区二区精品性| 夜夜嗨av一区二区三区中文字幕 | 91精品国产免费| 中文字幕第一区第二区| 亚洲一区二区三区在线看| 国产乱码精品一品二品| 91国产视频在线观看| 久久久国际精品| 天堂一区二区在线| 成人黄色电影在线| 精品少妇一区二区三区日产乱码 | 欧美日韩精品综合在线| 2020日本不卡一区二区视频| 亚洲夂夂婷婷色拍ww47| 国产91对白在线观看九色| 欧美一区二区三区四区视频| 自拍偷拍欧美激情| 国产一二三精品| 欧美精品精品一区| 中文字幕一区不卡| 国产成人免费高清| 日韩免费高清电影| 婷婷成人激情在线网| 色婷婷av一区二区三区gif| 国产日韩欧美不卡| 蜜桃av一区二区三区| 欧美日韩国产经典色站一区二区三区| 国产精品―色哟哟| 国产精一品亚洲二区在线视频| 欧美精品色综合| 亚洲成a人片综合在线| 色吊一区二区三区| 中文字幕一区二区三区在线不卡| 国产精品系列在线播放| 精品国产网站在线观看| 青青草91视频| 5月丁香婷婷综合| 亚洲无人区一区| 欧美日韩中文精品| 亚洲午夜影视影院在线观看| 91麻豆精东视频| 国产精品私人自拍| 高清在线不卡av| 中文字幕免费在线观看视频一区| 国产在线不卡一区| 久久精品无码一区二区三区| 国产在线精品一区二区夜色| 精品国产免费久久| 极品瑜伽女神91| 精品国产91亚洲一区二区三区婷婷| 麻豆精品视频在线观看视频| 日韩无一区二区| 韩国成人福利片在线播放| 日韩免费高清av| 国产精品自在在线| 久久久国产精品午夜一区ai换脸| 国产传媒一区在线| 欧美激情一区二区三区不卡| a4yy欧美一区二区三区| 一区二区三区精品视频在线| 日本道色综合久久| 天天操天天干天天综合网| 欧美一级xxx| 国产精品一区二区你懂的| 亚洲国产精品ⅴa在线观看| 成人app软件下载大全免费| 亚洲三级小视频| 欧美视频在线一区| 日本欧美肥老太交大片| 精品国产成人在线影院| 不卡av在线网| 亚洲一区二区三区在线| 91精品国产91久久久久久最新毛片 | 亚洲美女一区二区三区| 欧美日韩美少妇| 男女激情视频一区| 国产亚洲福利社区一区| 色狠狠一区二区| 青青草原综合久久大伊人精品优势| 久久精品网站免费观看|