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

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

?? f300_flashutils.c

?? C8051Fxx全系列固件程序寫FLASH原程序
?? C
字號:
//-----------------------------------------------------------------------------
// F300_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: C8051F30x
// Tool chain: KEIL C51 7.06
//
// Release 1.0
//

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

#include "F300_FlashPrimitives.h"
#include "F300_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);
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久91精品国产一区二区精品| 日韩电影在线看| 日韩电影在线免费观看| 成人午夜又粗又硬又大| 日韩欧美一二三| 一区二区高清免费观看影视大全| 黑人精品欧美一区二区蜜桃| 欧美美女黄视频| 亚洲激情av在线| 成人美女在线视频| 久久久久久久久99精品| 蜜桃视频在线观看一区| 欧美性大战xxxxx久久久| 中文字幕中文字幕中文字幕亚洲无线| 精品亚洲国内自在自线福利| 欧美片网站yy| 舔着乳尖日韩一区| 欧美日韩国产在线观看| 亚洲精品高清视频在线观看| 国产成人在线影院| 久久亚洲精品小早川怜子| 麻豆精品久久精品色综合| 在线播放欧美女士性生活| 亚洲成人激情社区| 欧美日韩黄色一区二区| 午夜欧美电影在线观看| 在线视频欧美精品| 一区二区三区四区高清精品免费观看| 色综合天天性综合| 亚洲欧美日韩中文播放 | 欧美日韩一区二区三区不卡| 亚洲免费观看高清| 99r国产精品| 一区二区三区四区在线免费观看 | 99精品视频一区二区| 中文字幕在线观看一区| av一区二区久久| 一区二区三区日本| 欧美日韩精品三区| 蜜桃av一区二区在线观看| 日韩欧美中文字幕公布| 久久97超碰国产精品超碰| 精品成a人在线观看| 国产精品一区二区黑丝| 中文字幕亚洲在| 91成人网在线| 美国一区二区三区在线播放| 久久久不卡网国产精品二区 | 中文字幕永久在线不卡| 91美女片黄在线| 婷婷中文字幕综合| 欧美xxx久久| 91视频免费看| 美日韩一区二区| 国产精品久久久久久久久搜平片| 色综合久久久久综合体| 免费在线观看成人| 国产精品免费视频一区| 欧美日本国产视频| 国产精品一区二区黑丝| 亚洲欧美另类图片小说| 91精品国产91热久久久做人人| 国产精品一区二区91| 一区二区三区欧美久久| 精品国产精品一区二区夜夜嗨| 北岛玲一区二区三区四区| 午夜精品久久久久久久久久| 欧美国产日韩精品免费观看| 欧美午夜片在线观看| 韩国视频一区二区| 亚洲大型综合色站| 国产日韩欧美综合一区| 欧美精品乱码久久久久久按摩| 成人毛片老司机大片| 日韩精品成人一区二区三区| 中文字幕五月欧美| 欧美电视剧免费观看| 在线日韩国产精品| 国产jizzjizz一区二区| 日精品一区二区三区| 亚洲女性喷水在线观看一区| 精品国产成人系列| 欧美日韩精品高清| 91年精品国产| 成人深夜福利app| 国产一区在线视频| 日韩成人午夜电影| 一区二区三区波多野结衣在线观看 | 亚洲午夜免费视频| 国产精品久久久久aaaa樱花| 欧美精品一区二区不卡 | 99久久久国产精品| 国产一区欧美二区| 久久精品99国产精品日本| 视频一区中文字幕国产| 亚洲精品视频观看| 综合自拍亚洲综合图不卡区| 国产午夜亚洲精品午夜鲁丝片| 欧美一级电影网站| 7777精品伊人久久久大香线蕉的| 欧美性做爰猛烈叫床潮| 91久久精品国产91性色tv | 国产精品电影一区二区三区| 久久久蜜桃精品| 精品国产乱码久久| 欧美精品一区二区三区四区| 精品福利一二区| 欧美成人video| 日韩精品影音先锋| 欧美成人aa大片| 精品99一区二区| 久久中文娱乐网| 国产精品视频一二| 亚洲欧美在线aaa| 亚洲免费观看高清| 亚洲国产一区视频| 日韩不卡一区二区三区| 久久精品99国产精品日本| 毛片av一区二区| 国产在线日韩欧美| 成人网在线播放| 色综合天天性综合| 欧美日韩免费观看一区三区| 欧美日韩高清影院| 欧美大片在线观看一区| 久久伊99综合婷婷久久伊| 久久先锋影音av| 国产精品毛片高清在线完整版| 亚洲桃色在线一区| 亚洲午夜激情av| 国内精品视频一区二区三区八戒| 国产高清无密码一区二区三区| 国产精品12区| 色婷婷av一区二区三区之一色屋| 欧美日本一区二区| 精品不卡在线视频| 亚洲猫色日本管| 久久精品国产精品亚洲综合| 成人av电影观看| 欧美日韩精品系列| 日本一区二区三区免费乱视频| 亚洲人一二三区| 免费精品视频在线| 99久久精品免费看| 在线不卡免费av| 国产精品久久久久久久裸模| 婷婷综合久久一区二区三区| 国产九色精品成人porny| 色网综合在线观看| 久久女同精品一区二区| 亚洲精品中文在线影院| 看电影不卡的网站| 91美女蜜桃在线| 久久影院午夜论| 亚洲动漫第一页| aaa亚洲精品| 精品国偷自产国产一区| 一区二区三区在线高清| 国产伦精品一区二区三区视频青涩 | 成人午夜av影视| 日韩一区二区三区视频| 亚洲欧美视频一区| 国产精品996| 日韩视频123| 五月婷婷激情综合网| av亚洲精华国产精华精华| 欧美mv日韩mv亚洲| 天天射综合影视| 色国产精品一区在线观看| 国产婷婷色一区二区三区 | 久久婷婷一区二区三区| 亚洲高清在线视频| 97久久久精品综合88久久| 26uuu精品一区二区三区四区在线| 亚洲午夜免费电影| av在线不卡观看免费观看| 国产亚洲一区二区三区四区| 日韩成人免费看| 欧美日韩情趣电影| 亚洲最新视频在线观看| 成人污视频在线观看| 国产色产综合色产在线视频| 免费成人在线视频观看| 在线电影一区二区三区| 亚洲丶国产丶欧美一区二区三区| 色悠悠久久综合| 亚洲视频一二三区| thepron国产精品| 亚洲国产精品传媒在线观看| 国产另类ts人妖一区二区| 日韩欧美在线网站| 蜜臀久久99精品久久久久久9| 欧美日韩视频一区二区| 午夜精品123| 欧美一区二区三区四区久久| 蜜臀久久久99精品久久久久久| 欧美一区二区国产| 久久国产精品99久久久久久老狼 | 色综合久久久久综合| 亚洲视频在线观看三级|