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

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

?? f000_flashutils.c

?? 關(guān)于自制C8051單片機(jī)編程器的文檔
?? C
字號:
//-----------------------------------------------------------------------------
// F000_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: C8051F0xx
// Tool chain: KEIL C51 7.06
//
// Release 1.0
//

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

#include "F000_FlashPrimitives.h"
#include "F000_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);
char * FLASH_Read (char *dest, FLADDR src, unsigned numbytes);
void FLASH_Clear (FLADDR addr, unsigned numbytes);

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

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

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

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

      // 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, rptr, 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, rptr, length);

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

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

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

      // 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, rptr, length);

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

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

      // now handle 2nd page

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

      // 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, rptr, length);

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

      // 8. Copy Scratch page to destination page 2
      wptr = dest_2_page_start;
      rptr = FLASH_TEMP;
      length = FLASH_pagesize;
      FLASH_Copy (wptr, rptr, 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)
{
   // 1. Erase <numbytes> starting from <dest>
   FLASH_Clear (dest, numbytes);

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


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

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

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

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

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

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

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


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

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


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲在线视频一区| 国产视频视频一区| 午夜久久久久久| 制服丝袜成人动漫| 日韩av不卡在线观看| 日韩一级片网址| 国模冰冰炮一区二区| 国产欧美一区二区精品性| 成人性色生活片| 中文字幕欧美一区| 精品视频一区二区三区免费| 日韩黄色小视频| 日韩欧美国产小视频| 韩国女主播一区二区三区| 国产欧美一区二区在线| 97精品久久久午夜一区二区三区 | 国产高清不卡一区二区| 国产日韩三级在线| 91在线观看成人| 日韩中文字幕1| 美女爽到高潮91| 国产欧美一区二区精品仙草咪 | 亚洲一区二区三区视频在线| 制服.丝袜.亚洲.中文.综合| 国产一区二区毛片| 亚洲欧洲中文日韩久久av乱码| 欧美色综合网站| 国产主播一区二区三区| 亚洲桃色在线一区| 538prom精品视频线放| 国产乱码一区二区三区| 国产精品理论在线观看| 91精品在线观看入口| 成人涩涩免费视频| 爽爽淫人综合网网站| 国产欧美一区二区精品仙草咪| 一本久道中文字幕精品亚洲嫩| 日本中文一区二区三区| 国产精品动漫网站| 精品久久一区二区三区| 99视频一区二区| 看片的网站亚洲| 一区二区三区加勒比av| 久久久国际精品| 欧美日韩一区二区三区免费看| 国模冰冰炮一区二区| 午夜精品福利一区二区三区蜜桃| 久久久久成人黄色影片| 777欧美精品| 91女神在线视频| 国产精品888| 免费在线观看一区二区三区| 亚洲精品成a人| 日本一区二区三区四区| 欧美一区二区久久| 色素色在线综合| 成年人午夜久久久| 国产成人夜色高潮福利影视| 免费高清在线一区| 亚洲国产裸拍裸体视频在线观看乱了| 国产亚洲视频系列| 精品理论电影在线| 制服丝袜在线91| 在线观看视频一区二区| 91亚洲精品一区二区乱码| 成人黄色a**站在线观看| 精品一二三四区| 偷拍一区二区三区| 日韩国产欧美三级| 亚洲一区二区精品久久av| 亚洲精品日韩一| 一区二区三区精密机械公司| 亚洲美女视频在线| 亚洲欧洲制服丝袜| 亚洲人成在线播放网站岛国| 成人欧美一区二区三区1314| 亚洲欧洲成人自拍| 中文字幕日韩av资源站| 综合自拍亚洲综合图不卡区| 中文字幕在线播放不卡一区| 国产精品乱码一区二区三区软件 | 亚洲精品在线免费播放| 日韩无一区二区| 欧美一二三区在线观看| 欧美一区二区三区免费大片| 欧美一区二区私人影院日本| 91精品国产日韩91久久久久久| 91麻豆精品国产91久久久久久 | 亚洲国产日产av| 亚洲1区2区3区视频| 亚洲成av人片一区二区| 午夜欧美在线一二页| 日韩va亚洲va欧美va久久| 精品一区二区三区av| 国产一区二区三区视频在线播放| 成人午夜激情在线| 色综合天天综合网天天看片| 欧美中文字幕不卡| 91精品国产高清一区二区三区| 91精品国产91久久综合桃花| 精品久久久久久最新网址| 久久久久88色偷偷免费| 国产精品久久久久久户外露出 | 亚洲电影中文字幕在线观看| 视频精品一区二区| 国产精品18久久久久久vr| 成人av在线资源| 欧美日韩亚州综合| 在线电影一区二区三区| 精品国产乱码久久久久久久久| 久久视频一区二区| 自拍av一区二区三区| 舔着乳尖日韩一区| 国产一区二区在线观看免费| 成人av在线播放网址| 欧美在线一二三| 欧美精品一区二区三区很污很色的| 国产精品免费网站在线观看| 亚洲成av人影院| 国产.欧美.日韩| 欧美三级资源在线| 中国色在线观看另类| 亚洲国产成人高清精品| 国产xxx精品视频大全| 欧美日韩一区二区三区四区五区 | 国产欧美日韩精品一区| 亚洲国产一区二区三区青草影视| 韩国三级中文字幕hd久久精品| 一本久道久久综合中文字幕| 精品久久久影院| 亚洲一级电影视频| 国产精品一区二区91| 91视频91自| 久久蜜桃一区二区| 亚洲国产日韩在线一区模特| 国产91色综合久久免费分享| 欧美一区二区三区思思人| 中文字幕一区二区三区四区| 全国精品久久少妇| 色域天天综合网| 久久精品一区二区三区av| 亚洲一区二区三区美女| 99久久婷婷国产综合精品电影| 欧美精品一区二区三区蜜桃| 日韩av一二三| 欧美性xxxxxx少妇| 中文字幕在线免费不卡| 国产成+人+日韩+欧美+亚洲| 日韩一级片网址| 亚洲大片在线观看| 91啪亚洲精品| 中文字幕一区二区不卡| 狠狠色狠狠色合久久伊人| 3751色影院一区二区三区| 一区二区三区欧美在线观看| 不卡一区在线观看| 国产欧美日本一区视频| 国产在线视视频有精品| 日韩精品一区二区三区视频| 日韩激情在线观看| 欧美一区二区三区四区五区| 偷偷要91色婷婷| 欧美日韩一区视频| 亚洲福利电影网| 欧美在线观看视频一区二区三区 | 国产亚洲视频系列| 国产一区二区毛片| 久久久久久日产精品| 国产最新精品免费| 久久久另类综合| 精品亚洲国内自在自线福利| 精品国产乱子伦一区| 国内精品久久久久影院薰衣草| 久久亚洲精华国产精华液 | 青草国产精品久久久久久| 在线综合+亚洲+欧美中文字幕| 日韩国产一二三区| 精品美女一区二区| 国产aⅴ综合色| 中文字幕一区二区三区乱码在线 | 亚洲成在人线免费| 欧美日韩三级在线| 天堂午夜影视日韩欧美一区二区| 欧美妇女性影城| 美女一区二区三区| 国产欧美视频一区二区| 91网站在线观看视频| 亚洲欧美欧美一区二区三区| 欧美人与性动xxxx| 精品在线视频一区| 亚洲国产精品99久久久久久久久| www..com久久爱| 亚洲成人在线免费| 91精品蜜臀在线一区尤物| 韩国女主播成人在线| 国产精品国产a| 欧美日韩在线播放三区四区| 美女脱光内衣内裤视频久久影院| 国产午夜精品久久| 91国偷自产一区二区三区成为亚洲经典|