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

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

?? norflashamd.c

?? IAR5.2下 AT91SAM9260 ARM 對 MCP2515 控制源化碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
{
    amd_Reset(pNorFlashInfo, address);
}


//------------------------------------------------------------------------------
/// The Read Device Identifier command instructs the device to output manufacturer
/// code.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
//------------------------------------------------------------------------------
unsigned int AMD_ReadManufactoryId(struct NorFlashInfo *pNorFlashInfo)
{
    return amd_ReadIdentification(pNorFlashInfo, AMD_MANU_ID);
}

//------------------------------------------------------------------------------
/// The Read Device Identifier command instructs the device to output device id.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
//------------------------------------------------------------------------------
unsigned int AMD_ReadDeviceID(struct NorFlashInfo *pNorFlashInfo)
{
    return amd_ReadIdentification(pNorFlashInfo, AMD_DEVIDE_ID);
}

//------------------------------------------------------------------------------
/// Erases the specified block of the device. Returns 0 if the operation was
/// successful; otherwise returns an error code.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param address Address offset to be erase.
//------------------------------------------------------------------------------
unsigned char AMD_EraseSector(
    struct NorFlashInfo *pNorFlashInfo, 
    unsigned int address)
{
    unsigned int pollingData;
    unsigned int busAddress;
    unsigned char busWidth;
    unsigned char done = 0;
    
    busWidth = NorFlash_GetDataBusWidth(pNorFlashInfo);
    
    //Programming is a six-bus-cycle operation. 
    // The erase 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_ERASE_SETUP);
    // Two additional unlock cycles are written.
    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 address of the sector to be erased, and the sector erase command.
    busAddress = NorFlash_GetAddressInChip(pNorFlashInfo,address);              
    WriteCommand(busWidth, busAddress, AMD_CMD_ERASE_SECTOR);
    
    // Data polling 
    do {
        ReadRawData(busWidth, busAddress, (unsigned char *)&pollingData);
        // Check if the chip erase algorithm is completed.
        if ((pollingData & AMD_POLLING_DQ7) == AMD_POLLING_DQ7 ) {
            // Erase operation successful. Device in read mode.
            done = 1;
        }
        else {
            // check if sector earse 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) == AMD_POLLING_DQ7 ){
                    // Erase operation successful. Device in read mode.
                    done = 1;
                }
                else {
                    // Erase operation not successful, write reset command.
                    amd_Reset(pNorFlashInfo, 0);
                    return NorCommon_ERROR_CANNOTERASE;
                }
            }
        }
    } while (!done);
    return 0;
}

//------------------------------------------------------------------------------
/// Erases all the block of the device. Returns 0 if the operation was successful;
/// otherwise returns an error code.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
//------------------------------------------------------------------------------
unsigned char AMD_EraseChip(struct NorFlashInfo *pNorFlashInfo)
{
    unsigned int pollingData;
    unsigned char busWidth;
    unsigned int address;
    unsigned char done = 0;
        
    busWidth = NorFlash_GetDataBusWidth(pNorFlashInfo);
    
    //Programming is a six-bus-cycle operation. 
    // The erase 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_ERASE_SETUP);
                 
    // Two additional unlock cycles are written.                 
    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);
                 
    // Then followed by the chip erase command.
    WriteCommand(busWidth , 
                 NorFlash_GetByteAddressInChip(pNorFlashInfo, AMD_OFFSET_UNLOCK_1), 
                 AMD_CMD_ERASE_CHIP);
                 
    address = NorFlash_GetByteAddressInChip(pNorFlashInfo, 0);              
    // Data polling 
    do {
        ReadRawData(busWidth , address, (unsigned char*)&pollingData);
        // Check if the chip erase algorithm is completed.
        if ((pollingData & AMD_POLLING_DQ7) == AMD_POLLING_DQ7 ) {
            // Erase operation successful. Device in read mode.
            done = 1;
        }
        else {
            
            // When the time-out period is complete, DQ3 switches from a “0” to a “1.”
            if (pollingData & AMD_POLLING_DQ3 ) {
                return NorCommon_ERROR_CANNOTERASE;
            }
            // check if chip earse algrithm exceeded timing limits
            if (pollingData & AMD_POLLING_DQ5 ) {
                
                // I/O should be rechecked.
                ReadRawData(busWidth , address, (unsigned char*)&pollingData);
                if ((pollingData & AMD_POLLING_DQ7) == AMD_POLLING_DQ7 ){
                    // Erase operation successful. Device in read mode.
                    done = 1;
                }
                else {
                    // Erase operation not successful, write reset command.
                    amd_Reset(pNorFlashInfo, 0);
                    return NorCommon_ERROR_CANNOTERASE;
                }
            }
        }
    } while (!done);
    return 0;
}


