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

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

?? flash.c

?? ATMEL ATSAM7S64處理器部分控制程序。
?? 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
//*----------------------------------------------------------------------------

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

/*-------------------------------*/
/* Flash Status Field Definition */
/*-------------------------------*/

#define 	AT91C_MC_FSR_MVM 		((unsigned int) 0xFF << 8)		// (MC) Status Register GPNVMx: General-purpose NVM Bit Status
#define 	AT91C_MC_FSR_LOCK 		((unsigned int) 0xFFFF << 16)	// (MC) Status Register LOCKSx: Lock Region x Lock Status


#define	 ERASE_VALUE 		0xFFFFFFFF

/*-----------------------*/
/* Flash size Definition */
/*-----------------------*/
/* 64 Kbytes of Internal High-speed Flash, Organized in 512 Pages of 128 Bytes */

#define  FLASH_PAGE_SIZE_BYTE	128
#define  FLASH_PAGE_SIZE_LONG	32

#define  FLASH_LOCK_BITS_SECTOR	16
#define  FLASH_SECTOR_PAGE		32
#define  FLASH_LOCK_BITS		16    /* 16 lock bits, each protecting 16 sectors of 32 pages*/
#define  FLASH_BASE_ADDRESS		0x00100000
/*------------------------------*/
/* External function Definition */
/*------------------------------*/

/* Flash function */
extern void AT91F_Flash_Init(void);
extern int AT91F_Flash_Check_Erase(unsigned int * start, unsigned int size);
extern int AT91F_Flash_Erase_All(void);
extern int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff);
extern int AT91F_Flash_Write_all( unsigned int Flash_Address ,int size ,unsigned int * buff);

/* Lock Bits functions */
extern int AT91F_Flash_Lock_Status(void);
extern int AT91F_Flash_Lock (unsigned int Flash_Lock);
extern int AT91F_Flash_Unlock(unsigned int Flash_Lock);

/* NVM bits functions */
extern int AT91F_NVM_Status(void);
extern int AT91F_NVM_Set (unsigned char NVM_Number);
extern int AT91F_NVM_Clear(unsigned char NVM_Number);

/* Security bit function */
extern int AT91F_SET_Security_Status (void);
extern int AT91F_SET_Security (void);

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Init
//* \brief Flash init
//*----------------------------------------------------------------------------
void AT91F_Flash_Init (void)
{
    //* Set Flash Waite sate
    //  Single Cycle Access at Up to 30 MHz
    //  if MCK = 47923200 I have 50 Cycle for 1 useconde ( flied MC_FMR->FMCN)
    //  = A page erase is performed before programming.
        AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50 <<16)) | AT91C_MC_FWS_1FWS ;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Ready
