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

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

?? norflashamd.c

?? IAR5.2下 AT91SAM9260 ARM 對 MCP2515 控制源化碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------
#include "NorFlashCFI.h"
#include "NorFlashCommon.h"
#include <utility/trace.h>
#include <string.h>

//------------------------------------------------------------------------------
//        Local defination
//------------------------------------------------------------------------------
 
/// Command for vendor command set CMD_SET_AMD.
#define AMD_CMD_IDOUT         0x00F0
#define AMD_CMD_CFI           0x0098
#define AMD_CMD_IDIN          0x0090
#define AMD_CMD_UNLOCK_1      0x00AA
#define AMD_CMD_UNLOCK_2      0x0055
#define AMD_CMD_ERASE_SETUP   0x0080
#define AMD_CMD_ERASE_RESUME  0x0030
#define AMD_CMD_ERASE_CHIP    0x0010
#define AMD_CMD_ERASE_SECTOR  0x0030
#define AMD_CMD_PROGRAM       0x00A0
#define AMD_CMD_UNLOCK_BYPASS 0x0020

// Command offset for vendor command set CMD_SET_AMD
#define AMD_OFFSET_UNLOCK_1   0x05555
#define AMD_OFFSET_UNLOCK_2   0x0AAAA
/// Query command address.
#define FLASH_ADDRESS_CFI     0x0055

/// AMD norflash device Identifier infomation address offset.
#define AMD_MANU_ID           0x00
#define AMD_DEVIDE_ID         0x01

// Data polling mask for vendor command set CMD_SET_AMD
#define AMD_POLLING_DQ7       0x80
#define AMD_POLLING_DQ6       0x60
#define AMD_POLLING_DQ5       0x20
#define AMD_POLLING_DQ3       0x08


//------------------------------------------------------------------------------
//         Local functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// It implements a RESET command.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param address  Dummy data for AMD.
//------------------------------------------------------------------------------
void amd_Reset(struct NorFlashInfo *pNorFlashInfo, unsigned int address)
{
    unsigned char busWidth;
    
    busWidth = NorFlash_GetDataBusWidth(pNorFlashInfo);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1), 
                 AMD_CMD_UNLOCK_1);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_2), 
                 AMD_CMD_UNLOCK_2);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_IDOUT);
}


