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

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

?? fmd.cpp

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅動,串口驅動3個
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include <fmd.h>
#include <s3c2410x_nand.h>
#include "nand.h"
#include <ethdbg.h>

#define NAND_BASE 0xB0E00000

static volatile S3C2410X_NAND_REG *s2410NAND = (S3C2410X_NAND_REG *)NAND_BASE;

extern "C" void RdPage512(unsigned char *bufPt);
extern "C" void RdPage512Unalign(unsigned char *bufPt);
extern "C" void WrPage512(unsigned char *bufPt); 
extern "C" void WrPage512Unalign(unsigned char *bufPt); 
extern "C" void WrPageInfo(PBYTE pBuff);
extern "C" void RdPageInfo(PBYTE pBuff);

/*
    @func   DWORD | ReadFlashID | Reads the flash manufacturer and device codes.
    @rdesc  Manufacturer and device codes.
    @comm    
    @xref   
*/
static DWORD ReadFlashID(void)
{
    BYTE Mfg, Dev;

    NF_CMD(CMD_READID);        // Send flash ID read command.
    NF_ADDR(0);                //
    NF_WAITRB();            // Wait for flash to complete command.
    Mfg    = NF_RDDATA();    // 
    Dev    = NF_RDDATA();    // 

    //RETAILMSG(1,(TEXT("FMD: ReadID (Mfg=%x, Dev=%x)\r\n"), Mfg, Dev));

    return ((DWORD)Mfg*0x100+Dev);
}

/*
    @func   PVOID | FMD_Init | Initializes the Smart Media NAND flash controller.
    @rdesc  Pointer to S3C2410 NAND controller registers.
    @comm    
    @xref   
*/
PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)
{

    // Caller should have specified NAND controller address.
    //

    BOOL bLastMode = SetKMode(TRUE);

    if (pRegIn && pRegIn->MemBase.Num && pRegIn->MemBase.Reg[0])
        s2410NAND = (S3C2410X_NAND_REG *)(pRegIn->MemBase.Reg[0]);
    else
        s2410NAND = (S3C2410X_NAND_REG *)NAND_BASE;


    // Set up initial flash controller configuration.
    //
    s2410NAND->NFCONF =  (1      << 15) | /* Enable/Disable                    */ 
                          (1      << 14) | /* Page Size : 512Bytes              */
                          (1      << 13) | /* 4 Step Address                    */
                          (1      << 12) | /* Initialize ECC                    */
                          (1      << 11) | /* nFCE control nFCE = HIGH          */
                          (TACLS  <<  8) | /* CLE & ALE = HCLK * (TACLS  + 1)   */
                          (TWRPH0 <<  4) | /* TWRPH0    = HCLK * (TWRPH0 + 1)   */
                          (TWRPH1 <<  0);  /* TWRPH1    = HCLK * (TWRPH1 + 1)   */

    NF_nFCE_L();            // Select the flash chip.
    NF_CMD(CMD_RESET);        // Send reset command.
    NF_WAITRB();            // Wait for flash to complete command.
    // Get manufacturer and device codes.
    if (ReadFlashID() != 0xEC76)
    {
        SetKMode (bLastMode);
        return(NULL);
    }
    NF_nFCE_H();            // Deselect the flash chip.

    SetKMode (bLastMode);
    return((PVOID)s2410NAND);
}