//* \brief Wait the flash ready
//*----------------------------------------------------------------------------
 void AT91F_Flash_Ready (void)
{
    //* Wait the and of command
          while ((AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != AT91C_MC_FRDY ) {};
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Lock_Status
//* \brief Get the MVM fild status
//*----------------------------------------------------------------------------
 int AT91F_Flash_Lock_Status(void)
{
  return (AT91C_BASE_MC->MC_FSR & AT91C_MC_FSR_LOCK);
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Lock
//* \brief Wirte the Non Volatile Memory Bits and set at 0 FSR Bit = 1
//* \input page number (0-1023) a same region have some page
//* \output Region
//*----------------------------------------------------------------------------
 int AT91F_Flash_Lock (unsigned int Flash_Lock_Page)
{
    //* set the Flasc controler base address
        AT91PS_MC ptMC = AT91C_BASE_MC;

	 //* write the flash
    //* Write the Errase All command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_LOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) ;

    //* Wait the and of command
         AT91F_Flash_Ready();

  return (AT91F_Flash_Lock_Status());
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Unlock
//* \brief Clear the Non Volatile Memory Bits and set at 1 FSR bit=0
//* \input page number (0-1023) a same region have some page (16)
//* \output Region
//*----------------------------------------------------------------------------
 int AT91F_Flash_Unlock(unsigned int Flash_Lock_Page)
{
    //* Write the Errase All command
        AT91C_BASE_MC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_UNLOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) ;

    //* Wait the and of command
        AT91F_Flash_Ready();

  return (AT91F_Flash_Lock_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 fash it erased
	for (i=0; i < (size/4) ; i++ )
	{
	    if ( start[i] != ERASE_VALUE ) return  false;
	}
	return true ;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Erase_All
//* \brief Send command erase all flash
//*----------------------------------------------------------------------------
 int AT91F_Flash_Erase_All(void)
{
    //* set the Flasc controler base address
        AT91PS_MC ptMC = AT91C_BASE_MC;
    //* Write the Errase All command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_ERASE_ALL ;
    //* Wait the and of command
        AT91F_Flash_Ready();
    //* 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
//*----------------------------------------------------------------------------
 int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff)
{
    //* set the Flasc controler base address
    AT91PS_MC ptMC = AT91C_BASE_MC;
    unsigned int i, page;
    unsigned int * Flash;
    //* init flash pointer
        Flash = (unsigned int *) Flash_Address;
    //* Get the Flasg 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 ensure that code generation
	    *Flash=*buff;
	}
    //* Write the Errase_All command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (page <<8)) ;
    //* Wait the end of command
         AT91F_Flash_Ready();
    //* Check the result
        if ( (ptMC->MC_FSR & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))!=0) return false;
  return true;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Write
//* \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 - curent 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;
}

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

//*----------------------------------------------------------------------------
//* \fn    AT91F_NVM_Set
//* \brief Wirte the Non Volatile Memory Bits and set at 0 FSR Bit = 1
//*----------------------------------------------------------------------------
 int AT91F_NVM_Set (unsigned char NVM_Number)
{
    //* set the Flasc controler base address
        AT91PS_MC ptMC = AT91C_BASE_MC;

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

    //* Wait the and of command
        AT91F_Flash_Ready();
  return (AT91F_NVM_Status());
}
//*----------------------------------------------------------------------------
//* \fn    AT91F_NVM_Clear
//* \brief Clear the Non Volatile Memory Bits and set at 1 FSR bit=0
//*----------------------------------------------------------------------------
 int AT91F_NVM_Clear(unsigned char NVM_Number)
{
    //* set the Flasc controler base address
        AT91PS_MC ptMC = AT91C_BASE_MC;

	 //* write the flash
    //* Write the Errase All command
        ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_CLR_GP_NVM | (AT91C_MC_PAGEN & (NVM_Number << 8) ) ;

    //* Wait the and of command
       AT91F_Flash_Ready();

  return (AT91F_NVM_Status());
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SET_Security_Status
//* \brief Wirte the Non Volatile Memory Bits and set at 0 FSR secutity = 1
//*----------------------------------------------------------------------------
int AT91F_SET_Security_Status (void)
{
  return (AT91C_BASE_MC->MC_FSR & AT91C_MC_SECURITY);
}

//*----------------------------------------------------------------------------
//* \fn AT91F_SET_Security
//* \brief Wirte the Non Volatile Memory Bits and set at 0 FSR secutity = 1
//*----------------------------------------------------------------------------
int AT91F_SET_Security (void)
{
	 //* write the flash
    //* Write the Errase All command
        AT91C_BASE_MC->MC_FCR = ( AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_SET_SECURITY ) ;

    //* Wait the and of command
       AT91F_Flash_Ready();

  return (AT91F_SET_Security_Status());
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色久综合一二码| 日韩一区二区三区电影| 七七婷婷婷婷精品国产| 国产精品久久久久久妇女6080 | 国产精品国产自产拍在线| 91精品在线观看入口| jiyouzz国产精品久久| 毛片不卡一区二区| 一区二区三区免费观看| 中文字幕免费一区| 久久久久97国产精华液好用吗| 欧美日韩精品一区二区三区四区| youjizz国产精品| 国产一区二区伦理| 日韩av中文字幕一区二区三区| 亚洲人成网站影音先锋播放| 欧美激情在线观看视频免费| 精品日韩一区二区三区| 在线观看91av| 欧美偷拍一区二区| 91麻豆蜜桃一区二区三区| 懂色av中文一区二区三区| 久久精品99久久久| 日本女人一区二区三区| 一区二区高清在线| 1000精品久久久久久久久| 国产精品午夜电影| 国产色产综合产在线视频| 精品少妇一区二区三区免费观看| 欧美日韩高清一区二区三区| 在线观看欧美日本| 日本精品一级二级| 色狠狠综合天天综合综合| av一区二区三区四区| 成人激情免费网站| hitomi一区二区三区精品| 成人性生交大合| 成人午夜视频在线观看| 国产高清成人在线| 国产精品亚洲成人| 国产很黄免费观看久久| 国产伦精品一区二区三区免费 | 色综合天天综合| 成人高清免费观看| 国产精品一二三四五| 国产福利精品导航| 丁香啪啪综合成人亚洲小说 | 色狠狠色噜噜噜综合网| 91麻豆国产在线观看| 色婷婷综合久色| 欧美日韩一二区| 欧美一级高清片| 日韩欧美高清一区| 久久综合久久久久88| 国产欧美日韩在线看| 国产精品美女视频| 一区二区三区不卡视频在线观看| 亚洲国产成人av| 蜜乳av一区二区三区| 国产成人亚洲综合a∨猫咪| 91在线国产福利| 欧美日韩在线免费视频| 欧美一级精品在线| 中文字幕欧美日本乱码一线二线| 亚洲色图.com| 日本美女一区二区三区| 国产一二精品视频| 99精品国产99久久久久久白柏| 91福利视频久久久久| 欧美一区二区三区视频在线| xf在线a精品一区二区视频网站| 国产精品无遮挡| 亚洲国产人成综合网站| 紧缚捆绑精品一区二区| 99在线视频精品| 91精品国产一区二区| 国产女人18毛片水真多成人如厕| 亚洲精品乱码久久久久久久久| 天堂蜜桃一区二区三区| 国产91精品入口| 欧美性受xxxx| 久久精品夜夜夜夜久久| 依依成人综合视频| 国产一区二区剧情av在线| 欧美性受xxxx黑人xyx| 久久欧美一区二区| 亚洲与欧洲av电影| 国产在线国偷精品产拍免费yy | 欧美一区二区三区小说| 国产丝袜美腿一区二区三区| 亚洲综合免费观看高清完整版在线 | 国产成人免费在线观看不卡| 在线观看av一区二区| 欧美精品一区二区三区四区| 亚洲乱码国产乱码精品精可以看| 久久不见久久见免费视频1| 91美女片黄在线| 国产日韩欧美激情| 麻豆精品一区二区综合av| 色婷婷国产精品| 国产精品欧美一区喷水| 蜜臀久久久久久久| 欧美三级视频在线| |精品福利一区二区三区| 久久精品国产在热久久| 欧美视频在线观看一区| 亚洲欧美在线视频观看| 国产毛片精品一区| 日韩一区二区三区视频| 亚洲大片免费看| 91在线看国产| 国产精品丝袜91| 国内精品免费在线观看| 欧美一级xxx| 亚洲午夜成aⅴ人片| 成人黄色电影在线| 久久精品夜色噜噜亚洲a∨| 美腿丝袜一区二区三区| 欧美久久一二区| 亚洲一二三区在线观看| 色悠悠亚洲一区二区| 国产精品高潮呻吟| www.欧美日韩| 国产精品久久久久aaaa樱花 | 一区二区欧美在线观看| 99视频精品在线| 亚洲欧洲无码一区二区三区| 高清在线不卡av| 国产亚洲综合性久久久影院| 久久99精品一区二区三区| 日韩精品最新网址| 奇米精品一区二区三区在线观看 | 亚洲精品欧美综合四区| 99久久久精品| 最好看的中文字幕久久| 99久久精品一区| 亚洲乱码中文字幕| 91福利国产成人精品照片| 亚洲尤物视频在线| 欧美情侣在线播放| 免费看欧美美女黄的网站| 日韩视频国产视频| 激情图区综合网| 国产日韩综合av| 不卡电影一区二区三区| 亚洲欧美中日韩| 欧美三片在线视频观看| 日韩精品三区四区| 亚洲精品在线网站| 懂色av一区二区在线播放| 亚洲天堂精品视频| 欧美视频一区二| 蜜桃av一区二区| 久久久久久久电影| 91首页免费视频| 亚洲一二三四区| 日韩精品最新网址| 懂色av中文字幕一区二区三区 | 国产一区二区三区久久久| 国产午夜精品福利| 99精品视频在线播放观看| 亚洲综合色视频| 欧美一级精品在线| 成人小视频免费在线观看| 亚洲综合一区在线| 精品剧情v国产在线观看在线| 高清成人在线观看| 亚洲一区电影777| 精品国产欧美一区二区| 91捆绑美女网站| 日韩一区欧美二区| 国产清纯白嫩初高生在线观看91| 91色九色蝌蚪| 青青草原综合久久大伊人精品 | 国产尤物一区二区| 洋洋av久久久久久久一区| 欧美大胆人体bbbb| 成人福利视频网站| 日本成人中文字幕在线视频| 欧美激情一区二区三区不卡| 在线一区二区观看| 精品无人区卡一卡二卡三乱码免费卡 | 91久久精品国产91性色tv| 日韩成人免费看| 亚洲视频一二区| 日韩午夜电影在线观看| aaa欧美大片| 蜜桃久久av一区| 亚洲一区免费视频| 中文天堂在线一区| 日韩精品一区二区三区swag| 91免费版在线看| 国产酒店精品激情| 午夜视频久久久久久| 一区二区中文视频| 久久精品水蜜桃av综合天堂| 欧美精品在线观看一区二区| 成人免费观看av| 久久国产综合精品| 亚洲国产精品精华液网站|