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

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

?? flash.c

?? ATMEL arm7 USB 模擬串口
?? C
字號:
//  ----------------------------------------------------------------------------
//          ATMEL Microcontroller Software Support  -  ROUSSET  -
//  ----------------------------------------------------------------------------
//  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
//  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
//  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
//  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//  ----------------------------------------------------------------------------
//* File Name           : Flash.c
//* Object              : Flash routine
//* Creation            : JPP   30/Jun/2004
//* Modif               : JPM   16/Nov/2004 Flash write status
//*----------------------------------------------------------------------------
#include "Board.h"
#include "Flash.h"
#include "trace.h"
#include "po_types.h"
#include "po_kernel.h"
#include "dbgu.h"

#if defined(AT91SAM7A3) ||defined(AT91SAM7S32) || defined(AT91SAM7S64) || defined(AT91SAM7S128) || defined(AT91SAM7S256) || defined(AT91SAM9265) || defined(NANDFLASH) || defined (AT91SAM7X256) || defined (AT91SAM7X128)
#else
#error PROBLEM DEFINE !!!
#endif



#ifdef AT91SAM9265
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Init
//* \brief Flash init
//*----------------------------------------------------------------------------
void AT91F_Flash_Init (void)
{
}

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

//*----------------------------------------------------------------------------
//* \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
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff, unsigned char Memset)
#else
__ramfunc int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff, unsigned char Memset)
#endif
{
  unsigned int i; //, page, status;
  unsigned int * Flash;

  //* init flash pointer
  Flash = (unsigned int *) Flash_Address;

  TRACE_DEBUG_H( "FL Ad(0x%X)    ", (int)Flash);
  TRACE_DEBUG_H( "FL Ad(0x%X)    ", (int)Flash_Address);
  TRACE_DEBUG_H( " Lg(%d)\n\r", size);

  po_lock();
#ifdef USE_LED
  AT91F_LED_blinkSpeed(0);
#endif

  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
    if( FALSE == Memset )
    {
      *Flash=*buff;
    }
    else
    {
      *Flash=buff[0];
      buff--;
    }
  }

  po_unlock();

  return true;
}


#endif  // AT91SAM9265


#if defined(AT91SAM7A3) || defined(AT91SAM7S32) || defined(AT91SAM7S64) || defined(AT91SAM7S128) || defined(AT91SAM7S256)  || defined (AT91SAM7X256) || defined (AT91SAM7X128)

// Prototype:
#ifdef ADS_COMPIL
int AT91F_Flash_Ready (void);
#else
__ramfunc int AT91F_Flash_Ready (void);
#endif

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Init
//* \brief Flash init
//*----------------------------------------------------------------------------
void AT91F_Flash_Init (void)
{
  //* Set Flash Waite sate
  //  Single Cycle Access at Up to 30 MHz, or 40
  //  if AT91C_MASTER_CLOCK = 47923200 I have 48 Cycle for 1 usecond ( flied MC_FMR->FMCN )
  //  48 x 1,5 = 72
  AT91F_MC_EFC_CfgModeReg( AT91C_BASE_MC, ((AT91C_MC_FMCN)&(72 <<16)) | AT91C_MC_FWS_1FWS );
}

