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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? f120_flashutils.c

?? C8051Fxx全系列固件程序?qū)慒LASH原程序
?? C
字號(hào):
//-----------------------------------------------------------------------------
// F120_FlashUtils.c
//-----------------------------------------------------------------------------
// Copyright 2004 Silicon Laboratories, Inc.
//
// This program contains several useful utilities for writing and updating
// FLASH memory.
//
// AUTH: BW & GP
// DATE: 21 JUL 04
//
// Target: C8051F12x
// Tool chain: KEIL C51 7.06
//
// Release 1.1
// -Upgrading release version due to change in FlashPrimitives.h
// -07 FEB 2006 (GP)
//
// Release 1.0
//

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include "F120_FlashPrimitives.h"
#include "F120_FlashUtils.h"

//-----------------------------------------------------------------------------
// Structures, Unions, Enumerations, and Type Definitions
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Global Constants
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------

// FLASH read/write/erase routines
void FLASH_Write (FLADDR dest, char *src, unsigned numbytes, bit SFLE);
char * FLASH_Read (char *dest, FLADDR src, unsigned numbytes, bit SFLE);
void FLASH_Clear (FLADDR addr, unsigned numbytes, bit SFLE);

// FLASH update/copy routines
void FLASH_Update (FLADDR dest, char *src, unsigned numbytes, bit SFLE);
void FLASH_Copy (FLADDR dest, bit destSFLE, FLADDR src, bit srcSFLE,
                 unsigned numbytes);

// FLASH test routines
void FLASH_Fill (FLADDR addr, ULONG length, UCHAR fill, bit SFLE);

//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// FLASH Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// FLASH_Clear
//-----------------------------------------------------------------------------
//
// This routine erases <numbytes> starting from the FLASH addressed by
// <dest> by performing a read-modify-write operation using <FLASH_TEMP> as
// a temporary holding area.  This function accepts <numbytes> up to
// <FLASH_PAGESIZE>.
//
void FLASH_Clear (FLADDR dest, unsigned numbytes, bit SFLE)
{
   FLADDR dest_1_page_start;           // first address in 1st page
                                       // containing <dest>
   FLADDR dest_1_page_end;             // last address in 1st page
                                       // containing <dest>
   FLADDR dest_2_page_start;           // first address in 2nd page
                                       // containing <dest>
   FLADDR dest_2_page_end;             // last address in 2nd page
                                       // containing <dest>
   unsigned numbytes_remainder;        // when crossing page boundary,
                                       // number of <src> bytes on 2nd page
   unsigned FLASH_pagesize;            // size of FLASH page to update

   FLADDR  wptr;                       // write address
   FLADDR  rptr;                       // read address

   unsigned length;

   if (SFLE) {                         // update Scratchpad
      FLASH_pagesize = FLASH_SCRATCHSIZE;
   } else {
      FLASH_pagesize = FLASH_PAGESIZE;
   }

   dest_1_page_start = dest & ~(FLASH_pagesize - 1);
   dest_1_page_end = dest_1_page_start + FLASH_pagesize - 1;
   dest_2_page_start = (dest + numbytes)  & ~(FLASH_pagesize - 1);
   dest_2_page_end = dest_2_page_start + FLASH_pagesize - 1;

   if (dest_1_page_end == dest_2_page_end) {

      // 1. Erase Scratch page
      FLASH_PageErase (FLASH_TEMP, 0);

      // 2. Copy bytes from first byte of dest page to dest-1 to Scratch page

      wptr = FLASH_TEMP;
      rptr = dest_1_page_start;
      length = dest - dest_1_page_start;
      FLASH_Copy (wptr, 0, rptr, SFLE, length);

      // 3. Copy from (dest+numbytes) to dest_page_end to Scratch page

      wptr = FLASH_TEMP + dest - dest_1_page_start + numbytes;
      rptr = dest + numbytes;
      length = dest_1_page_end - dest - numbytes + 1;
      FLASH_Copy (wptr, 0, rptr, SFLE, length);

      // 4. Erase destination page
      FLASH_PageErase (dest_1_page_start, SFLE);

      // 5. Copy Scratch page to destination page
      wptr = dest_1_page_start;
      rptr = FLASH_TEMP;
      length = FLASH_pagesize;
      FLASH_Copy (wptr, SFLE, rptr, 0, length);

   } else {                            // value crosses page boundary
      // 1. Erase Scratch page
      FLASH_PageErase (FLASH_TEMP, 0);

      // 2. Copy bytes from first byte of dest page to dest-1 to Scratch page

      wptr = FLASH_TEMP;
      rptr = dest_1_page_start;
      length = dest - dest_1_page_start;
      FLASH_Copy (wptr, 0, rptr, SFLE, length);

      // 3. Erase destination page 1
      FLASH_PageErase (dest_1_page_start, SFLE);

      // 4. Copy Scratch page to destination page 1
      wptr = dest_1_page_start;
      rptr = FLASH_TEMP;
      length = FLASH_pagesize;
      FLASH_Copy (wptr, SFLE, rptr, 0, length);

      // now handle 2nd page

      // 5. Erase Scratch page
      FLASH_PageErase (FLASH_TEMP, 0);

      // 6. Copy bytes from numbytes remaining to dest-2_page_end to Scratch page

      numbytes_remainder = numbytes - (dest_1_page_end - dest + 1);
      wptr = FLASH_TEMP + numbytes_remainder;
      rptr = dest_2_page_start + numbytes_remainder;
      length = FLASH_pagesize - numbytes_remainder;
      FLASH_Copy (wptr, 0, rptr, SFLE, length);

      // 7. Erase destination page 2
      FLASH_PageErase (dest_2_page_start, SFLE);

      // 8. Copy Scratch page to destination page 2
      wptr = dest_2_page_start;
      rptr = FLASH_TEMP;
      length = FLASH_pagesize;
      FLASH_Copy (wptr, SFLE, rptr, 0, length);
   }
}



