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

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

?? flash.c

?? AT91M42800A-INT例子
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*--------------------------------------------------------------------------------------
//*      ATMEL Microcontroller Software Support  -  ROUSSET  -
//*--------------------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*--------------------------------------------------------------------------------------
//* File Name               : flash.c
//* Object                  : FLASH programmer for :
//*                             AT49BV1604/AT49BV1604T
//*                             AT49BV1614/AT49BV1604T
//*                             AT49BV8011/AT49BV8011T
//*                             AT49BV8011/AT49BV8011T
//*                             AT49BV1614A/AT49BV1604AT
//*
//* 1.0 08/Nov/02 JPP       : Creation
//* 1.1 04/Apr/03 NCy	: Add AT49BV1604A/AT49BV1604AT
//*--------------------------------------------------------------------------------------

/* Include Standard c Libraries to allow stand alone compiling and operation */
#include <stdio.h>
#include <stdlib.h>

#include "flash_at49.h"

/* Target Identification */
#define TARGET_ID           "EB42 Flash AT49BV "

#define MAX_WORDS_IN_SECTOR 32*1024

unsigned short RAMSectorData[MAX_WORDS_IN_SECTOR];

//*--------------------------------------------------------------------------------------
//* Function Name       : flash_identify
//* Object              : Read the flash manufacturer code and Flash ID code
//* Input Parameters    : flash_word *load_addr = Flash bass address
//* Output Parameters   : Pointer to the Flash identified
//* Functions called    : none
//*--------------------------------------------------------------------------------------
const FlashAt49BVDef *flash_identify ( flash_word *load_addr )
{
    flash_word      manuf_code ;
    flash_word      device_code ;
    flash_word      extra_id ;
    const FlashAt49BVDef  *flash_pt ;
    flash_word      *base_addr ;
    int             exit = FALSE ;

    // Initialize Flash Table pointer
    flash_pt = FlashTable ;

    // Look for the  device in the known flash table
    while ( exit == FALSE )
    {
        // Initialize Flash Base Address
        base_addr = (flash_word *) ((int)load_addr & ~(flash_pt->flash_mask)) ;
        // Display Flash Identification Header
        printf ( "Trying to identify Flash at base address (0x%x)\n", (int)base_addr) ;

        // Display Flash Tested
        printf ( "Trying %s\n", flash_pt->flash_name ) ;

        // Enter Software Product Identification Mode
        *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1;
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *(base_addr + FLASH_SEQ_ADD1) = ID_IN_CODE;

        // Read Manufacturer and device code from the device
        manuf_code  = *base_addr ;
        device_code = *(base_addr + 1) ;
	extra_id = *(base_addr + 3);

        // Exit Software Product Identification Mode
        *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1;
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *(base_addr + FLASH_SEQ_ADD1) = ID_OUT_CODE;

        // If both manufacturer and device codes corresponds
        if (( flash_pt->flash_id == device_code ) &&
            ( flash_pt->flash_manuf_id == manuf_code )&&
            ( flash_pt->flash_extra_id == extra_id ))
        {
            // Exit the search loop
            exit = TRUE ;
        }
        else
        {
            // Next Flash, If end of table
            if ( ++flash_pt >= FlashTable + NB_FLASH_SUPPORTED )
            {
                // Return 0, Display Error and Exit loop
                flash_pt = (const FlashAt49BVDef *)0 ;
                printf ( "Error - Unknown device: manufacturer %02x / device %02x \n",
                        manuf_code, device_code );
                exit = TRUE ;
            }
        }
    }
    // Return pointer to Flash found
    return ( flash_pt ) ;
}

//*--------------------------------------------------------------------------------------
//* Function Name       : init_flash_ready
//* Object              : Setup the PIO line connected to the RDY/BUSY line of the flash
//* Input Parameters    : none
//* Output Parameters   : none
//* Functions called    : none
//*--------------------------------------------------------------------------------------
void init_flash_ready ( void )
{
#ifdef POLL_RDY_NBUSY
    *(( volatile unsigned int *) 0xFFFF0000 ) = RDY_PIO_BUSY ;
    *(( volatile unsigned int *) 0xFFFF0014 ) = RDY_PIO_BUSY ;
#endif
}

//*--------------------------------------------------------------------------------------
//* Function Name       : wait_flash_ready
//* Object              : check if data is written by software polling
//* Input Parameters    : Data and address of the data.
//* Output Parameters   : TRUE or FALSE
//* Functions called    : none
//*--------------------------------------------------------------------------------------
int wait_flash_ready ( flash_word *address, flash_word data )
{
    int i = 0 ;

#ifdef POLL_RDY_NBUSY
    // While RDY/BUSY is not set
    while (((*(( volatile unsigned int *) 0xFFFF0024 ) & RDY_PIO_BUSY ) == 0 ) &&
           ( i++ < TIME_OUT )) ;
#else
    // While two consecutive read don't give same value or timeout
    while (( *address != data ) && ( i++ < TIME_OUT )) ;
#endif

    // If timeout
    if ( i < TIME_OUT )
    {
        //printf ( "Counter = %d\n", i ) ;
        return ( TRUE ) ;
    }
    else
    {
        //printf ( "Timeout\n" ) ;
        return ( FALSE ) ;
    }
}


