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

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

?? flash.c

?? 使用arm7芯片
?? 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 : SAM7 product
//*
//* 1.0 01/Jul/04 JPP       : Creation
//*--------------------------------------------------------------------------------------

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

#include "flash.h"

/* Target Identification */
#define TARGET_ID           "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 ;

    // Enter Programming code sequence
    *(base_addr + FLASH_SEQ_ADD1) = FLASH_CODE1 ;
    *(base_addr + FLASH_SEQ_ADD2) = FLASH_CODE2 ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性一区二区| 久久久美女艺术照精彩视频福利播放| 久久疯狂做爰流白浆xx| 亚洲美女屁股眼交3| 精品99久久久久久| 91极品视觉盛宴| 国产综合久久久久影院| 视频一区视频二区中文字幕| 日韩伦理电影网| 久久久久久久久蜜桃| 在线不卡欧美精品一区二区三区| 99久久综合狠狠综合久久| 久久国产尿小便嘘嘘尿| 日韩av一区二区在线影视| 亚洲精品一二三四区| 中国av一区二区三区| 精品久久久久久久久久久久久久久久久| 色综合天天综合网国产成人综合天 | 欧日韩精品视频| 高清不卡一区二区在线| 久久97超碰国产精品超碰| 午夜精品久久久久久久久久久| 亚洲欧美综合在线精品| 久久精品人人做人人爽人人| 精品国产1区二区| 精品国产在天天线2019| 欧美一区二区在线播放| 91麻豆精品国产91久久久资源速度 | 国产欧美精品一区二区色综合朱莉| 日韩精品在线看片z| 欧美群妇大交群中文字幕| 在线观看三级视频欧美| 91日韩在线专区| 色妹子一区二区| 欧美日韩一区二区欧美激情| av网站一区二区三区| 91视频国产观看| 99久久婷婷国产综合精品| 成人性生交大合| 成人免费视频网站在线观看| 高清不卡在线观看| av在线不卡电影| 99视频超级精品| 91浏览器打开| 欧洲人成人精品| 4438x成人网最大色成网站| 日韩一区二区麻豆国产| 欧美xxxxx牲另类人与| 久久久久99精品国产片| 国产精品视频在线看| 中文字幕日本不卡| 一区二区三区高清不卡| 午夜精品福利一区二区三区av | 国模无码大尺度一区二区三区| 美女网站一区二区| 国产剧情在线观看一区二区| 国产不卡免费视频| 91视频国产观看| 制服丝袜国产精品| 精品国产一区二区三区av性色 | 国产欧美精品区一区二区三区 | 久久久久久久一区| 国产精品国产成人国产三级| 一区二区三区色| 另类综合日韩欧美亚洲| 国产99精品国产| 91久久精品一区二区三| 欧美区视频在线观看| 久久久久久久网| 悠悠色在线精品| 美女网站一区二区| 成人黄色片在线观看| 欧美日韩一本到| 久久久影视传媒| 一区二区三区在线免费| 捆绑变态av一区二区三区| 国产一区二区在线看| 色综合久久中文字幕综合网 | 一区二区三区高清| 精品夜夜嗨av一区二区三区| 成人app网站| 欧美一区二区在线看| 国产精品久久久久久久久搜平片| 1024国产精品| 久久久久国产精品麻豆ai换脸 | 5月丁香婷婷综合| 亚洲精品在线观| 亚洲黄色尤物视频| 国内一区二区视频| 色婷婷久久久综合中文字幕 | 欧美高清视频www夜色资源网| 欧美精品一区二区久久婷婷| 一区二区三区在线观看网站| 久久99久久久欧美国产| 91在线视频在线| 精品国一区二区三区| 日韩毛片视频在线看| 日韩一区精品视频| 91麻豆免费看| 久久精品欧美一区二区三区麻豆| 亚洲一区二区三区四区不卡| 国产在线日韩欧美| 欧美日韩不卡视频| 亚洲欧美日韩久久| 国产成人亚洲综合a∨猫咪| 欧美一区二区三区思思人| 亚洲欧美日韩国产另类专区| 国产a精品视频| 91精品国产综合久久久久久漫画 | 欧美电视剧免费观看| 亚洲综合色噜噜狠狠| 成人av在线电影| 久久精品人人做人人爽人人| 老汉av免费一区二区三区| 欧美少妇xxx| 亚洲精品欧美二区三区中文字幕| 国产福利电影一区二区三区| 日韩欧美在线1卡| 亚洲超丰满肉感bbw| 91美女片黄在线| 亚洲丝袜美腿综合| thepron国产精品| 欧美激情一区二区| 国产精品系列在线播放| 欧美成人女星排行榜| 麻豆成人在线观看| 日韩一区二区在线观看视频 | 欧美一区二区三区视频免费| 亚洲第一成人在线| 欧美日韩mp4| 亚洲动漫第一页| 欧美精品1区2区| 日韩激情视频网站| 欧美一区二区大片| 久久福利视频一区二区| 精品成人私密视频| 国产精品77777| 亚洲国产精品黑人久久久| 北条麻妃一区二区三区| 中文字幕亚洲不卡| 91在线视频播放地址| 亚洲乱码国产乱码精品精可以看| 99久久久久免费精品国产| 亚洲精品国产精华液| 欧美私模裸体表演在线观看| 午夜电影网一区| 日韩一区二区视频| 国内一区二区在线| 国产精品久久久久久亚洲伦| 99久精品国产| 亚洲国产精品天堂| 91精品国产全国免费观看| 精品一区二区三区免费| 国产精品色婷婷久久58| 91丨porny丨最新| 亚洲18影院在线观看| 日韩一区二区三| 岛国av在线一区| 一区二区三区在线观看动漫| 5858s免费视频成人| 国产精品一二三区在线| 亚洲欧美另类小说| 91精品国产综合久久久久久| 韩国欧美国产1区| 亚洲日穴在线视频| 日韩一卡二卡三卡四卡| 国产精品亚洲午夜一区二区三区 | 一区二区三区中文免费| 91.成人天堂一区| 国产乱码精品一区二区三区av | 亚洲最新视频在线播放| 日韩一区二区免费电影| 成人app下载| 免费人成精品欧美精品| 国产丝袜在线精品| 欧美三电影在线| 国产九色精品成人porny | 亚洲天堂av老司机| 欧美一区二区三区在线看| 成人污污视频在线观看| 日韩高清在线电影| 国产精品福利一区二区三区| 欧美日韩大陆在线| www.日韩大片| 久久99久久99小草精品免视看| 日韩毛片视频在线看| 精品美女一区二区| 欧美日韩视频在线第一区| 成人一区二区三区| 奇米精品一区二区三区在线观看| 国产精品网站导航| 欧美成人一区二区三区| 在线精品国精品国产尤物884a| 国产精品白丝jk黑袜喷水| 婷婷国产在线综合| 亚洲欧美在线aaa| 久久久综合九色合综国产精品| 欧美日韩国产美女| 色菇凉天天综合网| 国产91丝袜在线观看|