//------------------------------------------------------------------------------
/// Read specified manufactory id or device id.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param index 0: manufactorid 1: device id.
//------------------------------------------------------------------------------
unsigned int amd_ReadIdentification(
    struct NorFlashInfo *pNorFlashInfo, 
    unsigned char index)
{
    unsigned int id;
    unsigned char busWidth;
    unsigned int address;
    
    busWidth = NorFlash_GetDataBusWidth(pNorFlashInfo);
    
    // The amd_Read identification command sequence is initiated by first
    // writing two unlock cycles. 
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_UNLOCK_1);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_2), 
                 AMD_CMD_UNLOCK_2);
                 
    // Followed by a third write cycle that contains the autoselect command.
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1), 
                 AMD_CMD_IDIN);
    
    // The device then enters the autoselect mode. It may read at any address any 
    // number of times without initiating another autoselect command sequence.   
    address = NorFlash_GetByteAddressInChip(pNorFlashInfo, index);
    ReadRawData(busWidth, address, (unsigned char*)&id);

    // The system must write the exit command to return to the read mode
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_UNLOCK_1);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_2),
                 AMD_CMD_UNLOCK_2);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_IDOUT);
    return id;
}
//------------------------------------------------------------------------------
/// It implement a program word command. Returns 0 if the operation was
/// successful; otherwise returns an error code.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param address Start address offset to be wrote.
/// \param data word to be written.
//------------------------------------------------------------------------------
unsigned char amd_Program(
    struct NorFlashInfo *pNorFlashInfo,
    unsigned int address,
    unsigned int data)
{
    unsigned int pollingData;
    unsigned int busAddress;
    unsigned char done = 0;
    unsigned char busWidth;
    
    busWidth = NorFlash_GetDataBusWidth(pNorFlashInfo);
    // The program command sequence is initiated by writing two unlock write cycles.
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_UNLOCK_1);
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_2), 
                 AMD_CMD_UNLOCK_2);
    // Followed by the program set-up command.               
    WriteCommand(busWidth, 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1),
                 AMD_CMD_PROGRAM);
                 
    // The program address and data are written next, 
    // which in turn initiate the Embedded Program algorithm.
    busAddress = NorFlash_GetAddressInChip(pNorFlashInfo, address);
    WriteRawData(busWidth, busAddress, (unsigned char*)&data);
    
    // Data polling 
    do {
        ReadRawData(busWidth, busAddress, (unsigned char *)&pollingData);
        // Check if the chip program algorithm is completed.
        if ((pollingData & AMD_POLLING_DQ7) == (data & AMD_POLLING_DQ7)) {
            // Program operation successful. Device in read mode.
            done = 1;
        }
        else {
            // check if chip Program algrithm exceeded timing limits
            
            if (pollingData & AMD_POLLING_DQ5 ) {
            
                // I/O should be rechecked.
                ReadRawData(busWidth, busAddress, (unsigned char *)&pollingData);
                
                if ((pollingData & AMD_POLLING_DQ7) == (data & AMD_POLLING_DQ7)) {
                    // Program operation successful. Device in read mode.
                    done = 1;
                }
                else {
                    // Program operation not successful, write reset command.
                    amd_Reset(pNorFlashInfo, 0);
                    return NorCommon_ERROR_CANNOTWRITE;
                }
            }
        }
    } while (!done);
    return 0;
}

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// It implements a RESET command.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param address  Dummy data for AMD.
//------------------------------------------------------------------------------
void AMD_Reset(struct NorFlashInfo *pNorFlashInfo, unsigned int address)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四| 在线观看一区二区视频| 91毛片在线观看| 欧美一区二区三区男人的天堂| 久久精品亚洲精品国产欧美| 日日夜夜一区二区| 99久久精品情趣| 国产欧美日韩麻豆91| 免费成人小视频| 在线亚洲免费视频| 中文字幕一区在线观看| 激情综合五月天| 7777精品伊人久久久大香线蕉的| 国产精品丝袜久久久久久app| 蜜臀av性久久久久av蜜臀妖精| 在线视频国内自拍亚洲视频| 综合久久国产九一剧情麻豆| 国产精品亚洲一区二区三区妖精| 欧美一区二区三区免费| 亚洲成国产人片在线观看| 色婷婷国产精品综合在线观看| 国产欧美精品一区| 国产原创一区二区三区| 欧美一区二区女人| 午夜精品一区二区三区免费视频| 在线欧美日韩精品| 一区二区三区中文字幕精品精品| 99久久伊人久久99| 中文字幕在线一区二区三区| 成人黄色免费短视频| 国产农村妇女毛片精品久久麻豆 | av日韩在线网站| 国产欧美一区二区精品秋霞影院| 国内久久婷婷综合| 久久精品人人做人人爽97| 国产一区二三区好的| 久久综合色综合88| 国产麻豆精品视频| 久久精品欧美一区二区三区不卡 | 狠狠色丁香婷婷综合| 日韩精品资源二区在线| 精品亚洲免费视频| 久久久午夜精品| 成人av影院在线| 一区二区三区四区亚洲| 日本精品一级二级| 视频一区二区中文字幕| 91精品国产手机| 国产剧情一区在线| 国产精品久久久久久户外露出 | 国产精品1区2区3区| 欧美国产精品一区| 91美女视频网站| 午夜在线成人av| 欧美精品一区二区三区四区 | 欧美日韩国产成人在线91 | 亚洲黄色录像片| 欧美日韩精品一区二区在线播放| 蜜臀av一区二区在线免费观看| 亚洲精品一区二区三区在线观看 | 国产一区二区三区四| 国产精品狼人久久影院观看方式| 在线精品视频小说1| 男人的天堂久久精品| 国产精品久久久久久久久免费相片| 91日韩精品一区| 九一九一国产精品| 亚洲卡通动漫在线| 精品国产一区二区三区不卡| 91亚洲国产成人精品一区二区三 | 欧美综合一区二区| 久久福利视频一区二区| 亚洲日本在线看| 91精品国模一区二区三区| 成人av网站免费观看| 天堂va蜜桃一区二区三区漫画版| 国产欧美日本一区二区三区| 精品视频在线看| 成人午夜在线免费| 日韩不卡免费视频| 亚洲不卡av一区二区三区| 2021中文字幕一区亚洲| 欧美体内she精视频| 国产69精品久久久久毛片| 亚洲高清视频的网址| 国产欧美一区二区精品忘忧草| 欧美日韩日日摸| 色狠狠一区二区三区香蕉| 国产精品一区二区久激情瑜伽 | 久久久三级国产网站| 欧美日韩高清一区二区三区| 91在线云播放| 国产精品99久| 极品少妇一区二区| 天堂久久久久va久久久久| 一区二区三区欧美视频| 国产精品理伦片| 国产校园另类小说区| 日韩精品在线一区二区| 91精品国产欧美一区二区18| 色哟哟欧美精品| 成人午夜视频网站| 国产乱淫av一区二区三区| 韩国理伦片一区二区三区在线播放 | 欧美伦理视频网站| 91蜜桃视频在线| 91亚洲精品久久久蜜桃| 99久久免费国产| 97精品国产露脸对白| 成人激情免费网站| 国产成都精品91一区二区三| 国产精品原创巨作av| 激情六月婷婷久久| 成人免费看的视频| 国产在线视视频有精品| 久久99国内精品| 久久99日本精品| 国产一区 二区| 国产99久久久精品| 国产成人精品免费| 波多野结衣欧美| 91色在线porny| 欧美在线你懂得| 欧美性猛交xxxxxxxx| 欧美巨大另类极品videosbest| 欧美三区免费完整视频在线观看| 欧美日韩亚洲另类| 91精品国产欧美一区二区成人| 精品理论电影在线| 欧美国产日韩亚洲一区| 中文字幕一区二区三| 亚洲六月丁香色婷婷综合久久 | 日本高清不卡在线观看| 91丝袜高跟美女视频| 欧美丝袜丝交足nylons| 欧美一区二区在线看| 久久香蕉国产线看观看99| 国产片一区二区三区| 亚洲免费视频中文字幕| 日韩成人免费在线| 国产河南妇女毛片精品久久久| 91色乱码一区二区三区| 在线不卡欧美精品一区二区三区| 日韩精品一区二区在线观看| 久久色.com| 亚洲精品成人少妇| 久久电影网电视剧免费观看| 99久久久久久| 6080yy午夜一二三区久久| 国产欧美日韩一区二区三区在线观看 | 欧美xxxxxxxx| 国产精品成人免费精品自在线观看| 亚洲色图欧洲色图婷婷| 免费高清在线一区| 高清不卡在线观看| 欧美一区二区久久| 中文字幕日韩一区| 美女视频免费一区| 色综合中文字幕| 精品国产91洋老外米糕| 一二三四区精品视频| 久久不见久久见免费视频1| 99re成人精品视频| 久久影院午夜片一区| 捆绑变态av一区二区三区| 色综合一区二区三区| 日韩欧美精品在线| 一区二区高清在线| 懂色av中文字幕一区二区三区| 制服视频三区第一页精品| 欧美国产精品中文字幕| 久久成人精品无人区| 欧美性猛片aaaaaaa做受| 中文字幕av一区二区三区高| 久久成人久久鬼色| 欧美视频中文字幕| 中文字幕在线观看不卡| 久久99精品久久久久久久久久久久| 欧美亚洲图片小说| 国产精品狼人久久影院观看方式| 激情五月婷婷综合| 欧美一级一区二区| 婷婷国产v国产偷v亚洲高清| 欧洲视频一区二区| 18涩涩午夜精品.www| 成人教育av在线| 国产色婷婷亚洲99精品小说| 狠狠色丁香九九婷婷综合五月| 欧美男男青年gay1069videost| 国产精品久久久久久一区二区三区| 国产一区二区免费在线| 日韩欧美区一区二| 看电影不卡的网站| 欧美一二三四区在线| 日韩国产欧美一区二区三区| 欧美日韩亚洲另类| 图片区小说区国产精品视频| 精品污污网站免费看| 丝袜美腿高跟呻吟高潮一区| 51精品秘密在线观看|