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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? doc_api.c

?? DiskOnChip for 8051 MCU 的 API 源代碼和文檔
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*
* 文件名稱(chēng):DOC_API.C
* 內(nèi)容摘要:在 51 MCU 上對(duì) DOC 進(jìn)行讀、寫(xiě)、擦除操作的 API 的實(shí)現(xiàn)
* 
* 當(dāng)前版本:1.0
* 作    者:莊渭峰
* 完成日期:2003年2月6日
*
* 原 作 者:M-Systems 公司
* 版    本:BDK 1.25
*/

#include "doc_api.h"
#include "doc_def.h"
#include <string.h>

#ifdef EDC_MODE
#include "doc_ecc.h"
#endif /* EDC_MODE */

/*-------------------------------------------------------------------
 * Memory access functions
 *-------------------------------------------------------------------*/
#define docWrite8bitReg(offset,data)  (*((volatile byte *)docWin + offset)) = ((byte)(data))
#define docRead8bitReg(offset)        (byte)(*((volatile byte *)docWin + offset))

/*---------------------------------------------------------------------
 * Function prototypes
 *---------------------------------------------------------------------*/
static void      command     (byte code1);
static void      setAddress  (dword address);
static FLStatus  waitForReady(void);
static byte      readStatus  (void);
static void      selectDev   (byte dev);
static void      selectFloor (byte floor);
static void      readFlash   (byte *buf, word len);
static void      writeSignals(byte val);
static byte      busy        (void);
static void      setAsicMode (byte mode);
#ifdef EDC_MODE
static void      readSyndrom (byte *buf, word len);
       void      eccOFF(void);
static void      eccONread(void);
static byte      eccError(void);
#endif /* EDC_MODE */

static void      writeFlash(byte *buf, word len);
static FLStatus  writeExecute(void);
static void      writeCommand(enum PointerOp cmd, dword addr);
#ifdef EDC_MODE
static void      eccONwrite(void);
byte zeroes3[3] = { 0x00, 0x00, 0x00 };
byte syndromEDC[SYNDROM_BYTES];
#endif /* EDC_MODE */

/*---------------------------------------------------------------------
 * Global data, first initialization is in readFlashId function.
 *---------------------------------------------------------------------*/
byte     *docWin;            /* pointer to DOC 2000 memory window */
word     Nio;                /* pointer to DOC / MDOC IO window   */
word     ECCstatus;          /* pointer to ECC status Reg */
DOCInfo  docInfo;

void pause( void )
{
    byte i;
    for ( i = 0; i < 1; i++ );
}

#ifndef DOC_IS_FIXED
/*--------------------------------------------------------------------
 * readFlashID - Select chip number given by 'dev', reset it
 * and read vendor and chip ID.
 *--------------------------------------------------------------------*/