//------------------------------------------------------------------------------
/// Sends data to the NorFlashInfo chip from the provided buffer.
/// \param pNorFlashInfo  Pointer to an NorFlashInfo instance.
/// \param address Start address offset to be wrote.
/// \param buffer Buffer where the data is stored.
/// \param size Number of bytes that will be written.
//------------------------------------------------------------------------------
unsigned char AMD_Write_Data(
    struct NorFlashInfo *pNorFlashInfo,
    unsigned int address,
    unsigned char *buffer,
    unsigned int size)
{
    unsigned int i;
    unsigned char busWidth;
    busWidth = pNorFlashInfo->deviceChipWidth;
    
    if (busWidth == FLASH_CHIP_WIDTH_8BITS ){ 
        for(i=0; i < size; i++) {
            if(amd_Program(pNorFlashInfo, address, buffer[i])) {
                return NorCommon_ERROR_CANNOTWRITE;
            }
            address ++;
        }
    }
    else if( busWidth == FLASH_CHIP_WIDTH_16BITS ){
        unsigned short *buffer16 = (unsigned short *) buffer;
        size >>= 1;
        for(i=0; i < size; i++) {
            if(amd_Program(pNorFlashInfo, address, buffer16[i])){
                return NorCommon_ERROR_CANNOTWRITE;
            }
            address+= 2;
        }
    }
    else if(busWidth == FLASH_CHIP_WIDTH_32BITS ){
        unsigned int *buffer32 = (unsigned int *) buffer;
        size >>= 2;
        for(i=0; i < size; i++) {
            if(amd_Program(pNorFlashInfo, address, buffer32[i])){
                return NorCommon_ERROR_CANNOTWRITE;
            }
            address+= 4;
        }
    }
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91小宝寻花一区二区三区| 亚洲美女区一区| 亚洲免费视频成人| 免费在线一区观看| 99久久精品一区二区| 国产综合一区二区| 91在线观看视频| 日韩亚洲欧美一区二区三区| 日韩精品一区二区三区三区免费 | 亚洲一区二区偷拍精品| 久久成人免费电影| 色婷婷久久久亚洲一区二区三区| 日韩欧美专区在线| 亚洲欧美日韩在线不卡| 精品一区二区在线免费观看| 91在线丨porny丨国产| 日韩欧美中文字幕制服| 一区二区三区中文字幕在线观看| 国产资源精品在线观看| 欧美精品久久久久久久多人混战 | ●精品国产综合乱码久久久久 | 亚洲精品在线观| 一区在线观看视频| 韩国v欧美v日本v亚洲v| 欧美亚洲免费在线一区| 国产精品网站在线观看| 另类调教123区| 欧美影院一区二区三区| 欧美国产精品v| 午夜精品久久久久久久99水蜜桃| fc2成人免费人成在线观看播放| 欧美zozo另类异族| 午夜精品久久久| 成人一区二区视频| 精品国产乱子伦一区| 日韩av午夜在线观看| 91福利区一区二区三区| 综合久久久久综合| 国产激情一区二区三区四区| 91精品国产一区二区人妖| 国产精品国产三级国产a| 国产一区 二区| 日韩精品一区二区在线观看| 日韩专区在线视频| 色视频欧美一区二区三区| 精品免费国产一区二区三区四区| 亚洲国产美女搞黄色| 日本高清不卡视频| 国产精品丝袜91| 粉嫩aⅴ一区二区三区四区五区| 精品999在线播放| 久久99精品国产麻豆婷婷| 日本道色综合久久| 亚洲女同ⅹxx女同tv| 99久久婷婷国产精品综合| 精品国产123| 老司机一区二区| 91精品国产乱| 毛片基地黄久久久久久天堂| 91精品国产综合久久精品麻豆| 香蕉加勒比综合久久| 欧美久久久久中文字幕| 亚洲成人av中文| 欧美人牲a欧美精品| 日韩高清不卡在线| 欧美久久久久中文字幕| 日韩不卡免费视频| 日韩欧美精品三级| 国内精品写真在线观看| 久久久久亚洲综合| a亚洲天堂av| 亚洲国产另类av| 久久综合九色综合久久久精品综合| 成人一级片网址| 亚洲一区影音先锋| 日韩欧美123| 成人激情午夜影院| 性做久久久久久| 久久精品视频免费观看| 色噜噜狠狠色综合中国| 奇米精品一区二区三区四区| 国产色产综合色产在线视频| 色就色 综合激情| 日日噜噜夜夜狠狠视频欧美人 | 一本色道**综合亚洲精品蜜桃冫| 午夜精品福利一区二区三区蜜桃| 久久综合久久鬼色| 欧美在线影院一区二区| 久久se这里有精品| 亚洲精品国产高清久久伦理二区| 日韩久久精品一区| 99视频精品在线| 青青草91视频| 中文字幕一区二区三区av| 91.麻豆视频| 91在线观看成人| 久久不见久久见免费视频1| 亚洲欧美一区二区三区孕妇| 欧美成人一区二区三区片免费| 97精品久久久午夜一区二区三区 | 国产精品久久久久久久第一福利 | 欧美日韩高清影院| 国产成人在线观看| 亚洲一区二区三区自拍| 久久人人97超碰com| 欧美体内she精高潮| 国产成人在线看| 天天色综合天天| 国产精品成人免费在线| 日韩美女一区二区三区| 91麻豆国产在线观看| 国产毛片一区二区| 婷婷国产在线综合| 亚洲视频一二三区| 欧美精品一区二| 欧美日韩一本到| 不卡一区二区中文字幕| 久久精品999| 亚洲图片欧美综合| 国产精品久久久久久久久搜平片 | 日本精品一级二级| 国产成人无遮挡在线视频| 日韩高清一级片| 夜夜嗨av一区二区三区 | 制服丝袜亚洲播放| 91麻豆精品视频| 成人免费毛片a| 国产美女精品一区二区三区| 日韩av网站在线观看| 亚洲一区中文日韩| 亚洲精品日韩一| 亚洲天堂精品视频| 中文字幕一区二区三区不卡 | 欧美亚洲综合网| 97久久精品人人做人人爽50路| 精品在线观看视频| 亚洲成人激情av| 艳妇臀荡乳欲伦亚洲一区| 中文字幕在线一区免费| 中文字幕av一区二区三区| 久久久久久免费毛片精品| 欧美大胆人体bbbb| 欧美一区二区在线播放| 欧美日韩国产在线观看| 91福利精品视频| 欧美性大战久久久久久久| 色婷婷综合久久| 色婷婷激情综合| 在线看国产一区二区| 91精品办公室少妇高潮对白| aaa欧美日韩| 91视频.com| 色8久久精品久久久久久蜜 | 久久精品国产亚洲高清剧情介绍| 天堂午夜影视日韩欧美一区二区| 亚洲成a人片在线不卡一二三区 | 久久综合精品国产一区二区三区| 欧美sm美女调教| 日韩精品一区二区三区视频播放 | 久久久不卡网国产精品二区| 精品国产百合女同互慰| 久久久亚洲精华液精华液精华液 | 日韩精品在线网站| 欧美xxxx老人做受| 久久嫩草精品久久久精品| 国产日韩欧美激情| 国产精品色一区二区三区| 国产精品美女视频| 亚洲日本欧美天堂| 亚洲影视在线播放| 婷婷开心激情综合| 狠狠久久亚洲欧美| 成人免费观看男女羞羞视频| 99精品热视频| 欧美性高清videossexo| 3d成人动漫网站| 精品国产乱码久久久久久影片| 久久婷婷一区二区三区| 中文字幕精品一区二区精品绿巨人 | 9191成人精品久久| 欧美mv日韩mv国产网站| 欧美国产精品劲爆| 有码一区二区三区| 日韩va亚洲va欧美va久久| 激情综合网激情| 成人av在线资源网| 欧美性高清videossexo| 欧美一区二区不卡视频| 久久精品一区二区三区不卡| 国产精品黄色在线观看| 一区二区欧美国产| 美腿丝袜在线亚洲一区 | 日韩精品电影在线观看| 国产精品一区二区三区四区| 99视频一区二区| 3atv一区二区三区| 国产婷婷色一区二区三区| 一区二区三区日本| 精品一区二区综合| 色综合中文字幕国产|