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

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

?? flash.c

?? AT91SAM7S64芯片flash讀寫程序
?? C
字號:
//*----------------------------------------------------------------------------
//*         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 routine
//* Creation            : JPP   30/Jun/2004
//* Modif               : JPM   16/Nov/2004 Flash write status
//* 1.1   12/Sep/05 JPP : Change MC_FMR Setting
//*----------------------------------------------------------------------------

// Include Standard files
#include "Board.h"
#include "Flash.h"

extern  void AT91F_disable_interrupt(void);
extern  void AT91F_enable_interrupt(void);


//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Init
//* \brief Flash init
//*----------------------------------------------------------------------------
void AT91F_Flash_Init (void)
{
    //* Set number of Flash Waite sate
    //  SAM7S64 features Single Cycle Access at Up to 30 MHz
    //  if MCK = 47923200, 72 Cycles for 1 祍econde ( field MC_FMR->FMCN)
        AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(72 <<16)) | AT91C_MC_FWS_1FWS ;
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Init
//* \brief Flash init
//*----------------------------------------------------------------------------
void AT91F_NVM_Init (void)
{
    //* Set number of Flash Waite sate
    //  SAM7S64 features Single Cycle Access at Up to 30 MHz
    //  if MCK = 47923200, 48 Cycles for 1 祍econde ( field MC_FMR->FMCN)
        AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(48 <<16)) | AT91C_MC_FWS_1FWS ;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Ready