FLStatus readFlashID( byte floor, byte dev )
{
    byte         vendorId, chipId;
    static byte  firstChipId;
    int          i;

    setAsicMode(ASIC_NORMAL_MODE);

    /* select docWin_io according to ASIC type */
    if( docInfo.flags & MDOC_ASIC )
    {
        Nio = Nio_MDOC;
        ECCstatus = NECCstatus_MDOC;
    }
    else
    {
        Nio = Nio_DOC;
        ECCstatus = NECCstatus_DOC;
    }

    /* select 'dev' flash device and reset it */
    selectDev(dev);
    command(RESET_FLASH);

    if( waitForReady() != flOK )
    {
        return(flDOCNotReady);
    }

    /* send READ_ID command accompanied by 1-byte address */
    command(READ_ID);
    writeSignals(FLASH_IO | ALE | CE | WP);
    docWrite8bitReg(Nio,0);
    if( docInfo.flags & MDOC_ASIC )
    {
        docWrite8bitReg(NWritePipeTerm,0);
    }
    writeSignals(FLASH_IO |       CE | WP);

    /* read vendor ID  */
    pause( );                        /* wait for 1 ms */
    docRead8bitReg(NslowIO);         /* read CDSN_slow_IO ignoring the data */
    for(i=0;( i < 2 ); i++)          /* perform 2 reads from CDSN_control   */
    {
        docRead8bitReg(NNop);        /* to create delay               */
    }

    vendorId = docRead8bitReg(Nio);  /* finally read vendor ID */

    /* read chip ID */
    pause( );                        /* wait for 1 ms */
    docRead8bitReg(NslowIO);         /* read CDSN_slow_IO ignoring the data */
    for(i=0;( i < 2 ); i++)          /* perform 2 reads from CDSN_control   */
    {
        docRead8bitReg(NNop);        /* to create delay               */
    }

    chipId = docRead8bitReg(Nio);    /* finally read chip ID */

    writeSignals(FLASH_IO | WP);

    if( (floor == 0) && (dev == 0) )
    {
        /* set initial parameters */
        docInfo.pageSize          = CHIP_PAGE_SIZE;
        docInfo.erasableBlockSize = PAGES_PER_BLOCK * CHIP_PAGE_SIZE;
        docInfo.pagesPerBlock     = PAGES_PER_BLOCK;
        docInfo.chipSize          = CHIP_SIZE;  /* 2 MByte */
        docInfo.noOfBlocks        = BLOCKS_PER_FLASH;

        firstChipId = chipId;
        /* set flash parameters */
        switch( vendorId )
        {
            case 0x98:                                   /* Toshiba */
            case 0x01:                                   /* AMD */
            case 0x04:                                   /* Fujitsu */
                docInfo.flags            |= FULL_PAGE;
                /* no break here */
            case 0xEC:                                   /* Samsung */
                switch( chipId )
                {
                    case 0x64:                              /* 2 Mb */
                    case 0xEA:
                        docInfo.pageSize          = CHIP_PAGE_SIZE;  /* 0x100; */
                        docInfo.erasableBlockSize = PAGES_PER_BLOCK * docInfo.pageSize;
                        break;

                    case 0xE6:                              /* 8 Mb */
                        docInfo.chipSize         *= 2;
                        docInfo.noOfBlocks       *= 2;               /* 1024 */
                        /* no break here */
                    case 0xE3:                              /* 4 Mb */
                    case 0xE5:
                    case 0x6B:
                        docInfo.pageSize          = CHIP_PAGE_SIZE * 2; /* 0x200; */
                        docInfo.erasableBlockSize = PAGES_PER_BLOCK * docInfo.pageSize;
                        docInfo.flags            |= BIG_PAGE;
                        docInfo.chipSize         *= 2;
                        break;

                    case 0x76:                              /* 64 Mb */
                        docInfo.flags            |= BIG_ADDR;
                        docInfo.noOfBlocks       *= 2;               /* 4096 */
                        docInfo.chipSize         *= 2;
                        /* no break here */
                    case 0x75:                              /* 32 Mb */
                        docInfo.chipSize         *= 2;
                        docInfo.noOfBlocks       *= 2;               /* 2048 */
                        /* no break here */
                    case 0x73:                              /* 16 Mb */
                        docInfo.pageSize          = CHIP_PAGE_SIZE * 2; /* 0x200; */
                        docInfo.erasableBlockSize = PAGES_PER_BLOCK * docInfo.pageSize * 2;
                        docInfo.flags            |= BIG_PAGE;
                        docInfo.chipSize         *= 8;
                        docInfo.noOfBlocks       *= 2;               /* 1024 */
                        docInfo.pagesPerBlock    *= 2;               /* 32 */
                        break;

                    default:
                        return( flUnknownMedia );
                }
                break;

            default:
                return( flUnknownMedia );
        }
    }
    else
    {
        if( chipId != firstChipId )
        {
            return( flUnknownMedia );
        }
    }
    return( flOK );
}
#endif /* DOC_IS_FIXED */

