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

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

?? flashdev.c

?? 《嵌入式固件開發》一書的源碼
?? C
字號:
/* This file contains all of the flash support code that does not need   to be relocated to RAM.  Two separate files (flash.c and flashpic.c)   are maintained because under certain compilers, they may need to be   compiled with different options to be made position independent.   NOTE: THESE FUNCTIONS ARE NOT RE-ENTRANT!!!  All of the FLASH routines   assume they can copy themselves into the array FlashFunc[]; hence, only   one operation can be active at any time.*/#include "config.h"#if INCLUDE_FLASH#include "cpu.h"#include "flashdev.h"#include "flash.h"#include "genlib.h"typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned long ulong;typedef volatile unsigned char vuchar;typedef volatile unsigned short vushort;typedef volatile unsigned long vulong;typedef volatile unsigned int vuint;typedef volatile int vint;extern int Flashlock16();extern int EndFlashlock16();extern int Flashtype16();extern int EndFlashtype16();extern int Flashwrite16();extern int EndFlashwrite16();extern int Flashewrite16();extern int EndFlashewrite16();extern int Flasherase16();extern int EndFlasherase16();extern int      FlashProtectWindow;extern int      FlashCurrentBank;extern int      flashopload(), flashtype();extern struct   flashinfo FlashBank[FLASHBANKS];/* FlashXXXFbuf[]:   These arrays will contain the flash operation function that is executing.   Recall that to operate on the flash, you cannot be executing out of it.   The flash functions are copied here, then executed through the function   pointer flashfunc which is set to point to FlashFunc.*/ulong    FlashLockFbuf[FLASHFUNCSIZE];ulong    FlashTypeFbuf[FLASHFUNCSIZE];ulong    FlashEraseFbuf[FLASHFUNCSIZE];ulong    FlashWriteFbuf[FLASHFUNCSIZE];ulong    FlashEwriteFbuf[FLASHFUNCSIZE];/* FlashNamId[]:   Used to correlate between the ID and a string representing the name   of the flash device.*/struct flashdesc FlashNamId[] = {        { INTEL28F800B, "INTEL-28F800B" },        { INTEL28F160B, "INTEL-28F160B" },        { INTEL28F320B, "INTEL-28F320B" },        { 0,                0 },};int SectorSizes800B[] = {   /* 23 sectors */    0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000};int SectorSizes160B[] = {   /* 39 sectors */    0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000};int SectorSizes320B[] = {   /* 71 sectors */    0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x2000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000,    0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000, 0x10000};/* flashlock():   Use a function pointer to call the routine relocated to RAM space.*/intflashlock(struct flashinfo *fdev,int snum,int operation){    return(fdev->fllock(fdev,snum,operation));}/* FlashBankInit():   Initialize flash structures and determine flash device type.*/intFlashBankInit(struct flashinfo *fbnk,int snum){    uchar   *saddr;    int i, *sizetable, msize;    struct  sectorinfo *sinfotbl;    sizetable = 0;    /* Based on the flash bank ID returned, load a sector count and a */    /* sector size-information table... */    flashtype(fbnk);    switch(fbnk->id) {        case INTEL28F800B:            fbnk->sectorcnt = 23;            sizetable = SectorSizes800B;            break;        case INTEL28F160B:            fbnk->sectorcnt = 39;            sizetable = SectorSizes160B;            break;        case INTEL28F320B:            fbnk->sectorcnt = 71;            sizetable = SectorSizes320B;            break;        default:            printf("Unrecognized flashid: 0x%04x\n",(ushort)(fbnk->id));            return(-1);    }    /* Create the per-sector information table.  The size of the table */    /* depends on the number of sectors in the device...  */    if (fbnk->sectors)        free((char *)fbnk->sectors);    msize = fbnk->sectorcnt * (sizeof(struct sectorinfo));    sinfotbl = (struct sectorinfo *)malloc(msize);    if (!sinfotbl) {        printf("Can't allocate space for flash sector information\n");        return(-1);    }    fbnk->sectors = sinfotbl;    /* Using the above-determined sector count and size table, build */    /* the sector information table as part of the flash-bank structure: */    saddr = fbnk->base;    for(i=0;i<fbnk->sectorcnt;i++) {        fbnk->sectors[i].snum = snum+i;        fbnk->sectors[i].size = sizetable[i];        fbnk->sectors[i].begin = saddr;        fbnk->sectors[i].end =            fbnk->sectors[i].begin + fbnk->sectors[i].size - 1;        fbnk->sectors[i].protected = 0;        saddr += sizetable[i];    }    fbnk->end = saddr-1;    return(fbnk->sectorcnt);}/* FlashInit():   Initialize data structures for each bank of flash...*/intFlashInit(){    int snum;    struct  flashinfo *fbnk;    snum = 0;    FlashCurrentBank = 0;    /* Copy functions to ram space... */    /* Note that this MUST be done when cache is disabled to assure that */    /* the RAM is occupied by the designated block of code. */    if (flashopload((ulong *)FLASHLOCK,(ulong *)ENDFLASHLOCK,        FlashLockFbuf,sizeof(FlashLockFbuf)) < 0)        return(-1);    if (flashopload((ulong *)FLASHTYPE,(ulong *)ENDFLASHTYPE,        FlashTypeFbuf,sizeof(FlashTypeFbuf)) < 0)        return(-1);    if (flashopload((ulong *)FLASHERASE,(ulong *)ENDFLASHERASE,        FlashEraseFbuf,sizeof(FlashEraseFbuf)) < 0)        return(-1);    if (flashopload((ulong *)FLASHEWRITE,(ulong *)ENDFLASHEWRITE,        FlashEwriteFbuf,sizeof(FlashEwriteFbuf)) < 0)        return(-1);    if (flashopload((ulong *)FLASHWRITE,(ulong *)ENDFLASHWRITE,        FlashWriteFbuf,sizeof(FlashWriteFbuf)) < 0)        return(-1);    fbnk = &FlashBank[0];    fbnk->base = (unsigned char *)FLASH_BANK0_BASE_ADDR;    fbnk->width = FLASH_BANK0_WIDTH;    fbnk->fltype = (int(*)())FlashTypeFbuf;         /* flashtype(). */    fbnk->flerase = (int(*)())FlashEraseFbuf;       /* flasherase(). */    fbnk->flwrite = (int(*)())FlashWriteFbuf;       /* flashwrite(). */    fbnk->flewrite = (int(*)())FlashEwriteFbuf;     /* flashewrite(). */    fbnk->fllock = (int(*)())FlashLockFbuf;         /* flashlock(). */    snum += FlashBankInit(fbnk,snum);    /* This line should probably be removed once TFS is working: */    flashlock(fbnk,ALL_SECTORS,FLASH_UNLOCK);    sectorProtect(FLASH_PROTECT_RANGE,1);    /* Additional flash memory banks would be initialized here... */    return(0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷丁香久久五月婷婷| 久久成人羞羞网站| 狠狠色综合日日| 成人av在线播放网站| 正在播放亚洲一区| 亚洲人成精品久久久久| 国产高清精品网站| 日韩久久免费av| 亚洲成av人片在www色猫咪| 欧美曰成人黄网| 日韩欧美国产系列| 精品午夜久久福利影院| 91久久线看在观草草青青| 久久亚洲精精品中文字幕早川悠里| 亚洲福利一区二区| 日本精品一级二级| 国产精品国产三级国产普通话蜜臀| 蜜桃av一区二区三区| 欧美日韩国产小视频| 亚洲在线观看免费| 91精彩视频在线观看| 亚洲人精品午夜| av一区二区三区| 国产精品每日更新| 成人禁用看黄a在线| 欧美国产精品一区二区| 国产麻豆精品在线| 国产午夜三级一区二区三| 国产在线精品一区二区三区不卡| 精彩视频一区二区三区| 丰满亚洲少妇av| 日韩欧美中文一区二区| 亚洲国产精品视频| 在线观看三级视频欧美| 亚洲制服丝袜一区| 欧美视频一区二| 石原莉奈一区二区三区在线观看| 91国产免费观看| 亚洲国产成人91porn| 欧美视频在线观看一区二区| 舔着乳尖日韩一区| 日韩一二三区视频| 国产乱码精品一区二区三| 99国产精品久久久久久久久久久| 久久品道一品道久久精品| 国产激情91久久精品导航| 国产精品毛片久久久久久久| 色综合 综合色| 日本vs亚洲vs韩国一区三区二区 | www国产亚洲精品久久麻豆| 午夜欧美一区二区三区在线播放| 欧美一区二区三区四区在线观看| 蜜乳av一区二区| 国产免费观看久久| 欧洲精品在线观看| 毛片av一区二区| 国产精品色在线观看| 色哟哟国产精品免费观看| 天堂成人国产精品一区| 久久蜜桃av一区精品变态类天堂| 97aⅴ精品视频一二三区| 婷婷中文字幕综合| 久久久久久日产精品| 色婷婷精品久久二区二区蜜臂av| 4438x成人网最大色成网站| 99久久久久久99| 中文字幕日韩av资源站| 欧美日韩一区三区| 精品一区二区在线视频| 亚洲精品视频免费观看| 日韩一区二区在线看| 丁香六月综合激情| 日日噜噜夜夜狠狠视频欧美人| 337p日本欧洲亚洲大胆精品| 99久久精品99国产精品 | 99久精品国产| 日本亚洲免费观看| 亚洲女同ⅹxx女同tv| 日韩久久精品一区| 欧美在线|欧美| 高清不卡在线观看av| 蜜桃久久久久久久| 亚洲成人一二三| 成人欧美一区二区三区1314| 精品久久久久久亚洲综合网| 在线看国产日韩| 成人午夜av在线| 亚洲精品高清在线| 久久久久久久综合色一本| 欧美午夜片在线观看| 99精品在线免费| 国产成+人+日韩+欧美+亚洲| 日本中文字幕一区二区有限公司| 1024国产精品| 国产精品午夜电影| 久久人人97超碰com| 日韩午夜三级在线| 欧美电影在线免费观看| 91网站在线观看视频| 国产91色综合久久免费分享| 奇米影视在线99精品| 婷婷六月综合网| 夜夜夜精品看看| 亚洲精品一二三| 成人免费在线视频观看| 国产精品福利一区| 日本一区二区三区国色天香| 亚洲精品一区二区三区99| 日韩美一区二区三区| 日韩精品一区二区三区中文精品| 欧美日本一区二区三区四区| 欧美日韩一级大片网址| 欧美三级资源在线| 欧美另类变人与禽xxxxx| 欧美午夜寂寞影院| 91精品久久久久久久99蜜桃| 午夜精品免费在线| 久久免费国产精品| 久久无码av三级| 国产日韩欧美激情| 91久久一区二区| 国内精品在线播放| 成人爱爱电影网址| 久久精品国产精品亚洲红杏| 亚洲一二三区不卡| 亚洲日本乱码在线观看| 26uuu欧美| 日韩精品专区在线影院重磅| 欧美精品自拍偷拍| 欧美在线高清视频| 欧美日韩www| 久久精品一区二区三区av| 国产亚洲视频系列| 91麻豆国产自产在线观看| 91浏览器打开| 精品视频全国免费看| 日韩欧美一级在线播放| 久久精品人人爽人人爽| 亚洲天堂成人在线观看| 偷拍日韩校园综合在线| 国产在线精品一区二区不卡了| 成人免费视频视频在线观看免费| 91在线云播放| 91精品国产一区二区三区蜜臀| 亚洲一区欧美一区| 蜜桃视频一区二区三区| 国产一区二区伦理| 色国产精品一区在线观看| 日韩精品一区二区三区在线| 中文字幕国产精品一区二区| 一区二区三区中文免费| 老司机精品视频在线| 色综合久久综合| 精品久久人人做人人爰| 欧美激情中文不卡| 亚欧色一区w666天堂| 处破女av一区二区| 日韩欧美国产小视频| 国产精品传媒入口麻豆| 麻豆91精品视频| 在线观看一区二区视频| 中文字幕精品一区二区精品绿巨人 | 国产精品一二三四| 欧美日免费三级在线| 国产精品美女久久久久久久 | 国产精品久久免费看| 日本人妖一区二区| 日本久久一区二区| 国产精品久久久久一区二区三区| 日韩 欧美一区二区三区| 色哟哟欧美精品| 国产亚洲精品资源在线26u| 午夜精品久久久久久久久久久| 成人午夜在线播放| 久久亚洲一区二区三区四区| 亚洲3atv精品一区二区三区| 99精品一区二区| 国产日韩欧美在线一区| 久久国产精品免费| 欧美一区二区三区免费观看视频 | 国产在线精品免费| 8x福利精品第一导航| 亚洲精品免费在线| 欧美天天综合网| 亚洲图片你懂的| 国产精品国产三级国产普通话99| 久久久99久久| 97aⅴ精品视频一二三区| 一区二区三区四区蜜桃 | 精品精品欲导航| 天天综合网 天天综合色| 26uuu成人网一区二区三区| 极品尤物av久久免费看| 国产日韩欧美精品在线| 成人性视频免费网站| 日韩精品免费专区| 国产一区二区0| 日韩欧美国产不卡| 日本女优在线视频一区二区| 91精品国产高清一区二区三区 |