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

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

?? norflsh.c

?? Cirrus Logic EP7312處理器部分控制程序。
?? C
字號(hào):
//****************************************************************************
//
// NORFLSH.C - Routines for erasing and programing the Intel 28F128J3 FLASH
//             memory.
//
// Copyright (c) 2001 Cirrus Logic, Inc.
//
//****************************************************************************
#include "ep7312.h"
#include "lib7312.h"

//****************************************************************************
//
// FlashNumSectors returns the number of sectors in the FLASH memory.
//
//****************************************************************************
long
FlashNumSectors(void)
{
    //
    // The Intel 28F128J3A has 32 sectors.
    //
    return(32);
}

//****************************************************************************
//
// FlashSectorInfo returns the starting offset and length of the specified
// sector of the FLASH memory.
//
//****************************************************************************
long
FlashSectorInfo(long lSector, long *plSectorOffset, long *plSectorLength)
{
    //
    // Make sure the sector number is valid.
    //
    if((lSector < 0) || (lSector >= 32))
    {
        return(0);
    }

    //
    // Sectors are 128K in length.
    //
    else
    {
        *plSectorOffset = 0x00020000 * lSector;
        *plSectorLength = 0x00020000;
    }

    //
    // Success.
    //
    return(1);
}

//****************************************************************************
//
// FlashWaitForProgram waits until bit 7 becomes one, indicating that the
// embedded program (be it a chip erase, sector erase, or data store program)
// has completed executing.
//
//****************************************************************************
static void
FlashWaitForProgram(unsigned long ulFlashBase)
{
    unsigned short * volatile pusPtr = (unsigned short *)ulFlashBase;
    unsigned short usTemp;

    //
    // Send the Read status register command
    //
    // *pusPtr = 0x0070;

    //
    // Read from the FLASH memory until bit 7 is one.
    //
    while(1)
    {
        //
        // Read the status register from the FLASH memory.
        //
        usTemp = *pusPtr;

        //
        // Mask off all bits except for bit 7.
        //
        usTemp &= 0x0080;

        //
        // If bit 7 is one, then quit waiting.
        //
        if(usTemp == 0x0080)
        {
            break;
        }
    }

    //
    // Clear the status register.
    //
    *pusPtr = 0x0050;
}

//****************************************************************************
//
// FlashClearLockBits clears the block lock bits.  B3 FLASH devices don't have
// a block lock bit feature, so this function should not be called when
// erasing or programming those devices.  For the C3 FLASH devices, 
// this function has to be called for each locked block.  For the J3 FLASH 
// devices, calling this function once will clear all set block lock bits.  
// For both the C3 and J3 devices block lock bits should be cleared before 
// attempting to erase or program.
//
//****************************************************************************
void
FlashClearLockBits(unsigned long ulFlashBase, long lSector)
{
    unsigned short * volatile pusPtr = (unsigned short *)(ulFlashBase + lSector);

    //
    // Put the FLASH into read array mode.
    //
    *pusPtr = 0x00FF;

    //
    // Clear the Block lock bit before attempting to erase or program C3 or 
    // J3 FLASH devices.  
    // 
    *pusPtr = 0x0060;
    *pusPtr = 0x00D0;
 
    //
    // Wait until the Clear Block lock bit command has completed.
    //
    FlashWaitForProgram(ulFlashBase);

    //
    // Put the FLASH into read array mode.
    //
    *pusPtr = 0x00FF;
}


//****************************************************************************
//
// FlashEraseChip erases the entire FLASH memory.
//
//****************************************************************************
void
FlashEraseChip(unsigned long ulFlashBase)
{
    long lSector, lSectorOffset, lSectorLength;

    //
    // Loop through all the sectors on the FLASH memory.
    //
    for(lSector = 0; lSector < FlashNumSectors(); lSector++)
    {
        //
        // Get the offset and length of this sector.
        //
        FlashSectorInfo(lSector, &lSectorOffset, &lSectorLength);

        //
        // Erase this sector.
        //
        FlashEraseSector(ulFlashBase, lSectorOffset);
    }
}

