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

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

?? 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 ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香婷婷综合色啪| 欧美做爰猛烈大尺度电影无法无天| 国产精品乱子久久久久| 欧美人与z0zoxxxx视频| 欧美日本一区二区| 欧美日韩不卡在线| 欧美精品日韩精品| 日韩写真欧美这视频| 日韩情涩欧美日韩视频| 日韩精品中文字幕一区| 欧美mv日韩mv亚洲| 久久精品人人做人人综合 | 成人av在线一区二区三区| 国产高清精品网站| caoporm超碰国产精品| 91在线视频18| 欧美精品在线观看播放| 欧美va亚洲va| 亚洲色图制服诱惑| 午夜激情一区二区三区| 久久国产精品99久久人人澡| 国产一区二区久久| 99精品国产一区二区三区不卡 | 91网页版在线| 91在线视频播放地址| 欧美日免费三级在线| 日韩欧美中文字幕制服| 国产视频一区二区三区在线观看| 亚洲欧洲成人精品av97| 日韩av中文字幕一区二区 | 成人免费观看男女羞羞视频| www.亚洲免费av| 欧美日韩精品欧美日韩精品一| 日韩欧美国产午夜精品| 中文字幕免费在线观看视频一区| 亚洲自拍偷拍麻豆| 国产在线观看免费一区| 色欧美日韩亚洲| 久久亚洲私人国产精品va媚药| 亚洲日本丝袜连裤袜办公室| 久久99这里只有精品| 91免费视频网| 国产亚洲制服色| 日韩成人精品在线| 99国内精品久久| wwwwww.欧美系列| 日韩制服丝袜先锋影音| 99久久久久久| 久久蜜桃av一区二区天堂| 五月天国产精品| 91麻豆免费看| 欧美国产成人在线| 九色porny丨国产精品| 色综合咪咪久久| 国产清纯白嫩初高生在线观看91| 天堂av在线一区| 日韩片之四级片| 亚洲超碰精品一区二区| 91片黄在线观看| 国产精品午夜春色av| 国产乱码精品一区二区三 | 美美哒免费高清在线观看视频一区二区| 国产成人亚洲综合a∨婷婷| 日韩一区二区三区视频| 亚洲一区二区三区中文字幕| 99精品黄色片免费大全| 国产精品美女久久久久高潮 | 国产精品毛片a∨一区二区三区| 免费观看成人av| 欧美一区二区视频网站| 偷窥少妇高潮呻吟av久久免费| 日本高清视频一区二区| 亚洲欧美视频一区| 日本高清不卡在线观看| 亚洲免费成人av| 日本韩国一区二区| 亚洲国产精品视频| 欧美日韩国产片| 日本成人在线视频网站| 日韩一区二区精品葵司在线| 美女诱惑一区二区| 国产亚洲欧美在线| 成人精品视频一区二区三区| 国产精品免费观看视频| 99精品国产一区二区三区不卡| 18涩涩午夜精品.www| 日本精品免费观看高清观看| 亚洲成人手机在线| 欧美一级黄色片| 国产高清精品网站| 亚洲图片激情小说| 欧美日韩亚洲高清一区二区| 免费观看在线综合色| 国产亚洲精品bt天堂精选| 成人avav在线| 亚洲高清久久久| 精品黑人一区二区三区久久| 国产aⅴ综合色| 一区二区三区久久| 日韩视频在线你懂得| 粉嫩绯色av一区二区在线观看 | 欧美理论在线播放| 激情综合五月婷婷| 亚洲私人影院在线观看| 7777精品伊人久久久大香线蕉的| 国产一区二区三区最好精华液| 中文字幕免费不卡在线| 欧美日本一区二区| 国产精品一级二级三级| 一区二区三区在线观看网站| 日韩免费观看2025年上映的电影 | 在线成人午夜影院| 国产在线精品一区二区夜色 | 亚洲免费av观看| 欧美一级二级在线观看| 99国产精品视频免费观看| 亚洲电影第三页| 国产免费成人在线视频| 欧美精选一区二区| 91在线精品一区二区| 精品亚洲成a人| 午夜精品久久久久久久久久久| 国产精品三级久久久久三级| 4438x成人网最大色成网站| 91丨porny丨首页| 国产精品一二三四区| 日韩精品91亚洲二区在线观看| 国产精品妹子av| 久久久综合精品| 日韩一区二区三区免费观看| 欧美综合一区二区| 99r国产精品| 国产**成人网毛片九色 | 亚洲女爱视频在线| 国产欧美日产一区| 精品人在线二区三区| 欧美丰满少妇xxxxx高潮对白| 91免费看片在线观看| 国产一区二区三区免费看| 日本在线不卡一区| 天天操天天干天天综合网| 亚洲一本大道在线| 亚洲午夜久久久久| 一区二区成人在线视频| 亚洲激情网站免费观看| 成人免费在线观看入口| 国产精品网站在线观看| 国产欧美一区二区三区沐欲| 久久日韩精品一区二区五区| 日韩精品一区在线| 日韩欧美亚洲国产另类| 欧美高清hd18日本| 91精品国产综合久久婷婷香蕉| 色女孩综合影院| 色婷婷av一区二区三区gif| 色婷婷精品久久二区二区蜜臂av| 99国产欧美久久久精品| 91热门视频在线观看| 91九色最新地址| 欧美精品三级在线观看| 日韩一区二区三区在线| 精品日产卡一卡二卡麻豆| 久久久久久毛片| 中文字幕欧美日本乱码一线二线| 国产精品电影一区二区三区| 亚洲视频你懂的| 亚洲一区二区三区四区五区中文| 首页国产丝袜综合| 激情综合网最新| 成人精品鲁一区一区二区| 91在线云播放| 欧美美女黄视频| 精品99久久久久久| 国产精品免费久久| 石原莉奈在线亚洲三区| 国产呦萝稀缺另类资源| 成人午夜在线视频| 欧美特级限制片免费在线观看| 91精品国产免费久久综合| 国产亚洲一二三区| 亚洲综合一区在线| 九色综合国产一区二区三区| 成人黄色大片在线观看| 欧美军同video69gay| 久久久久国产精品人| 亚洲精品成a人| 国产一区二区伦理片| 色视频欧美一区二区三区| 精品国产电影一区二区| 一区二区三区中文字幕| 韩国女主播成人在线观看| 一本久久a久久精品亚洲| 日韩一区二区三区电影在线观看| 国产精品情趣视频| 奇米精品一区二区三区四区| voyeur盗摄精品| 精品国产123| 国产精品视频在线看| av网站免费线看精品| 欧美伦理视频网站|