/*
    @func   BOOL | FMD_ReadSector | Reads the specified sector(s) from NAND flash.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
    ULONG SectorAddr = (ULONG)startSectorAddr;

    BOOL bLastMode = SetKMode(TRUE);

    NF_RSTECC();                            // Initialize ECC.
    NF_nFCE_L();                            // Select the flash chip.
    NF_CMD(CMD_RESET);                        // Send reset command.
    
    while (dwNumSectors--)
    {
        ULONG blockPage = (((SectorAddr / NAND_PAGE_CNT) * NAND_PAGE_CNT) | (SectorAddr % NAND_PAGE_CNT));

        NF_WAITRB();                            // Wait for flash to complete command.

        if (pSectorBuff)
        {
            NF_CMD(CMD_READ);                    // Send read command.
            NF_ADDR(0);                            // Column = 0.
            NF_ADDR(blockPage         & 0xff);    // Page address.
            NF_ADDR((blockPage >>  8) & 0xff);
            NF_ADDR((blockPage >> 16) & 0xff);  
            NF_WAITRB();                        // Wait for command to complete.

            //  Handle unaligned buffer pointer
            if( ((DWORD) pSectorBuff) & 0x3) 
            {
                RdPage512Unalign (pSectorBuff);
            }
            else 
            {
                RdPage512(pSectorBuff);                // Read page/sector data.
            }
            
            NF_RDDATA();                        // Read/clear status.
            NF_RDDATA();                        //
        }

        if (pSectorInfoBuff)
        {
            NF_CMD(CMD_READ2);                    // Send read confirm command.
            NF_ADDR(0);                            // Column = 0.
            NF_ADDR(blockPage         & 0xff);    // Page address.
            NF_ADDR((blockPage >>  8) & 0xff);
            NF_ADDR((blockPage >> 16) & 0xff);  
            NF_WAITRB();                        // Wait for command to complete.

            RdPageInfo((PBYTE)pSectorInfoBuff);    // Read page/sector information.

            NF_RDDATA();                        // Read/clear status.
            NF_RDDATA();                        //

            pSectorInfoBuff++;
        }

        ++SectorAddr;
        pSectorBuff += NAND_PAGE_SIZE;
    }

    NF_nFCE_H();                             // Deselect the flash chip.

    SetKMode (bLastMode);
    return(TRUE);
}


/*
    @func   BOOL | FMD_EraseBlock | Erases the specified flash block.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_EraseBlock(BLOCK_ID blockID)
{
    BYTE Status;
    ULONG blockPage = (blockID * NAND_PAGE_CNT);    // Convert block address to page address.

    BOOL bLastMode = SetKMode(TRUE);

    NF_nFCE_L();                        // Select the flash chip.
    NF_CMD(CMD_ERASE);                    // Send block erase command.
    NF_ADDR(blockPage         & 0xff);    /* The mark of bad block is in 0 page   */
    NF_ADDR((blockPage >>  8) & 0xff);  /* For block number A[24:17]            */
    NF_ADDR((blockPage >> 16) & 0xff);  /* For block number A[25]               */
    NF_CMD(CMD_ERASE2);                    // Send block erase confirm command.
    NF_WAITRB();                        // Wait for flash to complete command.
    
    Status = NF_RDDATA();                // Read command status.
    NF_nFCE_H();                        // Deselect the flash chip.

    SetKMode (bLastMode);
    return((Status & 1) ? FALSE : TRUE);
}