//****************************************************************************
//
// FlashEraseSector erases a specific sector of the FLASH memory.
//
//****************************************************************************
void
FlashEraseSector(unsigned long ulFlashBase, long lSector)
{
    unsigned short * volatile pusPtr = (unsigned short *)(ulFlashBase + lSector);
    unsigned short * volatile pusPtrBase = (unsigned short *)ulFlashBase;

    //
    // Make sure the specified sector is within the range of the FLASH memory.
    //
    if((lSector < 0) || (lSector >= 0x00800000))
    {
        return;
    }

    //
    // Write the erase command to the FLASH memory.
    //
    *pusPtr = 0x0020;
    *pusPtr = 0x00D0;

    //
    // Wait until the sector erase has completed.
    //
    FlashWaitForProgram(ulFlashBase);

    //
    // Put the FLASH into read array mode.
    //
    *pusPtrBase = 0x00FF;
}

//****************************************************************************
//
// FlashProgramBlock writes a block of data into the FLASH memory.
//
//****************************************************************************
void
FlashProgramBlock(unsigned long ulFlashBase, long lOffset,
                  unsigned char *pucData, long lNumBytes)
{
    unsigned short * volatile pusPtr = (unsigned short *)ulFlashBase;
    long lIdx;

    //
    // Make sure the destination is within the range of the FLASH memory.
    //
    if((lOffset < 0) || (lOffset >= 0x00800000) ||
       ((lOffset + lNumBytes) > 0x00800000))
    {
        return;
    }

    //
    // Program the array data, one word at a time.
    //
    for(lIdx = 0; lIdx < lNumBytes; lIdx += 4)
    {
        //
        // Write the program word command.
        //
        *pusPtr = 0x0040;
        *(pusPtr + (unsigned short)(lOffset + lIdx)) = 
                *((unsigned short *)(pucData + lIdx));
        *(pusPtr + (unsigned short)(lOffset + lIdx +2)) = 
                *((unsigned short *)(pucData + lIdx +2));

        //
        // Wait until the data word has been programmed.
        //
        FlashWaitForProgram(ulFlashBase);
    }

    //
    // Put the FLASH into read array mode.
    //
    *pusPtr = 0x00FF;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色av成人天堂桃色av| jlzzjlzz亚洲日本少妇| 亚洲成人手机在线| 亚洲国产一区二区视频| 一区二区不卡在线播放 | 国产精品资源站在线| 琪琪一区二区三区| 久久精品国产网站| 国产真实乱子伦精品视频| 国产成人在线影院| 成人激情图片网| 色8久久精品久久久久久蜜| 在线观看区一区二| 欧美一区二区三区四区视频| 日韩欧美成人一区二区| 国产日韩精品一区二区三区在线| 国产日本欧美一区二区| 亚洲另类春色校园小说| 亚洲成人精品在线观看| 国产最新精品免费| heyzo一本久久综合| 欧美日韩一卡二卡三卡| 2020国产成人综合网| 亚洲欧洲成人精品av97| 亚洲一区二区三区四区在线免费观看 | 国产性色一区二区| 亚洲欧美乱综合| 美女免费视频一区二区| 成人动漫一区二区| 欧美精品高清视频| 国产亚洲短视频| 亚洲在线观看免费| 国产一区二区日韩精品| 色噜噜狠狠色综合中国| 精品国产sm最大网站免费看| 国产精品三级av在线播放| 亚洲国产成人精品视频| 国产宾馆实践打屁股91| 7777女厕盗摄久久久| 日韩理论片网站| 久久精品国产成人一区二区三区| 成人精品电影在线观看| 2023国产一二三区日本精品2022| 国产精品天干天干在线综合| 无码av免费一区二区三区试看 | 色综合视频一区二区三区高清| 9191国产精品| 亚洲人吸女人奶水| 激情综合网最新| 欧美日本一区二区三区| 国产精品动漫网站| 国产一区二区三区综合| 欧美女孩性生活视频| 亚洲精品日韩一| 风间由美一区二区三区在线观看 | 欧美一区二区观看视频| 亚洲三级久久久| 国产suv精品一区二区883| 7777精品伊人久久久大香线蕉的 | 偷拍自拍另类欧美| 色综合色狠狠天天综合色| 国产欧美日韩中文久久| 精品一区二区三区香蕉蜜桃| 欧美喷水一区二区| 一区二区三区成人在线视频| gogogo免费视频观看亚洲一| 国产精品久线在线观看| 国产69精品久久777的优势| 亚洲精品一线二线三线无人区| 日韩高清不卡一区| 欧美一区欧美二区| 日本欧美肥老太交大片| 91精品国产乱码| 青青青爽久久午夜综合久久午夜 | 国产肉丝袜一区二区| 裸体在线国模精品偷拍| 欧美一区二区三区在线看| 午夜婷婷国产麻豆精品| 欧美精品日韩一本| 美女视频网站黄色亚洲| 精品91自产拍在线观看一区| 精品亚洲aⅴ乱码一区二区三区| 日韩你懂的在线播放| 韩国av一区二区三区四区| 久久精品人人做人人综合| 国产91精品免费| 国产日韩精品视频一区| 91亚洲国产成人精品一区二区三 | 欧美日本不卡视频| 日韩精品久久久久久| 久久亚洲一区二区三区明星换脸| 精品亚洲国产成人av制服丝袜| 国产欧美日韩精品在线| 色噜噜狠狠一区二区三区果冻| 亚洲一区中文日韩| 欧美一区二区观看视频| 国产v综合v亚洲欧| 一区二区三区久久久| 91精品在线观看入口| 高清久久久久久| 亚洲精品videosex极品| 日韩视频在线观看一区二区| 国产精品乡下勾搭老头1| 国产精品久久久久四虎| 欧美日韩一区二区三区四区 | av在线不卡免费看| 视频一区欧美精品| 中文一区二区在线观看 | 蜜臀99久久精品久久久久久软件| 欧美一级片免费看| av在线播放一区二区三区| 人人狠狠综合久久亚洲| 亚洲色图制服丝袜| 欧美精品一区二区三区蜜臀| 97久久精品人人做人人爽50路| 婷婷亚洲久悠悠色悠在线播放| 久久色视频免费观看| 欧美性感一区二区三区| 成人av午夜电影| 免费人成在线不卡| 伊人婷婷欧美激情| 国产女主播一区| 欧美成人精品二区三区99精品| 粗大黑人巨茎大战欧美成人| 日韩激情一区二区| 亚洲激情综合网| 中文字幕欧美区| 欧美va天堂va视频va在线| 欧美性生活大片视频| 成人高清视频在线观看| 久久精品av麻豆的观看方式| 亚洲国产精品嫩草影院| 国产精品久久久一本精品| 久久综合999| 日韩欧美国产麻豆| 欧美男男青年gay1069videost | 久久精品人人爽人人爽| 欧美美女喷水视频| 欧美亚洲尤物久久| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 成人小视频免费观看| 久久99精品视频| 免费成人在线影院| 日韩成人免费电影| 亚洲高清久久久| 一区二区三区**美女毛片| 成人免费小视频| 亚洲免费在线观看视频| 亚洲男女一区二区三区| 亚洲男人的天堂在线观看| 亚洲女人****多毛耸耸8| 中文字幕亚洲视频| 亚洲欧美在线另类| 亚洲三级久久久| 亚洲专区一二三| 午夜视频在线观看一区| 性感美女极品91精品| 日韩精品视频网| 久久99精品国产麻豆不卡| 精品亚洲成av人在线观看| 国产麻豆精品视频| 成人综合日日夜夜| 99久久国产综合精品麻豆| av一区二区三区在线| 色哟哟国产精品| 欧美精品久久久久久久多人混战| 538在线一区二区精品国产| 日韩三级视频中文字幕| 精品国产网站在线观看| 国产女主播在线一区二区| 亚洲免费在线播放| 天堂久久一区二区三区| 美国十次综合导航| 国产福利一区二区| 色哟哟国产精品| 日韩欧美激情一区| 亚洲国产精品国自产拍av| 一区二区三区四区不卡在线| 日本在线观看不卡视频| 精品一二三四区| 色诱亚洲精品久久久久久| 欧美放荡的少妇| 国产香蕉久久精品综合网| 樱花草国产18久久久久| 久久国产综合精品| 99国产精品久久久久久久久久久| 欧美亚洲一区二区在线观看| 欧美成人video| 日韩理论片网站| 国产呦精品一区二区三区网站| 99视频在线精品| 欧美成人一区二区三区| 亚洲日本在线看| 精品在线观看视频| 欧美在线综合视频| 国产精品色呦呦| 久久精品99国产精品日本| 在线观看视频一区二区欧美日韩| 精品久久久久久久一区二区蜜臀| 亚洲一区视频在线|