//-----------------------------------------------------------------------------
// FLASH_Update
//-----------------------------------------------------------------------------
//
// This routine replaces <numbytes> from <src> to the FLASH addressed by
// <dest>.  This function calls FLASH_Clear() to handle the dirty work of
// initializing all <dest> bytes to 0xff's prior to copying the bytes from
// <src> to <dest>. This function accepts <numbytes> up to <FLASH_PAGESIZE>.
//
void FLASH_Update (FLADDR dest, char *src, unsigned numbytes, bit SFLE)
{
   // 1. Erase <numbytes> starting from <dest>
   FLASH_Clear (dest, numbytes, SFLE);

   // 2. Write <numbytes> from <src> to <dest>
   FLASH_Write (dest, src, numbytes, SFLE);
}



//-----------------------------------------------------------------------------
// FLASH_Write
//-----------------------------------------------------------------------------
//
// This routine copies <numbytes> from <src> to the linear FLASH address
// <dest>.
//
void FLASH_Write (FLADDR dest, char *src, unsigned numbytes, bit SFLE)
{
   FLADDR i;

   for (i = dest; i < dest+numbytes; i++) {
      FLASH_ByteWrite (i, *src++, SFLE);
   }
}

//-----------------------------------------------------------------------------
// FLASH_Read
//-----------------------------------------------------------------------------
//
// This routine copies <numbytes> from the linear FLASH address <src> to
// <dest>.
//
char * FLASH_Read (char *dest, FLADDR src, unsigned numbytes, bit SFLE)
{
   FLADDR i;

   for (i = 0; i < numbytes; i++) {
      *dest++ = FLASH_ByteRead (src+i, SFLE);
   }
   return dest;
}

//-----------------------------------------------------------------------------
// FLASH_Copy
//-----------------------------------------------------------------------------
//
// This routine copies <numbytes> from <src> to the linear FLASH address
// <dest>.
//
void FLASH_Copy (FLADDR dest, bit destSFLE, FLADDR src, bit srcSFLE,
                 unsigned numbytes)
{
   FLADDR i;

   for (i = 0; i < numbytes; i++) {

      FLASH_ByteWrite ((FLADDR) dest+i,
                       FLASH_ByteRead((FLADDR) src+i, srcSFLE),
                       destSFLE);
   }
}