#ifdef AT91SAM7A3
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Status
//* \brief Wait the flash ready
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Status( unsigned int Mask )
#else
__ramfunc int AT91F_Flash_Status( unsigned int Mask )
#endif
{
  unsigned int status;
  status = 0;

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

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Lock_Status
//* \brief Get the Lock bits field status
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Lock_Status(void)
#else
__ramfunc int AT91F_Flash_Lock_Status(void)
#endif
{
  return( AT91F_MC_EFC_GetStatus( AT91C_BASE_MC ) & 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
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Lock (unsigned int Flash_Lock_Page)
#else
__ramfunc int AT91F_Flash_Lock (unsigned int Flash_Lock_Page)
#endif
{
  //* write the flash
  //* Write the Set Lock Bit command
  AT91F_MC_EFC_PerformCmd( AT91C_BASE_MC, AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_LOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) );

#ifdef AT91SAM7A3
  //* Wait the end of command
  return AT91F_Flash_Status(AT91C_MC_EOL);
#else
  //* Wait the end of command
  AT91F_Flash_Ready();
  return (AT91F_Flash_Lock_Status());
#endif
}


//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Check_Erase
//* \brief Check the memory at 0xFF in 32 bits access
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Check_Erase (unsigned int * start, unsigned int size)
#else
__ramfunc int AT91F_Flash_Check_Erase (unsigned int * start, unsigned int size)
#endif
{
  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_Erase_All
//* \brief Send command erase all flash
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Erase_All(void)
#else
__ramfunc int AT91F_Flash_Erase_All(void)
#endif
{
  //* Write the Erase All command
  AT91F_MC_EFC_PerformCmd( AT91C_BASE_MC, AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_ERASE_ALL );

#ifdef AT91SAM7A3
  //* Wait the end of command
  return AT91F_Flash_Status(AT91C_MC_EOP);;
#else
  //* Wait the end of command
  AT91F_Flash_Ready();
  //* Check the result
  return( ( AT91F_MC_EFC_GetStatus( AT91C_BASE_MC ) & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))==0) ;
#endif
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Unlock
//* \brief Clear the lock bit and set at 1 FSR bit=0
//* \input page number (0-1023)
//* \output Region
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Unlock(unsigned int Flash_Lock_Page)
#else
__ramfunc int AT91F_Flash_Unlock(unsigned int Flash_Lock_Page)
#endif
{
  //* Write the Clear Lock Bit command
  AT91F_MC_EFC_PerformCmd( AT91C_BASE_MC, AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_UNLOCK | (AT91C_MC_PAGEN & (Flash_Lock_Page << 8) ) );

#ifdef AT91SAM7A3
  //* Wait the end of command
  return( AT91F_Flash_Status(AT91C_MC_EOL) );
#else
  //* Wait the end of command
  AT91F_Flash_Ready();
  return( AT91F_Flash_Lock_Status() );
#endif
}

//*----------------------------------------------------------------------------
//* \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
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff, unsigned char Memset)
#else
__ramfunc int AT91F_Flash_Write( unsigned int Flash_Address ,int size ,unsigned int * buff, unsigned char Memset)
#endif
{
  unsigned int i, page, status;
  unsigned int * Flash;

  //* init flash pointer
  Flash = (unsigned int *) Flash_Address;
  //* Get the Flash page number
  page = ((Flash_Address - (unsigned int)AT91C_IFLASH ) /FLASH_PAGE_SIZE_BYTE);

  TRACE_DEBUG_H( "FL Ad(0x%X)    ", Flash);
  TRACE_DEBUG_H( "FL Ad(0x%X)    ", Flash_Address);
  TRACE_DEBUG_H( "Lg(%d)\n\r", size);

  po_lock();
#ifdef USE_LED
  AT91F_LED_blinkSpeed(0);
#endif

  //* 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
    if( FALSE == Memset )
    {
      *Flash=*buff;
    }
    else
    {
      *Flash=buff[0];
      buff--;
    }
  }
  //* Write the write page command
  AT91F_MC_EFC_PerformCmd( AT91C_BASE_MC, AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (page <<8)) );

  //* Wait the end of command
#ifdef AT91SAM7A3
  status = AT91F_Flash_Status(AT91C_MC_EOP);
#else
  status = AT91F_Flash_Ready();
#endif

  po_unlock();

  //* Check the result
  if ( (status & ( AT91C_MC_PROGE | AT91C_MC_LOCKE )) != 0)
  {
    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
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Write_all( unsigned int Flash_Address ,int size ,unsigned int * buff)
#else
__ramfunc int AT91F_Flash_Write_all( unsigned int Flash_Address ,int size ,unsigned int * buff)
#endif
{
  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;

#ifdef AT91SAM7A3
    //* Unlock current sector base address - current address by sector size
    if ( !AT91F_Flash_Unlock((dest - (unsigned int)AT91C_IFLASH ) /FLASH_PAGE_SIZE_BYTE))
    {
      return false;
    }
#endif

    //* Write page and get status
    status = AT91F_Flash_Write( dest ,next ,src, FALSE);

    // * get next page param
    size -= next;
    src += FLASH_PAGE_SIZE_BYTE/4;
    dest +=  FLASH_PAGE_SIZE_BYTE;
  }
  return status;
}

#ifdef ADS_COMPIL
  #pragma arm section code = "ramfunc"
#endif

#ifndef AT91SAM7A3
//*----------------------------------------------------------------------------
//* \fn    AT91F_Flash_Ready
//* \brief Wait the flash ready
//*----------------------------------------------------------------------------
#ifdef ADS_COMPIL
int AT91F_Flash_Ready (void)
#else
__ramfunc int AT91F_Flash_Ready (void)
#endif
{
  unsigned int status;
  status = 0;

  //* Wait the end of command
  while ((status & AT91C_MC_FRDY) != AT91C_MC_FRDY )
  {
    status = AT91F_MC_EFC_GetStatus( AT91C_BASE_MC );
  }
  return status;
}
#endif


#endif  // AT91SAM7A3 AT91SAM7S32 AT91SAM7S64 AT91SAM7S128 AT91SAM7S256



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人一级电影| 一区二区三区四区在线免费观看 | 欧美性猛交xxxxxxxx| 国产伦理精品不卡| 另类小说图片综合网| 久久精品国内一区二区三区| 三级亚洲高清视频| 免费日韩伦理电影| 精品一区二区三区在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 精品一区二区三区免费| 蜜桃av一区二区| 国产一区在线精品| 丁香桃色午夜亚洲一区二区三区| 国产一区二区毛片| 丁香婷婷综合网| 91黄色免费网站| 欧美剧情电影在线观看完整版免费励志电影| 色综合激情久久| 欧美视频在线一区| 精品国产麻豆免费人成网站| 久久久久久亚洲综合影院红桃| 久久久久久亚洲综合影院红桃| 国产女主播一区| 综合av第一页| 日韩精品亚洲一区二区三区免费| 久久99热这里只有精品| 懂色av噜噜一区二区三区av| 在线视频你懂得一区| 6080亚洲精品一区二区| 久久婷婷色综合| 亚洲人吸女人奶水| 九色综合狠狠综合久久| 成人免费毛片app| 欧美精品一二三四| 国产色产综合产在线视频| 亚洲精品中文字幕在线观看| 石原莉奈在线亚洲三区| 国产suv精品一区二区883| 日本高清免费不卡视频| 久久综合av免费| 亚洲乱码国产乱码精品精98午夜| 丝袜a∨在线一区二区三区不卡| 国产最新精品精品你懂的| 一本一本久久a久久精品综合麻豆| 91精品国产色综合久久不卡蜜臀 | 日韩国产在线一| 99综合电影在线视频| 91麻豆精品国产综合久久久久久 | 色综合久久中文字幕| 日韩欧美中文字幕一区| 亚洲女性喷水在线观看一区| 狠狠色丁香九九婷婷综合五月| 色综合久久综合| 国产三级欧美三级| 久久精品国产亚洲a| 欧美视频一区二| 中文字幕在线播放不卡一区| 六月婷婷色综合| 欧美色图激情小说| 一区二区三区日本| av电影天堂一区二区在线观看| 欧美大片顶级少妇| 日本视频中文字幕一区二区三区| av午夜精品一区二区三区| 久久一二三国产| 看电视剧不卡顿的网站| 在线不卡欧美精品一区二区三区| 伊人色综合久久天天| 成人美女在线视频| 国产亚洲精品超碰| 国产麻豆91精品| 精品国产电影一区二区| 美腿丝袜亚洲一区| 欧美一级精品在线| 久久草av在线| 亚洲精品一区二区三区影院| 视频一区二区中文字幕| 欧美日本一道本| 日本视频在线一区| 日韩美女视频在线| 国产一区二区三区久久久| 日韩三级精品电影久久久 | 久久久久久久网| 国产高清成人在线| 久久综合久久综合久久综合| 蜜臀久久久久久久| 久久久久久久久岛国免费| 国产精品综合二区| 国产精品久久久久三级| 成人午夜激情影院| 亚洲欧美日韩在线播放| 精品视频免费看| 天天色天天操综合| 亚洲精品在线免费播放| 国产成人在线色| 成人欧美一区二区三区1314| 91麻豆免费看片| 天天综合网 天天综合色| 日韩欧美国产wwwww| 国产美女精品人人做人人爽| 中文成人综合网| 日本韩国一区二区| 日本sm残虐另类| 国产精品少妇自拍| 欧美中文字幕一区| 国产麻豆日韩欧美久久| 亚洲免费视频中文字幕| 欧美美女直播网站| 国产精品亚洲第一区在线暖暖韩国| 中文字幕免费不卡在线| 欧美人xxxx| 国产成人8x视频一区二区| 亚洲欧美日韩精品久久久久| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品久久夜| 欧美三级日本三级少妇99| 久久99精品国产.久久久久久| 欧美激情中文字幕一区二区| 欧美日韩小视频| 夫妻av一区二区| 日韩不卡手机在线v区| 国产精品欧美一区喷水| 欧美成人伊人久久综合网| 99国产精品99久久久久久| 日韩激情视频网站| 亚洲欧美偷拍卡通变态| 久久综合网色—综合色88| 欧美三级电影网| 国产成人免费高清| 美国三级日本三级久久99| 一区二区三区中文免费| 欧美成人精精品一区二区频| 在线欧美一区二区| www.亚洲精品| 国产酒店精品激情| 奇米影视7777精品一区二区| 亚洲卡通动漫在线| 亚洲欧洲日本在线| 国产午夜精品久久久久久免费视 | 亚洲国产精品精华液2区45| 欧美综合天天夜夜久久| 成人综合激情网| 美腿丝袜亚洲三区| 免费欧美在线视频| 爽好多水快深点欧美视频| 亚洲精品福利视频网站| 国产精品久久久久久福利一牛影视 | 蜜桃av噜噜一区二区三区小说| 一区二区激情小说| 日韩一区在线看| 亚洲欧洲国产日韩| 国产精品免费视频网站| 国产精品亲子乱子伦xxxx裸| 久久免费的精品国产v∧| 久久综合精品国产一区二区三区| 欧美成人免费网站| www欧美成人18+| 2023国产精品| 国产亚洲综合性久久久影院| 久久一区二区三区国产精品| 久久精品网站免费观看| 国产婷婷色一区二区三区四区| 久久久午夜电影| 国产精品午夜久久| 综合欧美一区二区三区| 亚洲色欲色欲www在线观看| 亚洲视频网在线直播| 一区二区免费在线播放| 亚洲成av人片观看| 蜜臀av一区二区在线观看| 狠狠色狠狠色综合系列| 国产不卡免费视频| 91黄色免费观看| 777a∨成人精品桃花网| 亚洲精品一区二区三区福利| 国产亚洲一区二区在线观看| 国产精品午夜春色av| 亚洲图片欧美一区| 久久er99热精品一区二区| 国产不卡视频一区二区三区| 日本高清不卡视频| 欧美一区三区四区| 久久精品人人爽人人爽| 自拍偷自拍亚洲精品播放| 亚洲超碰精品一区二区| 国产在线播放一区| 91精品福利视频| 精品久久五月天| 亚洲免费在线观看视频| 麻豆精品新av中文字幕| av在线一区二区三区| 555夜色666亚洲国产免| 日本一区二区三区视频视频| 亚洲精品久久嫩草网站秘色| 麻豆精品国产91久久久久久| fc2成人免费人成在线观看播放| 欧美日韩一本到| 中文字幕一区二区在线播放| 麻豆一区二区三|