//* \brief Wait the flash ready
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Ready (void)
{
    unsigned int status;
    status = 0;

    //* Wait the end of command
        while ((status & AT91C_MC_FRDY) != AT91C_MC_FRDY )
        {
          status = AT91C_BASE_MC->MC_FSR;
        }
        return status;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Lock_Status
//* \brief Get the Lock bits field status
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Lock_Status(void)
{
  return (AT91C_BASE_MC->MC_FSR & AT91C_MC_FSR_LOCK);
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Lock
//* \brief Write the lock bit and set at 0 FSR Bit = 1
//* \input page number (0-1023)
//* \output Region
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Lock (unsigned int Flash_Lock_Page)
{
    //* set the Flash controller base address
        AT91PS_MC ptMC = AT91C_BASE_MC;

        AT91F_NVM_Init();
    //* write the flash
	//* Protect
		AT91F_disable_interrupt();
    //* Write the Set Lock Bit command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_LOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) ;

    //* Wait the end of command
         AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();


  return (AT91F_Flash_Lock_Status());
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Unlock
//* \brief Clear the lock bit and set at 1 FSR bit=0
//* \input page number (0-1023)
//* \output Region
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Unlock(unsigned int Flash_Lock_Page)
{
	    AT91F_NVM_Init();

	//* Protect
		AT91F_disable_interrupt();
    //* Write the Clear Lock Bit command
        AT91C_BASE_MC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_UNLOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) ;

    //* Wait the end of command
        AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();

  return (AT91F_Flash_Lock_Status());
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Erase_All
//* \brief Send command erase all flash
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Erase_All(void)
{
        AT91F_Flash_Init();
	//* Protect
		AT91F_disable_interrupt();
    //* set the Flash controller base address
        AT91PS_MC ptMC = AT91C_BASE_MC;
    //* Write the Erase All command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_ERASE_ALL ;
    //* Wait the end of command
        AT91F_Flash_Ready();
   //* Protect
		AT91F_enable_interrupt();
    //* Check the result
        return ( (ptMC->MC_FSR & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))==0) ;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Write
//* \brief Write in one Flash page located in AT91C_IFLASH,  size in 32 bits
//* \input Flash_Address: start at 0x0010 0000 size: in byte
//*----------------------------------------------------------------------------
__ramfunc int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff)
{
    //* set the Flash controller base address
    AT91PS_MC ptMC = AT91C_BASE_MC;
    unsigned int i, page, status;
    unsigned int * Flash;
    //* init flash pointer
        Flash = (unsigned int *) Flash_Address;

        AT91F_Flash_Init();
   //* Get the Flash page number
        page = ((Flash_Address - (unsigned int)AT91C_IFLASH ) /FLASH_PAGE_SIZE_BYTE);
   //* copy the new value
	for (i=0; (i < FLASH_PAGE_SIZE_BYTE) & (size > 0) ;i++, Flash++,buff++,size-=4 ){
	//* copy the flash to the write buffer ensuring code generation
	    *Flash=*buff;
	}
	//* Protect
		AT91F_disable_interrupt();
    //* Write the write page command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (page <<8)) ;
    //* Wait the end of command
        status = AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();

    //* Check the result
    if ( (status & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))!=0) return false;
  return true;
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_NVM_Status
//* \brief Get the NVM field status
//*----------------------------------------------------------------------------
__ramfunc int AT91F_NVM_Status(void)
{
  return (AT91C_BASE_MC->MC_FSR & AT91C_MC_FSR_MVM);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_NVM_Set
//* \brief Write the Non Volatile Memory Bits and set at 0 FSR Bit = 1
//*----------------------------------------------------------------------------
__ramfunc int AT91F_NVM_Set (unsigned char NVM_Number)
{
        AT91F_NVM_Init();
    //* set the Flash controller base address
        AT91PS_MC ptMC = AT91C_BASE_MC;
	//* Protect
		AT91F_disable_interrupt();

	 //* write the flash
    //* Write the Set NVM Bit command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_SET_GP_NVM | (AT91C_MC_PAGEN & (NVM_Number << 8) ) ;

    //* Wait the end of command
        AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();

  return (AT91F_NVM_Status());
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_NVM_Clear
//* \brief Clear the Non Volatile Memory Bits and set at 1 FSR bit=0
//*----------------------------------------------------------------------------
__ramfunc int AT91F_NVM_Clear(unsigned char NVM_Number)
{
        AT91F_NVM_Init();
    //* set the Flash controller base address
        AT91PS_MC ptMC = AT91C_BASE_MC;

	//* Protect
		AT91F_disable_interrupt();
	 //* write the flash
    //* Write the Clear NVM Bit command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_CLR_GP_NVM | (AT91C_MC_PAGEN & (NVM_Number << 8) ) ;

    //* Wait the end of command
       AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();


  return (AT91F_NVM_Status());
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SET_Security_Status
//* \brief Get Flash Security Bit Status
//*----------------------------------------------------------------------------
__ramfunc int AT91F_SET_Security_Status (void)
{
  return (AT91C_BASE_MC->MC_FSR & AT91C_MC_SECURITY);
}

//*----------------------------------------------------------------------------
//* \fn AT91F_SET_Security
//* \brief Set Flash Security Bit
//*----------------------------------------------------------------------------
__ramfunc int AT91F_SET_Security (void)
{
        AT91F_NVM_Init();
	//* Protect
		AT91F_disable_interrupt();
	 //* write the flash
    //* Write the Set Security Bit command
        AT91C_BASE_MC->MC_FCR = ( AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_SET_SECURITY ) ;

    //* Wait the end of command
       AT91F_Flash_Ready();
    //* Protect
		AT91F_enable_interrupt();

  return (AT91F_SET_Security_Status());
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Check_Erase
//* \brief Check the memory at 0xFF in 32 bits access
//*----------------------------------------------------------------------------
int AT91F_Flash_Check_Erase (unsigned int * start, unsigned int size)
{
	unsigned int i;
    //* Check if flash is erased
	for (i=0; i < (size/4) ; i++ )
	{
	    if ( start[i] != ERASE_VALUE ) return  false;
	}
	return true ;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Write_all
//* \brief Write in one Flash page located in AT91C_IFLASH,  size in byte
//* \input Start address (base=AT91C_IFLASH) size (in byte ) and buff address
//*----------------------------------------------------------------------------
int AT91F_Flash_Write_all( unsigned int Flash_Address ,int size ,unsigned int * buff)
{

    int   next, status;
    unsigned int  dest;
    unsigned int * src;

    dest = Flash_Address;
    src = buff;
    status = true;

    while( (status == true) & (size > 0) )
	{
        //* Check the size
        if (size <= FLASH_PAGE_SIZE_BYTE) next = size;
        else next = FLASH_PAGE_SIZE_BYTE;

        //* Unlock current sector base address - current address by sector size
        AT91F_Flash_Unlock((dest - (unsigned int)AT91C_IFLASH ) /FLASH_PAGE_SIZE_BYTE);

        //* Write page and get status
        status = AT91F_Flash_Write( dest ,next ,src);
        // * get next page param
        size -= next;
        src += FLASH_PAGE_SIZE_BYTE/4;
        dest +=  FLASH_PAGE_SIZE_BYTE;
	}
    return status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡高清视频专区| 欧美高清视频一二三区| 91一区二区在线观看| 91精品国产综合久久婷婷香蕉| 精品久久久久久亚洲综合网| 一区二区三区在线免费播放| 狠狠色丁香久久婷婷综合_中| 日本高清不卡一区| 久久嫩草精品久久久久| 五月婷婷久久丁香| www.66久久| 久久久久九九视频| 日韩国产一二三区| 91亚洲精品久久久蜜桃| 久久久高清一区二区三区| 日韩成人av影视| 91久久精品日日躁夜夜躁欧美| xnxx国产精品| 久久精品99国产国产精| 欧美日韩免费电影| 一区二区三区四区不卡视频| 不卡的av在线| 国产精品久久久久aaaa| 国产91丝袜在线18| 久久日一线二线三线suv| 亚洲成精国产精品女| 色视频成人在线观看免| 日韩理论片一区二区| 暴力调教一区二区三区| 欧美高清在线精品一区| 成人不卡免费av| 国产精品久线观看视频| av一区二区三区四区| 国产精品午夜电影| 高清不卡在线观看av| 国产精品国产三级国产aⅴ中文| 成人网男人的天堂| ...xxx性欧美| 一本久道久久综合中文字幕| 亚洲一线二线三线视频| 欧美吞精做爰啪啪高潮| 亚洲国产日韩精品| 欧美一区二区网站| 国产一区二区三区在线看麻豆| xf在线a精品一区二区视频网站| 国模套图日韩精品一区二区| 国产亚洲一区二区三区四区| jlzzjlzz亚洲日本少妇| 亚洲一区在线看| 欧美一级视频精品观看| 国产精品99久久久久久久女警| 久久久影视传媒| 成人美女视频在线看| 亚洲欧美福利一区二区| 制服丝袜中文字幕一区| 国产乱码精品一区二区三区av| 国产日韩欧美精品综合| 在线观看网站黄不卡| 毛片av一区二区| 中国av一区二区三区| 欧美视频中文字幕| 激情深爱一区二区| 亚洲精品成人悠悠色影视| 欧美肥大bbwbbw高潮| 国产99久久久国产精品潘金网站| 一区二区不卡在线视频 午夜欧美不卡在| 欧美视频日韩视频| 国产一区不卡在线| 亚洲国产视频直播| 国产日韩欧美精品电影三级在线| 在线视频国内一区二区| 国产在线麻豆精品观看| 一区二区三区成人| 久久久五月婷婷| 在线免费精品视频| 国产99一区视频免费| 日韩精品亚洲一区| 亚洲欧洲日本在线| 久久久激情视频| 欧美一区二区女人| 色偷偷成人一区二区三区91 | 国产一区二区不卡| 亚洲亚洲人成综合网络| 日本一区二区三区四区在线视频| 欧美喷潮久久久xxxxx| av网站一区二区三区| 久久精品久久精品| 五月天激情小说综合| 国产精品国产三级国产aⅴ原创| 日韩久久精品一区| 欧美三级电影网| 91麻豆国产精品久久| 国产乱理伦片在线观看夜一区| 亚洲大片一区二区三区| 亚洲欧美日韩久久| 国产农村妇女毛片精品久久麻豆| 日韩午夜在线播放| 欧美日高清视频| 欧美日韩色一区| 在线观看欧美黄色| 成人永久免费视频| 国产成人精品一区二区三区四区 | 久久久www成人免费毛片麻豆| 欧美日韩国产高清一区| 日本道精品一区二区三区| 成人午夜激情影院| 成人av动漫网站| 成人ar影院免费观看视频| 东方欧美亚洲色图在线| 国产精品中文字幕欧美| 黄色精品一二区| 国内精品免费**视频| 奇米影视7777精品一区二区| 首页国产欧美久久| 视频在线观看一区二区三区| 婷婷开心激情综合| 亚洲成人精品影院| 视频一区在线播放| 另类小说图片综合网| 精品亚洲国内自在自线福利| 美女mm1313爽爽久久久蜜臀| 久久精品免费观看| 国产精品一色哟哟哟| 国产91在线|亚洲| 91免费在线播放| 欧美日韩一区小说| 91精品国产麻豆国产自产在线| 717成人午夜免费福利电影| 欧美一区二区三区色| 欧美电影免费观看高清完整版 | 成人福利在线看| 91在线视频播放地址| 欧美性三三影院| 日韩一区二区电影网| 久久久久97国产精华液好用吗| 亚洲国产岛国毛片在线| 亚洲免费在线视频一区 二区| 亚洲福利一二三区| 国产资源在线一区| 不卡的电影网站| 欧美美女激情18p| 337p粉嫩大胆色噜噜噜噜亚洲 | 精品国产一区二区国模嫣然| 久久影院电视剧免费观看| 中文字幕一区二区三区四区不卡| 亚洲综合免费观看高清在线观看| 日本亚洲最大的色成网站www| 国产精品综合一区二区| 色狠狠色噜噜噜综合网| 日韩三区在线观看| 国产精品传媒入口麻豆| 日韩国产欧美视频| 国产精品91xxx| 欧美午夜影院一区| 国产欧美一区二区三区网站| 一个色妞综合视频在线观看| 久久精品国产精品亚洲红杏| 99精品黄色片免费大全| 欧美哺乳videos| 一区二区三区在线观看视频| 激情综合网最新| 欧美亚洲综合久久| 国产欧美日韩亚州综合| 日韩精品欧美精品| 91麻豆国产福利在线观看| 精品久久久久久亚洲综合网 | 亚洲另类在线视频| 国产在线日韩欧美| 3d动漫精品啪啪一区二区竹菊| 欧美经典一区二区| 青青草一区二区三区| 91久久国产最好的精华液| 国产免费成人在线视频| 久久不见久久见免费视频7| 欧美亚洲愉拍一区二区| ●精品国产综合乱码久久久久| 久久se这里有精品| 欧美精品第1页| 亚洲一区在线免费观看| 91片在线免费观看| 欧美经典三级视频一区二区三区| 久久精品72免费观看| 91麻豆精品91久久久久久清纯| 亚洲欧美欧美一区二区三区| 成人精品高清在线| 国产日韩欧美麻豆| 国产精品一区二区男女羞羞无遮挡| 欧美人妇做爰xxxⅹ性高电影| 一区二区三区在线观看欧美| 91在线国产福利| 亚洲日本va在线观看| 成人av电影免费在线播放| 亚洲国产精品99久久久久久久久| 精品亚洲aⅴ乱码一区二区三区| 欧美丰满高潮xxxx喷水动漫| 亚洲成a人片在线不卡一二三区| 欧洲亚洲国产日韩| 午夜一区二区三区在线观看| 在线免费观看成人短视频| 一区二区日韩电影|