//-----------------------------------------------------------------------------
// FLASH_Fill
//-----------------------------------------------------------------------------
//
// This routine fills the FLASH beginning at <addr> with <lenght> bytes.
//
void FLASH_Fill (FLADDR addr, ULONG length, unsigned char fill, bit SFLE)
{
   FLADDR i;

   for (i = 0; i < length; i++) {
      FLASH_ByteWrite (addr+i, fill, SFLE);
   }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷国产综合精品青草| 精品在线视频一区| 亚洲精品视频免费观看| 亚洲欧美激情插 | 欧美电影在线免费观看| 欧美一区二区不卡视频| 一区二区三区日韩欧美| 亚洲成在线观看| 大陆成人av片| 日韩精品自拍偷拍| 亚洲男同1069视频| 国产在线视频一区二区三区| 在线观看区一区二| 国产精品大尺度| 国产精品正在播放| 日韩精品一区二区三区老鸭窝| 亚洲天天做日日做天天谢日日欢 | 宅男噜噜噜66一区二区66| 国产日韩欧美a| 久久99国产精品久久99| 在线播放欧美女士性生活| 一区二区三区波多野结衣在线观看| 久久电影网电视剧免费观看| 555夜色666亚洲国产免| 偷拍一区二区三区| 欧美精品一二三| 水野朝阳av一区二区三区| 91美女在线视频| 亚洲自拍偷拍欧美| 欧美日韩国产经典色站一区二区三区| 亚洲精品大片www| 91成人免费网站| 午夜亚洲国产au精品一区二区| 欧美色欧美亚洲另类二区| 午夜精品久久久久久久| 欧美一区二区网站| 国产乱国产乱300精品| 亚洲欧美成人一区二区三区| 日本韩国一区二区三区| 成人精品一区二区三区四区| 国产米奇在线777精品观看| 爽好多水快深点欧美视频| 图片区小说区区亚洲影院| 视频一区在线播放| 精品伊人久久久久7777人| 国产在线一区二区| 国产aⅴ精品一区二区三区色成熟| 国产一区二区网址| 欧美伊人久久大香线蕉综合69| 99re热视频精品| 欧美卡1卡2卡| 欧美岛国在线观看| 1区2区3区欧美| 亚洲一区二区三区四区五区中文| 亚洲精品国产a| 成人久久18免费网站麻豆 | 日韩不卡手机在线v区| 美女国产一区二区| 顶级嫩模精品视频在线看| 91亚洲资源网| 久久一日本道色综合| 亚洲视频在线一区| 激情五月婷婷综合| 色狠狠色狠狠综合| 国产日韩欧美激情| 日av在线不卡| 欧美视频自拍偷拍| 国产女人18水真多18精品一级做| 午夜不卡在线视频| 91极品美女在线| 国产精品久久免费看| 精品一区二区三区在线观看国产| 欧美日韩日日骚| 一区二区三区在线视频免费观看 | 亚洲一区二区三区爽爽爽爽爽| 波多野结衣中文一区| 久久久久久久综合日本| 美腿丝袜亚洲三区| 精品国产自在久精品国产| 五月天精品一区二区三区| 欧美精品日韩一区| 日本女优在线视频一区二区| 欧美日高清视频| 日日夜夜免费精品视频| 91福利社在线观看| 亚洲国产乱码最新视频 | 欧美人狂配大交3d怪物一区| 亚洲婷婷国产精品电影人久久| 99久久伊人精品| 亚洲福利国产精品| 日韩一级黄色大片| 国产乱理伦片在线观看夜一区| 国产精品高潮呻吟| 91在线观看视频| 亚洲一区二区在线播放相泽| 宅男噜噜噜66一区二区66| 国产高清精品在线| 亚洲卡通动漫在线| 欧美成人精品1314www| 成人av动漫在线| 精品亚洲porn| 婷婷一区二区三区| 最新高清无码专区| 久久久天堂av| 欧美精品tushy高清| 99久久777色| 国产一区二区免费在线| 亚洲国产精品久久久久婷婷884| 国产偷国产偷亚洲高清人白洁| 欧美妇女性影城| 91色在线porny| 国产盗摄一区二区| 国内外成人在线| 极品销魂美女一区二区三区| 亚洲国产wwwccc36天堂| 17c精品麻豆一区二区免费| 91麻豆精品国产91| 欧美日韩免费不卡视频一区二区三区| 99r国产精品| 欧美性大战久久| 欧美日韩aaaaa| 9191久久久久久久久久久| 91国产丝袜在线播放| 91色九色蝌蚪| 91麻豆精品国产无毒不卡在线观看| 色哟哟一区二区在线观看| 国产91精品欧美| 美女脱光内衣内裤视频久久影院| 一区精品在线播放| 亚洲自拍都市欧美小说| 午夜精品国产更新| 久草在线在线精品观看| 精品一区二区三区免费毛片爱| 国产99久久久久久免费看农村| 99久久综合精品| 欧美午夜精品久久久久久孕妇| 国产aⅴ综合色| 91国内精品野花午夜精品 | 一本大道av一区二区在线播放| 欧美一三区三区四区免费在线看| 久久久五月婷婷| 青青草原综合久久大伊人精品 | 欧美日韩亚洲综合| 欧美国产精品一区二区三区| 亚洲一区视频在线观看视频| 蜜臀av在线播放一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 久久综合中文字幕| 精品国产凹凸成av人网站| 精品av久久707| 亚洲国产精品激情在线观看| 国产欧美日韩卡一| 亚洲人成网站在线| 亚洲成在人线免费| 韩国欧美国产1区| 成人国产精品免费网站| 在线视频综合导航| 日韩精品一区二| 亚洲免费成人av| 久久99精品久久久久久动态图| 国产成人精品一区二区三区网站观看| 国产suv精品一区二区6| 欧美亚洲国产一区二区三区va| 欧美三级韩国三级日本三斤| 久久精品人人做人人爽人人| 一区二区三区在线免费视频| 老司机精品视频一区二区三区| 国产suv精品一区二区883| 欧美日韩综合一区| 国产精品萝li| 国产成人综合视频| 在线成人av网站| 亚洲一级在线观看| 色综合天天天天做夜夜夜夜做| 这里只有精品免费| 亚洲一区精品在线| 91精品办公室少妇高潮对白| 国产欧美日韩三级| 国产成人在线视频播放| 日韩视频免费观看高清完整版在线观看 | 精品国产不卡一区二区三区| 一区二区三区自拍| 91蜜桃网址入口| 亚洲午夜在线电影| 欧美日韩性生活| 蜜桃一区二区三区在线观看| 18欧美乱大交hd1984| 国产日韩av一区二区| jvid福利写真一区二区三区| 精品午夜久久福利影院| 亚洲一区二区三区中文字幕在线| 中文字幕中文字幕一区| 欧美精品一区二区精品网| 97se亚洲国产综合自在线观| 亚洲午夜免费视频| 久久久久久亚洲综合影院红桃| 97精品久久久午夜一区二区三区| 亚洲人成网站色在线观看| 欧美一区二区三区免费| 国产成人av电影在线|