//*--------------------------------------------------------------------------------------
//* Function Name       : check_sector_erased
//* Object              : check if sector is erased. If not erase it.
//*
//* Input Parameters    : <sector_addr> base sector address
//*                       <size> sector size in byte
//*                       <sector_id> sector ID
//*
//* Output Parameters   : If data sector erase TRUE, else FALSE
//*--------------------------------------------------------------------------------------
int check_sector_erased ( flash_word *sector_addr, int size, int sector_id )
{
    int     i ;
    flash_word  read_data ;

    // For each word of the sector
    for ( i = 0 ; i < (size/2) ; i ++ )
    {
        // Check erased value reading, if not
        if (( read_data = *(sector_addr + i)) != (unsigned short)0xFFFF )
        {
            printf ( "Sector %d not erased !\n", sector_id ) ;
            printf ( "Sector %d, Address 0x%08x, Value 0x%08x\n",
                     sector_id, (int)(sector_addr + i), read_data ) ;
            return ( FALSE ) ;
        }

    }

    // Display Sector Erased
    printf ( "Sector %d erased !\n", sector_id ) ;
    return ( TRUE ) ;
}

//*--------------------------------------------------------------------------------------
//* Function Name       : erase_sector
//* Object              : check if sector is erased if not erase
//* Input Parameters    : <base_addr> Flash base address
//*                       <sector_addr> base sector address
//*                       <size> sector size in byte
//*                       <sector_id> sector ID
//* Output Parameters   : if data sector erase TRUE or FALSE
//*--------------------------------------------------------------------------------------
int erase_sector ( flash_word *base_addr, flash_word *sector_addr, int size, int sector_id )
{
    int     trial = 0 ;
    int     happyErase = TRUE;

    // While flash is not erased or too much erasing performed
    while (( check_sector_erased ( sector_addr, size, sector_id ) == FALSE ) &&
           ( trial++ < NB_TRIAL_ERASE ))
    {
        // Display Erasing Sector
        printf ( "Erasing Sector %d\n", sector_id ) ;

        // Enter Sector Erase Sequence codes
        *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1;
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *(base_addr + FLASH_SEQ_ADD1) = ERASE_SECTOR_CODE1;
        *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1;
        *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2;
        *sector_addr = ERASE_SECTOR_CODE2 ;

        // Wait for Flash Ready after Erase, if timeout
        if ( wait_flash_ready ( sector_addr, (unsigned short)0xFFFF ) == FALSE )
        {
            // Display Timeout and return False
            printf ( "Timeout while erasing\n" ) ;
            happyErase = FALSE;
            break;
        }

    }

    return (happyErase) ;
}