/*
    @func   BOOL | FMD_WriteSector | Writes the specified data to the specified NAND flash sector/page.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
    BYTE Status;
    ULONG SectorAddr = (ULONG)startSectorAddr;

    BOOL bLastMode = SetKMode(TRUE);

    if (!pSectorBuff && !pSectorInfoBuff)
        return(FALSE);

    NF_RSTECC();                            // Initialize ECC.
    NF_nFCE_L();                             // Select the flash chip.

    while (dwNumSectors--)
    {
        ULONG blockPage = (((SectorAddr / NAND_PAGE_CNT) * NAND_PAGE_CNT) | (SectorAddr % NAND_PAGE_CNT));

        if (!pSectorBuff)
        {
            // If we are asked just to write the SectorInfo, we will do that separately
            NF_CMD(CMD_READ2);                     // Send read command.
            NF_CMD(CMD_WRITE);                    // Send write command.
            NF_ADDR(0);                            // Column = 0.
            NF_ADDR(blockPage         & 0xff);    // Page address.
            NF_ADDR((blockPage >>  8) & 0xff);
            NF_ADDR((blockPage >> 16) & 0xff);  
            WrPageInfo((PBYTE)pSectorInfoBuff);
            pSectorInfoBuff++;
        }
        else 
        {
            NF_CMD(CMD_READ);                     // Send read command.
            NF_CMD(CMD_WRITE);                    // Send write command.
            NF_ADDR(0);                            // Column = 0.
            NF_ADDR(blockPage         & 0xff);    // Page address.
            NF_ADDR((blockPage >>  8) & 0xff);
            NF_ADDR((blockPage >> 16) & 0xff);  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www..com久久爱| 在线视频国产一区| 成人高清视频在线观看| 欧美日韩中文国产| 欧美国产一区二区| 免费成人av在线| 色8久久人人97超碰香蕉987| 久久综合久久鬼色中文字| 亚洲综合在线五月| 高清在线不卡av| 精品久久久久久久一区二区蜜臀| 亚洲一二三四区不卡| 国产成人午夜片在线观看高清观看| 91超碰这里只有精品国产| 亚洲欧美日韩系列| 丁香婷婷综合网| 国产亚洲美州欧州综合国 | 欧美日韩欧美一区二区| 欧美国产精品一区| 国产传媒久久文化传媒| 精品久久久久香蕉网| 免费在线观看不卡| 欧美精品三级日韩久久| 亚洲男同性视频| 色女孩综合影院| 亚洲色图制服丝袜| av资源站一区| ...xxx性欧美| 色综合久久综合网欧美综合网 | 成人久久视频在线观看| 久久亚洲二区三区| 国产裸体歌舞团一区二区| 精品国产欧美一区二区| 久久99在线观看| 久久免费视频色| 国产精品88av| 国产欧美一区二区三区网站 | 中文字幕国产一区| 国产成人在线电影| 2017欧美狠狠色| 国产精品影音先锋| 亚洲国产高清不卡| 成人一区二区三区| 亚洲特黄一级片| 在线观看一区不卡| 亚洲自拍偷拍图区| 7777精品久久久大香线蕉| 免费精品视频最新在线| 精品成人私密视频| 大美女一区二区三区| 亚洲欧洲美洲综合色网| 91黄色小视频| 蜜桃精品视频在线| 久久久久99精品一区| 成人在线综合网站| 亚洲精品成人悠悠色影视| 欧美亚洲丝袜传媒另类| 日韩av一区二区在线影视| 精品久久免费看| 不卡高清视频专区| 一区二区视频在线| 69久久夜色精品国产69蝌蚪网| 久久99精品国产.久久久久久| 欧美国产精品久久| 91网站视频在线观看| 五月天亚洲婷婷| 中文字幕不卡在线播放| 欧洲av在线精品| 国产精品亚洲一区二区三区妖精| 中文字幕久久午夜不卡| 欧美精品一二三四| 国产成人在线视频免费播放| 亚洲成人激情综合网| 久久久蜜臀国产一区二区| 一本久久精品一区二区| 捆绑紧缚一区二区三区视频| 中文字幕在线一区| 欧美一区二区三区四区高清| 暴力调教一区二区三区| 免费国产亚洲视频| 一区二区视频在线| 国产婷婷一区二区| 欧美喷潮久久久xxxxx| 成人免费黄色在线| 蜜桃视频第一区免费观看| 亚洲人成在线播放网站岛国| 欧美成人性战久久| 欧洲一区二区三区免费视频| 国产98色在线|日韩| 免费看日韩精品| 一区二区三区.www| 国产精品亲子乱子伦xxxx裸| 精品久久久久久亚洲综合网 | 久久久国产午夜精品| 欧美伊人久久久久久久久影院| 国产成人在线视频网址| 麻豆一区二区99久久久久| 亚洲成人av电影在线| 日韩一区中文字幕| 久久色在线观看| 精品乱人伦一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 欧洲激情一区二区| 91美女片黄在线观看| 成人黄动漫网站免费app| 国产一区 二区| 国产综合色在线| 国产一区二区在线看| 久久国产人妖系列| 麻豆视频一区二区| 麻豆免费精品视频| 久久精品国产亚洲一区二区三区| 日韩国产成人精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产一区二区三区蝌蚪| 亚洲国产欧美在线人成| 一区二区三区在线观看视频| 亚洲视频你懂的| 日韩一区欧美小说| 亚洲黄色免费网站| 夜色激情一区二区| 亚洲一区二区三区四区五区中文| 亚洲一区二区三区四区在线观看 | 在线观看三级视频欧美| 色综合久久88色综合天天6| 国产99精品国产| 99久久99久久久精品齐齐 | 国产一区二区三区四区五区入口| 韩国av一区二区三区在线观看| 精品一区二区三区免费视频| 国产成人精品综合在线观看| 不卡一区在线观看| 99精品久久只有精品| 色婷婷综合久久久久中文一区二区| 91社区在线播放| 欧美亚洲日本一区| 日韩精品一区二区三区视频| 国产日韩精品一区二区三区在线| 日韩一区欧美一区| 亚洲午夜激情网页| 日韩国产欧美在线播放| 国产最新精品精品你懂的| 99久久精品免费观看| 欧美女孩性生活视频| 久久综合资源网| 亚洲欧洲综合另类在线| 日韩精品五月天| 国产**成人网毛片九色| 欧美日韩小视频| 久久奇米777| 一区二区三区欧美久久| 蜜臀av性久久久久蜜臀av麻豆| 99视频精品全部免费在线| 欧美乱妇15p| 中文字幕在线观看不卡| 亚洲成人av在线电影| 成人免费毛片片v| 日韩丝袜美女视频| 国产精品久久久久久户外露出| 天使萌一区二区三区免费观看| 国产精品1024| 91麻豆精品国产91久久久更新时间| 中文字幕第一区二区| 免费欧美日韩国产三级电影| 色偷偷88欧美精品久久久| 26uuu精品一区二区三区四区在线| 亚洲乱码精品一二三四区日韩在线| 久久精品国产成人一区二区三区 | 国产视频一区二区三区在线观看 | 亚洲三级视频在线观看| 蜜桃av噜噜一区| 在线欧美小视频| 中文字幕av不卡| 国产美女主播视频一区| 欧美嫩在线观看| 一区二区三区在线高清| 国产99久久久国产精品潘金| 欧美一级一区二区| 亚洲精品videosex极品| 国产盗摄视频一区二区三区| 欧美xxx久久| 日韩高清欧美激情| 欧美日韩国产精品成人| 亚洲黄色在线视频| 93久久精品日日躁夜夜躁欧美| 国产女人aaa级久久久级| 国产在线观看免费一区| 日韩视频123| 免费在线观看不卡| 日韩一区二区麻豆国产| 丝袜诱惑制服诱惑色一区在线观看| 在线免费观看日本欧美| 亚洲三级在线免费观看| 不卡区在线中文字幕| 国产精品嫩草影院av蜜臀| 国产综合成人久久大片91| 日韩女优av电影| 韩国女主播成人在线| 国产无遮挡一区二区三区毛片日本| 九九九久久久精品|