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

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

?? nandflsh.c

?? Cirrus Logic EP7312處理器部分控制程序。
?? C
?? 第 1 頁 / 共 2 頁
字號:
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the read1 command.
    //
    *pulPtr = 0x00;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    *pulPtr = 0x00;
    lIdx = ulPage & 0xFF;
    *pulPtr = lIdx;
    lIdx = (ulPage >> 8) & 0xFF;
    *pulPtr = lIdx;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Wait for a while for the row to copy from the cell array.  The spec.
    // for this delay varies from device to device, so we wait what should be
    // a long enough time for the slowest device.
    //
    for(lIdx = 0; lIdx < 1024; lIdx++)
    {
    }

    //
    // Read the data from this page.
    //
    for(lIdx = 0; lIdx < ulSMPageSize; lIdx++)
    {
        pucBuffer[lIdx] = *pulPtr & 255;
    }

    //
    // Read the spare area if requested.
    //
    if(bReadSpare)
    {
        for(lIdx = 0; lIdx < (ulSMPageSize / 32); lIdx++)
        {
            pucBuffer[ulSMPageSize + lIdx] = *pulPtr & 255;
        }
    }

    //
    // De-select the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

//****************************************************************************
//
// SMEraseBlock erases the specified block of the SmartMedia card.
//
//****************************************************************************
long
SMEraseBlock(unsigned long ulBlock)
{
    unsigned long * volatile pulPtr = (unsigned long *)HwNANDAddress;
    unsigned char * volatile pucPortB = (unsigned char *)(HwBaseAddress +
                                                          HwPortB);
    long lIdx;

    //
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Convert the block number into the page number of the first page of the
    // block.  This is dependent on the number of pages per block.
    //
    switch(ulSMPagesPerBlock)
    {
        case 16:
        {
            ulBlock <<= 4;
            break;
        }

        case 32:
        {
            ulBlock <<= 5;
            break;
        }
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the auto block erase setup command.
    //
    *pulPtr = 0x60;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    lIdx = ulBlock & 0xFF;
    *pulPtr = lIdx;
    lIdx = (ulBlock >> 8) & 0xFF;
    *pulPtr = lIdx;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the erase command.
    //
    *pulPtr = 0xd0;

    //
    // Write the read status command.
    //
    *pulPtr = 0x70;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Wait until the erase has completed.
    //
    while((*pulPtr & 0x40) != 0x40)
    {
        for(lIdx = 0; lIdx < 1024; lIdx++)
        {
        }
    }

    //
    // Deselect the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

//****************************************************************************
//
// SMWritePage writes data to the specified page of the SmartMedia card.
//
//****************************************************************************
long
SMWritePage(unsigned long ulPage, int bWriteSpare, unsigned char *pucBuffer)
{
    unsigned long * volatile pulPtr = (unsigned long *)HwNANDAddress;
    unsigned char * volatile pucPortB = (unsigned char *)(HwBaseAddress +
                                                          HwPortB);
    long lIdx;

    //
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the sequential data input command.
    //
    *pulPtr = 0x80;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    *pulPtr = 0x00;
    lIdx = ulPage & 0xFF;
    *pulPtr = lIdx;
    lIdx = (ulPage >> 8) & 0xFF;
    *pulPtr = lIdx;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Write the data to this page.
    //
    for(lIdx = 0; lIdx < ulSMPageSize; lIdx++)
    {
        *pulPtr = pucBuffer[lIdx];
    }

    //
    // Write data for the spare area if requested.
    //
    if(bWriteSpare)
    {
        for(lIdx = 0; lIdx < (ulSMPageSize / 32); lIdx++)
        {
            *pulPtr = pucBuffer[ulSMPageSize + lIdx];
        }
    }

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the program command.
    //
    *pulPtr = 0x10;

    //
    // Write the read status command.
    //
    *pulPtr = 0x70;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Wait until the program has completed.
    //
    while((*pulPtr & 0x40) != 0x40)
    {
        for(lIdx = 0; lIdx < 1024; lIdx++)
        {
        }
    }

    //
    // Deselect the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

long
SMReadPage(unsigned long ulPage, int bReadSpare, unsigned char *pucBuffer)
{
    unsigned long * volatile pulPtr = (unsigned long *)HwNANDAddress;
    unsigned char * volatile pucPortB = (unsigned char *)(HwBaseAddress +
                                                          HwPortB);
    long lIdx;

    //
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the read1 command.
    //
    *pulPtr = 0x00;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    *pulPtr = 0x00;
    *pulPtr = ulPage & 0xFF;
    *pulPtr = (ulPage >> 8) & 0xFF;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Wait for a while for the row to copy from the cell array.  The spec.
    // for this delay varies from device to device, so we wait what should be
    // a long enough time for the slowest device.
    //
    for(lIdx = 0; lIdx < 1024; lIdx++)
    {
    }

    //
    // Read the data from this page.
    //
    for(lIdx = 0; lIdx < ulSMPageSize; lIdx++)
    {
        pucBuffer[lIdx] = *pulPtr & 255;
    }

    //
    // Read the spare area if requested.
    //
    if(bReadSpare)
    {
        for(lIdx = 0; lIdx < (ulSMPageSize / 32); lIdx++)
        {
            pucBuffer[ulSMPageSize + lIdx] = *pulPtr & 255;
        }
    }

    //
    // De-select the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

long
SMEraseBlock(unsigned long ulBlock)
{
    unsigned long * volatile pulPtr = (unsigned long *)HwNANDAddress;
    unsigned char * volatile pucPortB = (unsigned char *)(HwBaseAddress +
                                                          HwPortB);
    long lIdx;

    //
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Convert the block number into the page number of the first page of the
    // block.  This is dependent on the number of pages per block.
    //
    switch(ulSMPagesPerBlock)
    {
        case 16:
        {
            ulBlock <<= 4;
            break;
        }

        case 32:
        {
            ulBlock <<= 5;
            break;
        }
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the auto block erase setup command.
    //
    *pulPtr = 0x60;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    *pulPtr = ulBlock & 0xFF;
    *pulPtr = (ulBlock >> 8) & 0xFF;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the erase command.
    //
    *pulPtr = 0xd0;

    //
    // Write the read status command.
    //
    *pulPtr = 0x70;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Wait until the erase has completed.
    //
    while((*pulPtr & 0x40) != 0x40)
    {
        for(lIdx = 0; lIdx < 1024; lIdx++)
        {
        }
    }

    //
    // Deselect the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

//****************************************************************************
//
// SMWritePage writes data to the specified page of the SmartMedia card.
//
//****************************************************************************
long
SMWritePage(unsigned long ulPage, int bWriteSpare, unsigned char *pucBuffer)
{
    unsigned long * volatile pulPtr = (unsigned long *)HwNANDAddress;
    unsigned char * volatile pucPortB = (unsigned char *)(HwBaseAddress +
                                                          HwPortB);
    long lIdx;

    //
    // Make sure that we know the layout of the SmartMedia card.
    //
    if(!SMGetSize(0, 0, 0, 0))
    {
        return(0);
    }

    //
    // Select the SmartMedia card.
    //
    *pucPortB |= HwPortBSMCS;

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the sequential data input command.
    //
    *pulPtr = 0x80;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Assert ALE.
    //
    *pucPortB |= HwPortBALE;

    //
    // Write the address.
    //
    *pulPtr = 0x00000000;
    *pulPtr = ulPage & 0xFF;
    *pulPtr = (ulPage >> 8) & 0xFF;

    //
    // Deassert ALE.
    //
    *pucPortB &= ~HwPortBALE;

    //
    // Write the data to this page.
    //
    for(lIdx = 0; lIdx < ulSMPageSize; lIdx++)
    {
        *pulPtr = pucBuffer[lIdx];
    }

    //
    // Write data for the spare area if requested.
    //
    if(bWriteSpare)
    {
        for(lIdx = 0; lIdx < (ulSMPageSize / 32); lIdx++)
        {
            *pulPtr = pucBuffer[ulSMPageSize + lIdx];
        }
    }

    //
    // Assert CLE.
    //
    *pucPortB |= HwPortBCLE;

    //
    // Write the program command.
    //
    *pulPtr = 0x10;

    //
    // Write the read status command.
    //
    *pulPtr = 0x70;

    //
    // Deassert CLE.
    //
    *pucPortB &= ~HwPortBCLE;

    //
    // Wait until the program has completed.
    //
    while((*pulPtr & 0x40) != 0x40)
    {
        for(lIdx = 0; lIdx < 1024; lIdx++)
        {
        }
    }

    //
    // Deselect the SmartMedia card.
    //
    *pucPortB &= ~HwPortBSMCS;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产精品国产专区不片 | 欧美aaaaa成人免费观看视频| 国产精品理伦片| 国产精品免费丝袜| 欧美国产视频在线| 国产欧美日本一区视频| 国产欧美精品日韩区二区麻豆天美| 久久久久亚洲蜜桃| 中文字幕免费不卡| 亚洲日本成人在线观看| 亚洲色图19p| 亚洲3atv精品一区二区三区| 性感美女极品91精品| 日本人妖一区二区| 国产一区二区成人久久免费影院| 国产伦精品一区二区三区免费| 国产 日韩 欧美大片| av激情亚洲男人天堂| 欧美在线观看禁18| 日韩一区二区麻豆国产| 久久免费看少妇高潮| 国产精品热久久久久夜色精品三区| 亚洲色图在线视频| 午夜精品影院在线观看| 国模无码大尺度一区二区三区| 国产精品白丝jk白祙喷水网站| 成人毛片在线观看| 精品视频在线免费| 精品乱人伦小说| 国产精品久久久久久久久免费丝袜| 自拍偷拍国产精品| 日本亚洲视频在线| 成人午夜看片网址| 欧美绝品在线观看成人午夜影视| 欧美va亚洲va在线观看蝴蝶网| 国产精品视频免费| 午夜欧美大尺度福利影院在线看 | 色综合中文字幕国产| 91碰在线视频| 日韩精品中午字幕| 国产精品无码永久免费888| 一区二区三区中文字幕精品精品 | 午夜精品在线看| 国产精品资源在线看| 91论坛在线播放| 日韩精品一区二区三区在线| 国产精品成人一区二区艾草| 天涯成人国产亚洲精品一区av| 国产福利电影一区二区三区| 欧美无人高清视频在线观看| 久久久久久久久久久久久夜| 亚洲高清在线精品| 国产成人在线视频免费播放| 欧美日韩另类一区| 成人欧美一区二区三区小说| 老司机精品视频一区二区三区| 99国产精品一区| 亚洲精品一区二区三区四区高清| 亚洲摸摸操操av| 国产精品亚洲视频| 91精品国产欧美一区二区成人 | 99久久99久久精品国产片果冻| 欧美高清性hdvideosex| ...中文天堂在线一区| 精品综合久久久久久8888| 欧美私人免费视频| 国产精品乱码人人做人人爱| 久草在线在线精品观看| 欧美日本在线播放| 一区二区三区中文字幕精品精品| 成人永久看片免费视频天堂| 欧美成人r级一区二区三区| 亚瑟在线精品视频| 91麻豆123| 亚洲欧美怡红院| 丁香六月久久综合狠狠色| 欧美mv日韩mv国产网站app| 水野朝阳av一区二区三区| 一本色道久久综合亚洲91| 亚洲国产精品高清| 国产精品一二三四五| 日韩情涩欧美日韩视频| 日韩精彩视频在线观看| 欧美日韩亚洲高清一区二区| 夜夜揉揉日日人人青青一国产精品| 成人短视频下载| 国产欧美精品一区二区色综合| 国产一区二区调教| 精品少妇一区二区三区免费观看| 水蜜桃久久夜色精品一区的特点| 色欧美片视频在线观看在线视频| 中文字幕在线观看不卡| 成人国产亚洲欧美成人综合网| 国产欧美日本一区视频| 国产激情视频一区二区在线观看 | 香蕉影视欧美成人| 欧美系列日韩一区| 亚洲国产aⅴ成人精品无吗| 欧美网站大全在线观看| 亚洲第一激情av| 欧美视频一二三区| 视频一区二区中文字幕| 欧美另类久久久品| 蜜臀av一区二区三区| 欧美成人一区二区三区在线观看| 久久成人免费电影| 久久免费看少妇高潮| 国产91丝袜在线播放| 国产精品美女一区二区| 白白色 亚洲乱淫| 亚洲美女屁股眼交| 欧美性大战久久| 日韩黄色小视频| 欧美精品一区二区三区高清aⅴ | 日韩欧美国产综合一区 | 国产精品一区二区不卡| 中文字幕国产一区二区| 99久久免费视频.com| 亚洲综合免费观看高清完整版在线| 在线看国产一区| 日韩成人一级片| 久久久久久电影| 9人人澡人人爽人人精品| 一区二区三区精品在线观看| 欧美日韩一级黄| 久久精品国产免费看久久精品| 久久久久久久电影| 色综合久久久网| 日本不卡不码高清免费观看| 久久久久国产一区二区三区四区| av亚洲精华国产精华精华| 亚洲国产wwwccc36天堂| 精品国产不卡一区二区三区| 成人精品一区二区三区四区 | 99热在这里有精品免费| 亚洲妇熟xx妇色黄| 精品国产免费久久 | 国产女同性恋一区二区| 在线国产电影不卡| 另类中文字幕网| 一区在线中文字幕| 欧美一区二区精品久久911| 国产福利一区二区三区视频 | 日本不卡高清视频| 中文无字幕一区二区三区 | 亚洲欧洲色图综合| 777久久久精品| 国产999精品久久| 亚洲电影视频在线| 国产精品系列在线| 欧美一区二区三区四区在线观看| 大桥未久av一区二区三区中文| 一二三四区精品视频| 国产亚洲成av人在线观看导航| 色老汉av一区二区三区| 国产一区欧美日韩| 夜夜精品视频一区二区| 久久奇米777| 欧美日韩三级在线| 成人av在线网站| 韩国精品主播一区二区在线观看| 亚洲精品你懂的| 国产亚洲成aⅴ人片在线观看| 欧美日韩色一区| 99久久精品情趣| 久久99国产精品麻豆| 亚洲综合丁香婷婷六月香| 久久精品人人做人人爽97| 欧美精品国产精品| 色播五月激情综合网| 国产精品一二三区在线| 日产精品久久久久久久性色| 亚洲美女在线国产| 中文字幕巨乱亚洲| 久久这里都是精品| 欧美日本在线视频| 91久久精品日日躁夜夜躁欧美| 国产iv一区二区三区| 美洲天堂一区二卡三卡四卡视频| 一区二区三区四区亚洲| 国产精品毛片久久久久久| 久久新电视剧免费观看| 欧美精品亚洲二区| 欧美三级日本三级少妇99| 91在线视频观看| 成人午夜免费av| 国产成人99久久亚洲综合精品| 美国av一区二区| 人人精品人人爱| 三级亚洲高清视频| 午夜日韩在线观看| 午夜精品一区二区三区免费视频| 亚洲六月丁香色婷婷综合久久| 国产精品短视频| 国产精品三级久久久久三级| 国产日韩欧美一区二区三区综合| 精品国产免费久久| 久久久久久久久久美女| 久久久久国产精品厨房| 国产午夜精品久久久久久久 |