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

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

?? f326_flashutils.c

?? C8051Fxx全系列固件程序寫FLASH原程序
?? C
//-----------------------------------------------------------------------------
//  F326_FlashUtils.c
//-----------------------------------------------------------------------------
// Copyright 2006 Silicon Laboratories, Inc.
// http://www.silabs.com
//
// Program Description:
//
// This program contains several useful utilities for writing and updating
// FLASH memory.
//
// FID:            326000026
// Target:         C8051F326/7
// Tool chain:     Keil C51 8.00 / Keil EVAL C51
// Command Line:   None
//
// Release 1.0
//    -Initial Revision (GP)
//    -30 JAN 2006
//

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

#include "F326_FlashPrimitives.h"
#include "F326_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
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  FLADDR dest - target address where to start clearing bytes
//                     range is 0 to <FLASH_TEMP>-1
//   2)  unsigned numbytes  - number of bytes to clear
//                            range is 1 to <FLASH_PAGESIZE>
//
// 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.
//
//-----------------------------------------------------------------------------

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
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  FLADDR dest - target address where to start updating bytes
//                     range is 0 to (FLASH_TEMP-1)
//   2)  char *src   - pointer to address where source bytes are located
//   3)  unsigned numbytes  - number of bytes to clear
//                            range is 1 to <FLASH_PAGESIZE>
//
// 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>.
//
//-----------------------------------------------------------------------------

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
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  FLADDR dest - target address where to start writing bytes
//                     range is 0 to (FLASH_TEMP-1)
//   2)  char *src   - pointer to address where source bytes are located
//   3)  unsigned numbytes   - number of bytes to write
//                     range is limited by Flash size and starting location
//
// 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
//-----------------------------------------------------------------------------
//
// Return Value :
//   1)  char *     -  pointer to bytes read back
// Parameters   : 
//   1)  char *dest -  target address where to store bytes read from Flash
//   2)  char *src   - pointer to address where source bytes are located
//   3)  unsigned numbytes   - number of bytes to read
//                     range is limited by Flash size and starting location
//
// 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
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  FLADDR dest -  target address where to copy the source bytes
//   2)  FLADDR src   - target address where source bytes are located
//   3)  unsigned numbytes   - number of bytes to read
//                     range is limited by Flash size and starting location
//
// 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
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : 
//   1)  FLADDR addr   - target address where to start filling
//   2)  ULONG length  - number of bytes to fill
//                       range is limited by Flash size and starting point
//   3)  UCHAR fill    - char to fill 
//                       range is 0x00 to 0xFF
//
// This routine fills the FLASH beginning at <addr> with <length> bytes.
//
//-----------------------------------------------------------------------------
void FLASH_Fill (FLADDR addr, ULONG length, UCHAR fill)
{
   FLADDR i;

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

//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品ww久久久久久p站| 日本一二三四高清不卡| 久久精品国产免费| 亚洲色图.com| 中文字幕av在线一区二区三区| 欧美精选在线播放| www.欧美日韩| 成人爱爱电影网址| 成人综合在线观看| caoporen国产精品视频| 9色porny自拍视频一区二区| 国产成人鲁色资源国产91色综| 韩国v欧美v日本v亚洲v| 麻豆国产精品一区二区三区| 久久99精品国产麻豆婷婷洗澡| 日本不卡中文字幕| 国产剧情一区在线| 色欧美片视频在线观看在线视频| 91国产丝袜在线播放| 欧美这里有精品| 7777精品伊人久久久大香线蕉的 | 3d动漫精品啪啪一区二区竹菊| 欧美精品v日韩精品v韩国精品v| 欧美一区二区三区的| 欧美精品一区二区三区在线| 中文字幕国产一区二区| 亚洲人午夜精品天堂一二香蕉| 亚洲电影第三页| 久久国产剧场电影| 波波电影院一区二区三区| 欧美最猛黑人xxxxx猛交| 欧美一级黄色大片| 国产精品久久久久久久久免费丝袜| 专区另类欧美日韩| 免费不卡在线视频| 91麻豆福利精品推荐| 欧美日韩一区三区| 久久精品亚洲一区二区三区浴池| 亚洲色图.com| 国产综合一区二区| 欧美三级视频在线播放| 久久精品男人的天堂| 午夜视频在线观看一区二区 | 玉足女爽爽91| 久久成人免费网| 色婷婷av一区| 久久亚洲影视婷婷| 日本在线不卡一区| 91国偷自产一区二区开放时间 | 欧美亚洲高清一区| 国产精品蜜臀在线观看| 免费在线观看日韩欧美| 色综合久久久久久久久久久| 精品久久久久久久久久久久久久久| 伊人一区二区三区| 成人国产精品视频| 久久先锋影音av鲁色资源| 亚洲国产成人av好男人在线观看| 成人免费精品视频| 精品国产精品网麻豆系列| 亚洲成a人片综合在线| 91老司机福利 在线| 国产精品丝袜黑色高跟| 国产馆精品极品| 精品欧美久久久| 蜜桃视频一区二区三区在线观看| 欧洲av在线精品| 亚洲视频香蕉人妖| 99精品视频在线播放观看| 国产午夜精品一区二区三区视频| 久久国产夜色精品鲁鲁99| 91精品午夜视频| 日韩激情av在线| 91 com成人网| 日本vs亚洲vs韩国一区三区| 8v天堂国产在线一区二区| 性感美女久久精品| 538在线一区二区精品国产| 午夜精品久久久久久久| 欧美mv和日韩mv国产网站| 日本亚洲视频在线| 欧美一区二区精品久久911| 人人狠狠综合久久亚洲| 日韩欧美一级在线播放| 麻豆久久久久久| 精品国产一区二区国模嫣然| 国产一二精品视频| 国产精品无圣光一区二区| 91在线精品秘密一区二区| 亚洲日本在线看| 欧美精品在线一区二区| 老司机午夜精品| 国产农村妇女精品| 在线精品视频免费播放| 天天色天天爱天天射综合| 精品久久久久99| 成人av第一页| 亚洲成人动漫在线免费观看| 日韩视频中午一区| 国产精品一区二区三区乱码| 亚洲欧美日韩小说| 这里只有精品99re| 国产91精品在线观看| 亚洲视频一区二区在线| 69久久夜色精品国产69蝌蚪网| 精品一区二区久久| 亚洲男同1069视频| 久久亚洲春色中文字幕久久久| 国产mv日韩mv欧美| 亚洲成人你懂的| 久久久精品免费网站| 欧美色偷偷大香| 国产呦精品一区二区三区网站| 亚洲女人的天堂| 717成人午夜免费福利电影| 国产成a人亚洲精品| 午夜精品免费在线观看| 欧美激情一区二区三区不卡| 欧美性受xxxx| 成人a免费在线看| 日本中文一区二区三区| 亚洲女子a中天字幕| 4438x亚洲最大成人网| 91麻豆免费在线观看| 国产乱子轮精品视频| 亚洲一区二区高清| 国产精品久久久久久一区二区三区| 欧美日韩高清在线播放| av不卡免费电影| 国产精品中文字幕日韩精品| 亚洲国产cao| 亚洲欧美日韩中文字幕一区二区三区 | 性做久久久久久久久| 久久亚洲精品小早川怜子| 欧美丰满一区二区免费视频| 99精品视频中文字幕| 国产成人aaa| 国产精一区二区三区| 美女一区二区三区| 日一区二区三区| 亚洲成人三级小说| 亚洲二区在线观看| 亚洲欧美日韩成人高清在线一区| 国产精品污www在线观看| 精品人在线二区三区| 欧美电影免费观看完整版| 欧美日韩国产另类不卡| 日本道色综合久久| 91热门视频在线观看| 成人夜色视频网站在线观看| 国产一区二区三区免费播放| 久久精品99久久久| 精品一二三四在线| 久久99国产精品免费网站| 日韩二区三区四区| 免费在线成人网| 青青草成人在线观看| 麻豆国产欧美日韩综合精品二区| 日本视频一区二区三区| 日本在线不卡视频一二三区| 久久国产精品第一页| 激情文学综合丁香| 国产mv日韩mv欧美| 欧美中文字幕不卡| 欧美日韩黄视频| 欧美一级淫片007| 精品91自产拍在线观看一区| 久久青草欧美一区二区三区| 国产肉丝袜一区二区| 国产精品女人毛片| 一区二区三区在线看| 日韩影视精彩在线| 久久aⅴ国产欧美74aaa| 高清shemale亚洲人妖| 99久久久久免费精品国产| 欧美伊人精品成人久久综合97| 欧美三级蜜桃2在线观看| 日韩一区二区三区在线视频| 久久婷婷久久一区二区三区| 国产精品久久久久久一区二区三区| 亚洲精品国产第一综合99久久 | 欧美综合一区二区| 欧美一级精品大片| 中文欧美字幕免费| 午夜在线成人av| 国产激情视频一区二区在线观看| 成人动漫视频在线| 久久精品噜噜噜成人88aⅴ| 成人激情开心网| 欧美三级中文字幕| 欧美午夜精品理论片a级按摩| 国产网站一区二区| 精品久久久久久亚洲综合网| 亚洲激情一二三区| 另类的小说在线视频另类成人小视频在线 | 偷窥少妇高潮呻吟av久久免费| 久久99国产精品免费| 99精品视频在线免费观看| 日韩久久免费av| 午夜精品免费在线|