/*-------------------------------------------------------------------
 * command - Latch a command.
 *-------------------------------------------------------------------*/
static void command( byte code1 )
{
    writeSignals(FLASH_IO | CLE | CE);
    docWrite8bitReg(Nio,code1);
    if( docInfo.flags & MDOC_ASIC )
    {
        docWrite8bitReg(NWritePipeTerm,code1);
    }
    writeSignals(FLASH_IO       | CE);
}

/*-------------------------------------------------------------------
 * setAddress - Latch an address.
 *-------------------------------------------------------------------*/
static void setAddress( dword address )
{
    address &= (docInfo.chipSize - 1);    /* address within flash device */
    if ( docInfo.flags & BIG_PAGE )
    {
        /*
           bits  0..7     unchanged
           bit      8     discarded
           bits 31..9 ->  bits 30..8
        */
        address = ((address >> 9) << 8) | ((byte)address);
    }

    writeSignals(FLASH_IO | ALE | CE);

    docWrite8bitReg(Nio,(byte)(address));
    docWrite8bitReg(Nio,(byte)(address >> 8));
    docWrite8bitReg(Nio,(byte)(address >> 16));
    if( docInfo.flags & BIG_ADDR )
    {
        docWrite8bitReg(Nio,(byte)(address >> 24));
    }
    if( docInfo.flags & MDOC_ASIC )
    {
        docWrite8bitReg(NWritePipeTerm,0);
    }

    writeSignals(FLASH_IO | ECC_IO | CE);
}

/*-------------------------------------------------------------------
 * writeSignals - write to CDSN_control_reg
 *-------------------------------------------------------------------*/
static void writeSignals( byte val )
{
    int i;

    docWrite8bitReg(Nsignals,val);
    /* after writing to CDSN_control perform 2 reads from there */
    for(i=0;( i < 2 );i++)
    {
        docRead8bitReg(NNop);
    }
}

/*-------------------------------------------------------------------
 * waitForReady - Returns FALSE on timeout error, otherwise TRUE.
 *-------------------------------------------------------------------*/
static FLStatus waitForReady( void )
{
    int i;

    for(i=0;( i < BUSY_DELAY );i++)
    {
        if( busy() )
        {
            continue;
        }
        return( flOK );                    /* ready at last */
    }
    return( flDOCNotReady );               /* timeout error */
}

/*-------------------------------------------------------------------
 * busy - Returns zero if the selected flash device is Ready.
 *-------------------------------------------------------------------*/
static byte busy( void )
{
    int i;
    byte stat;

    /* before polling for BUSY status perform 4 read operations from CDSN_control_reg */
    for(i = 0;( i < 4 ); i++ )
    {
        docRead8bitReg(NNop);
    }

    /* read BUSY status */
    stat = docRead8bitReg(Nsignals);

    /* after BUSY status is obtained perform 2 read operations from CDSN_control_reg */
    for(i = 0;( i < 2 ); i++ )
    {
        docRead8bitReg(NNop);
    }

    return( !(stat & RB) );
}

/*-------------------------------------------------------------------
 * mapWin - Map address to appropriate flash
 *-------------------------------------------------------------------*/
static void mapWin( dword address )
{
    selectFloor((byte)(address / docInfo.floorSize));
    selectDev((byte)((address % docInfo.floorSize) / docInfo.chipSize));
}

/*-------------------------------------------------------------------
 * selectDev - Select a flash device with in the floor
 *-------------------------------------------------------------------*/
static void selectDev( byte dev )
{
    docWrite8bitReg(NdeviceSelector,dev);
}

/*-------------------------------------------------------------------
 * selectFloor - Select a flash device floor
 *-------------------------------------------------------------------*/
static void selectFloor( byte floor )
{
    docWrite8bitReg(NASICselect,floor);
}

/*-------------------------------------------------------------------
 * setAsicMode - Set the ASIC mode.
 *-------------------------------------------------------------------*/