//*--------------------------------------------------------------------------------------
//* Function Name       : write_flash
//* Object              : write a word in flash
//*
//* Input Parameters    : flash_word *base_addr : Flash base address
//*                       flash_word *load_addr : Flash data address
//*                       flash_word data       : Data value
//*
//* Output Parameters   : TRUE if data has been written correctly, else FALSE
//*
//* Functions called    : wait_flash_ready
//*--------------------------------------------------------------------------------------
int write_flash ( flash_word *base_addr, flash_word *load_addr, flash_word data )
{
    flash_word  read_data ;
    int i = 0 ;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级乱人伦电影| 亚洲天堂网中文字| 亚洲欧洲成人av每日更新| 亚洲电影你懂得| 高清国产一区二区| 欧美喷潮久久久xxxxx| 国产精品美女久久久久久 | eeuss国产一区二区三区| 7777精品伊人久久久大香线蕉的 | 午夜精品一区在线观看| 国产电影一区二区三区| 欧美日韩精品专区| 亚洲欧美日韩在线不卡| 国产精品911| 日韩欧美激情一区| 亚洲午夜在线视频| 97aⅴ精品视频一二三区| 2020日本不卡一区二区视频| 日一区二区三区| 色国产综合视频| 中文字幕不卡三区| 国产酒店精品激情| 精品国产一区二区三区忘忧草| 天使萌一区二区三区免费观看| 在线视频国内一区二区| 亚洲人午夜精品天堂一二香蕉| 高清成人在线观看| 精品国产一区二区三区av性色| 亚洲亚洲人成综合网络| 91免费看视频| 亚洲男人电影天堂| 色综合天天综合给合国产| 自拍偷拍国产精品| 99久久精品国产一区| 国产精品二三区| 91视频在线观看免费| 国产精品白丝在线| 91在线精品秘密一区二区| 国产精品对白交换视频| 91麻豆123| 亚洲综合久久久久| 制服丝袜中文字幕亚洲| 麻豆精品国产传媒mv男同| 日韩欧美国产系列| 国产在线播放一区三区四| 2021国产精品久久精品| 高清国产一区二区三区| 亚洲欧洲日韩女同| 欧美视频在线播放| 免费成人你懂的| 久久久精品国产99久久精品芒果| 国产精品996| 亚洲精品少妇30p| 欧美精选一区二区| 美腿丝袜亚洲色图| 国产精品私人自拍| 欧美中文字幕不卡| 老鸭窝一区二区久久精品| 精品久久久久久无| a4yy欧美一区二区三区| 一区二区三区高清不卡| 欧美一卡二卡三卡| 国产高清精品网站| 亚洲欧美日韩中文播放 | 国产精品69久久久久水密桃| 17c精品麻豆一区二区免费| 欧美日韩的一区二区| 紧缚奴在线一区二区三区| 国产精品麻豆久久久| 欧美色视频一区| 国产精品一区二区三区乱码| 中文字幕一区不卡| 日韩免费观看2025年上映的电影| 国产精品99久| 午夜精品视频一区| 亚洲国产成人午夜在线一区| 欧美日韩亚洲高清一区二区| 国产一区二区三区在线观看精品| 亚洲精品欧美激情| 精品少妇一区二区三区| 色狠狠一区二区三区香蕉| 久久99精品国产.久久久久| 亚洲激情网站免费观看| 亚洲精品一区二区三区影院| 日本福利一区二区| 国产一区二区三区| 五月激情综合色| 日韩一区日韩二区| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲欧美激情视频在线观看一区二区三区 | 日本视频一区二区三区| 国产精品久久久久一区| 欧美va亚洲va国产综合| 欧美性猛交xxxx黑人交| 成人高清免费在线播放| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区精品在线| 久久精品欧美一区二区三区麻豆 | aaa欧美大片| 国产一区二区视频在线| 亚洲成人av一区二区| 亚洲人成电影网站色mp4| 国产欧美一区视频| 久久久777精品电影网影网| 日韩一卡二卡三卡四卡| 欧美丰满美乳xxx高潮www| 色哟哟国产精品免费观看| zzijzzij亚洲日本少妇熟睡| 国产精品一二三| 精品亚洲成a人在线观看| 日韩av一二三| 日韩不卡一区二区三区| 日韩中文字幕不卡| 性做久久久久久久久| 亚洲成人动漫在线免费观看| 亚洲电影第三页| 亚洲福利视频三区| 亚洲尤物在线视频观看| 一个色在线综合| 亚洲一区二区三区免费视频| 亚洲天天做日日做天天谢日日欢| 亚洲区小说区图片区qvod| 亚洲色欲色欲www在线观看| 亚洲天堂精品视频| 亚洲制服丝袜一区| 视频一区国产视频| 免费看欧美美女黄的网站| 精品制服美女久久| 国产91高潮流白浆在线麻豆 | 色久综合一二码| 欧美日韩在线播放三区四区| 91麻豆精品国产91久久久久久久久 | 亚洲品质自拍视频| 亚洲午夜久久久久久久久电影网 | 日本不卡的三区四区五区| 美女高潮久久久| 国产不卡在线播放| 91麻豆文化传媒在线观看| 欧美亚洲综合一区| 日韩欧美视频在线 | 精品久久免费看| 国产日本一区二区| 一区二区三区四区中文字幕| 日日夜夜一区二区| 国产一区二区视频在线| 91色porny| 日韩一区二区视频在线观看| 久久精品无码一区二区三区| 一区二区三区在线免费| 美国毛片一区二区三区| 成人午夜av电影| 欧美日韩亚洲综合在线| 久久久久久久综合色一本| 一区二区三区中文字幕精品精品| 蜜桃一区二区三区在线观看| 成人精品视频.| 欧美一区二区视频观看视频| 国产精品久久夜| 日本女优在线视频一区二区| www.欧美色图| 日韩精品一区二区三区四区 | 精品国产乱码久久| 亚洲日本在线天堂| 国内外精品视频| 在线观看国产日韩| 久久久精品人体av艺术| 日韩精品五月天| 99r精品视频| 精品国产91乱码一区二区三区| 亚洲影视在线播放| 成人涩涩免费视频| 日韩视频一区在线观看| 亚洲一区二区三区自拍| 成人午夜大片免费观看| 精品国产精品网麻豆系列| 亚洲最新在线观看| 成人免费视频播放| 久久夜色精品国产欧美乱极品| 亚洲国产精品久久艾草纯爱| 99国产精品99久久久久久| 精品国产凹凸成av人网站| 欧美精品乱人伦久久久久久| 欧美麻豆精品久久久久久| 一区在线中文字幕| 国产精品影视在线观看| 91丨国产丨九色丨pron| 国产午夜精品久久久久久免费视| 免费精品视频在线| 欧美日韩视频第一区| √…a在线天堂一区| 丁香婷婷综合五月| 久久久精品综合| 国产夫妻精品视频| 久久综合丝袜日本网| 久久精品国产精品青草| 日韩一区二区三区电影在线观看| 亚洲va在线va天堂| 欧美日韩中文字幕一区二区| 一区二区三区四区精品在线视频 | 午夜不卡在线视频|