static void setAsicMode( byte mode )
{
    docWrite8bitReg(NDOCcontrol,mode);
    docWrite8bitReg(NDOCcontrol,mode);
    pause( );
}

/*
* 函數(shù)名稱(chēng): DOC_ReadOnePage
* 功能描述: 讀 DOC 的一頁(yè)
* 輸入?yún)?shù): pageNum: 頁(yè)號(hào)(有效范圍:[0, docInfo.noOfPages-1])
*           buf:     存放從 DOC 讀出的數(shù)據(jù)的緩沖區(qū)的首地址
*           len:     數(shù)據(jù)長(zhǎng)度(應(yīng)不大于頁(yè)長(zhǎng)度即 512 字節(jié),若大于 512 則只有前 512 個(gè)字節(jié)從 DOC 讀出)
*           modes:   模式標(biāo)志,當(dāng)未定義 EDC_MODE 時(shí)可取 0;當(dāng)定義 EDC_MODE 時(shí),可取 EDC_FLAG 或 0
* 輸出參數(shù): 無(wú)
* 返 回 值: flOK          — 成功,無(wú)錯(cuò)誤
*           flOutOfMedia  — 頁(yè)號(hào)超出 DOC 容量范圍
*           flDOCNotReady — DOC 未準(zhǔn)備好

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片网站| 亚洲欧美国产高清| 欧美精品在欧美一区二区少妇| 91色视频在线| 中文字幕一区二区三区在线观看| 欧美精品一区男女天堂| 精品久久久久香蕉网| www国产精品av| 久久久久久一级片| 91在线码无精品| 中文在线一区二区| 国产亚洲精品7777| 中日韩免费视频中文字幕| 国产欧美一区二区三区网站| 欧美激情一区二区三区不卡| 国产精品久久一级| 亚洲精品日韩一| 一区二区三区日韩精品视频| 亚洲高清免费视频| 人妖欧美一区二区| 国产资源在线一区| 国产盗摄一区二区三区| 99视频超级精品| 在线视频你懂得一区二区三区| 欧美中文字幕一二三区视频| 欧美一区二区精品久久911| 欧美电影免费观看高清完整版 | 成人免费在线视频观看| 樱花影视一区二区| 日韩—二三区免费观看av| 久久99最新地址| 国产成人精品1024| 色婷婷综合久色| 91精品视频网| 国产欧美一区二区在线| 欧美精品一区二区三区很污很色的| 精品电影一区二区三区| 国产精品国产三级国产aⅴ中文| 亚洲激情男女视频| 麻豆91在线播放免费| 成人精品在线视频观看| 欧美色倩网站大全免费| 精品成人免费观看| 18欧美亚洲精品| 青草av.久久免费一区| 成人免费毛片app| 欧美另类久久久品| 欧美国产精品一区二区三区| 亚洲一区在线观看视频| 国产一二三精品| 精品视频一区二区不卡| 国产亚洲va综合人人澡精品| 亚洲bt欧美bt精品777| 国产精品一二三四区| 欧美日精品一区视频| 久久久精品日韩欧美| 亚洲国产精品尤物yw在线观看| 国产福利精品导航| 91精品国产综合久久久久| 国产精品国产三级国产普通话蜜臀| 婷婷一区二区三区| av动漫一区二区| 欧美成人精品1314www| 色先锋aa成人| 日韩一区二区电影网| 中文字幕在线观看不卡| 老司机精品视频线观看86| 色综合久久久久综合体桃花网| 亚洲va中文字幕| 不卡大黄网站免费看| 日韩精品一区二区三区视频播放 | 亚洲欧美电影院| 国产精品综合二区| 欧美一区永久视频免费观看| 亚洲欧美日韩国产成人精品影院| 国产一区二区毛片| 欧美一级二级三级蜜桃| 亚洲女人****多毛耸耸8| 国产sm精品调教视频网站| 欧美大白屁股肥臀xxxxxx| 亚洲高清免费视频| 日本精品视频一区二区三区| 国产欧美日韩不卡免费| 国产制服丝袜一区| 欧美成人激情免费网| 日本aⅴ免费视频一区二区三区| 91久久精品日日躁夜夜躁欧美| 中文字幕精品综合| 国产91色综合久久免费分享| 精品人伦一区二区色婷婷| 青青国产91久久久久久| 欧美精品久久99| 天堂av在线一区| 欧美日韩黄视频| 亚洲成va人在线观看| 在线看国产一区| 亚洲一区二区在线免费看| 色婷婷国产精品| 一区二区三区四区中文字幕| 91香蕉视频黄| 亚洲乱码国产乱码精品精的特点 | 国产精品自拍在线| 亚洲精品在线三区| 精品一区二区在线看| 精品国产乱码久久久久久闺蜜 | 91精选在线观看| 婷婷开心激情综合| 在线不卡a资源高清| 日本视频在线一区| 精品日韩在线观看| 久久97超碰色| 久久这里都是精品| 风间由美性色一区二区三区| 国产精品剧情在线亚洲| 91在线观看免费视频| 亚洲精品老司机| 欧美日韩一级片在线观看| 日韩影院免费视频| 久久综合av免费| www.爱久久.com| 亚洲午夜久久久久久久久电影网| 一区二区三区在线免费观看| 日产国产高清一区二区三区 | 亚洲色图欧洲色图| 91成人免费在线| 日韩中文字幕av电影| 精品久久一区二区三区| 国产成人免费视频网站 | 亚洲午夜精品在线| 91麻豆精品国产| 国产一区二区三区在线看麻豆| 中文字幕乱码日本亚洲一区二区| 99久久亚洲一区二区三区青草| 亚洲国产一二三| 日韩欧美色综合| 丰满白嫩尤物一区二区| 一区二区三区在线免费视频| 欧美一个色资源| 国产精品一区二区久激情瑜伽| 日韩伦理免费电影| 91麻豆精品国产自产在线| 国产精品香蕉一区二区三区| 亚洲久草在线视频| 欧美一级理论片| 99久久99精品久久久久久| 日韩精品午夜视频| 国产视频一区在线播放| 欧美怡红院视频| 国产在线精品国自产拍免费| 亚洲精品视频一区二区| 日韩精品免费专区| 日韩欧美国产不卡| av亚洲精华国产精华精华| 在线电影院国产精品| 国产激情91久久精品导航 | 日韩高清一区二区| 国产精品久久久久久久久晋中| 欧美精品乱码久久久久久| 成人一级片网址| 免费精品视频最新在线| 亚洲美女偷拍久久| 久久亚洲捆绑美女| 欧美日韩国产小视频| 成人免费黄色大片| 欧美a级一区二区| 亚洲激情av在线| 日本一区二区三区视频视频| 日韩欧美一区二区久久婷婷| 精品国产一区久久| 91无套直看片红桃| 极品瑜伽女神91| 亚洲午夜久久久久久久久电影院| 国产亚洲精品aa午夜观看| 制服丝袜成人动漫| 91黄视频在线| 国产情人综合久久777777| 欧美三级视频在线播放| 成年人国产精品| 国产亚洲精品福利| 91精品免费观看| 99精品热视频| 国产精华液一区二区三区| 免费观看成人av| 婷婷丁香激情综合| 亚洲一区二区五区| 亚洲欧美激情在线| 国产精品久久久久一区| 久久亚洲精精品中文字幕早川悠里| 欧美欧美欧美欧美首页| 在线观看日韩电影| 色婷婷综合中文久久一本| 99精品在线观看视频| 风间由美一区二区三区在线观看 | 综合电影一区二区三区| 国产情人综合久久777777| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩国产一级片| 欧美三级日韩三级国产三级| 91麻豆免费视频| 色哟哟欧美精品|