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

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

?? at91sam7sflash.c

?? FlashAT91SAM7Sx 讀寫程序 FlashAT91SAM7Sx讀寫程序
?? 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               : FlashSemiHosting.c
//* Object                  : FLASH programmer for SAM7 product
//*
//* Creation                : JPP  18/Aug/2004
//* V 1.1 24/Feb/2005 JPP   : caste the page value & init Pll
//*--------------------------------------------------------------------------------------

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

#include "interface.h"
#include "driverConfig.h"
#include "AT91SAM7SFlash.h"
extern void AT91F_LowLevelInit( void) ;
static char message[70];
static unsigned char RAMSectorData[FLASH_PAGE_SIZE_BYTE];
static int basseAddress ;
static unsigned int NbByte;
static int page,page_prev;
//*----------------------------------------------------------------------------
//* \fn    AT91F_LowLevelInit
//* \brief This function performs very low level HW initialization
//*        this function can be use a Stack, depending the compilation
//*        optimization mode
//*----------------------------------------------------------------------------
void AT91F_LowLevelInit( void)
{

 AT91PS_PMC     pPMC = AT91C_BASE_PMC;
    //* Set Flash Waite sate
	//  Single Cycle Access at Up to 30 MHz, or 40
	//  if MCK = 47923200 I have 50 Cycle for 1 useconde ( flied MC_FMR->FMCN
	    AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50 <<16)) | AT91C_MC_FWS_1FWS ;

    //* Watchdog Disable
        AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;

	//* Set MCK at 47 923 200
    // 1 Enabling the Main Oscillator:
        // SCK = 1/32768 = 30.51 uSeconde
    	// Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms
       pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN ));
        // Wait the startup time
        while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
	// 2 Checking the Main Oscillator Frequency (Optional)
	// 3 Setting PLL and divider:
		// - div by 5 Fin = 3,6864 =(18,432 / 5)
		// - Mul 25+1: Fout =	95,8464 =(3,6864 *26)
		// for 96 MHz the erroe is 0.16%
		// Field out NOT USED = 0
		// PLLCOUNT pll startup time esrtimate at : 0.844 ms
		// PLLCOUNT 28 = 0.000844 /(1/32768)
       pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x05) |
                         (AT91C_CKGR_PLLCOUNT & (28<<8)) |
                         (AT91C_CKGR_MUL & (25<<16)));

        // Wait the startup time
        while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
	// 4. Selection of Master Clock and Processor Clock
        // select the PLL clock divided by 2
           pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2 ;
           while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
  
           pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK  ;
           while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));

}

//*----------------------------------------------------------------------------
//* \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_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
//*----------------------------------------------------------------------------
void 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();
}

//*----------------------------------------------------------------------------
//* \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;
//    sprintf(message,"Download:add %x\n",Flash_Address);
//    FlMessageLog(message);

    //* init flash pointer
        Flash = (unsigned int *) Flash_Address;
    //* Get the Flasg page number
        page = ((Flash_Address - (unsigned int)AT91C_IFLASH ) /FLASH_PAGE_SIZE_BYTE) & AT91C_PAGE_MASK;
   //* 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    FlashWriteByte
//* \brief The bytes are buffered in sectorbuf. The sectorbuf is written to
//*        the flash when it overflows.
//* \input Flash_Address: start at 0x0010 0000 size: in byte
//*----------------------------------------------------------------------------

static void FlashWriteByte(unsigned long  addr, int byte)
{
  // get page
  page  = ((basseAddress + addr) - FLASH_BASE_ADDRESS ) /FLASH_PAGE_SIZE_BYTE;
#ifdef DEBUG
  FlMessageLog("+");
#endif
  if (byte == -1)
  { // Flush pending data.
     page = page_prev + 1 ;
  } // end flush

  //* Check if page must write
  if (page != page_prev)
  {// New Page
           sprintf(message,"Download:page %d\n",page_prev);
           FlMessageLog(message);
        //* Unlock current sector base address - curent address by sector size
        AT91F_Flash_Unlock(page_prev);
        //* Write page and get status
        if (!AT91F_Flash_Write( (page_prev*FLASH_PAGE_SIZE_BYTE)+ FLASH_ADDRESS, FLASH_PAGE_SIZE_BYTE , (unsigned int *) &RAMSectorData)) {
            sprintf(message,"Flasher cannot write page: %d\n",page_prev);
            FlMessageBox(message);
            FlErrorExit();
        }
 	// Copy Rom page to RAM page
        for (NbByte = 0; NbByte < FLASH_PAGE_SIZE_BYTE; NbByte++)
        {
           RAMSectorData[NbByte] = ((unsigned char*) ((page*FLASH_PAGE_SIZE_BYTE)+basseAddress)) [NbByte];
        }
        //* set works page
        page_prev = page ;
   }
   //* Write date
    RAMSectorData[addr & 0x7F] = byte;
}

//*----------------------------------------------------------------------------
//* \fn    FlashDriverInitialize
//* \brief Init the Flash driver
//*----------------------------------------------------------------------------
void FlashDriverInitialize(int argc, char const* argv[])
{    // check param

    int i,status;
    char val;
    basseAddress = 0;
    AT91F_LowLevelInit();
    sprintf(message,"Downloader Version 1.1\n");
    FlMessageLog(message);

    // get the Flash base address
    if (argc >= 2){
        NbByte=sprintf(message,"%s",argv[1]);
        if (message[1]!='x'){
            FlMessageBox("Param ERROR ! must be 0xYYYYYY");

         FlErrorExit();
        }
        for (i=0 ; NbByte > 1 ; NbByte--, i++){
            val = message[NbByte-1] & 0x0f;
            if ( message[NbByte-1]  > 0x40)  val += 9;
            basseAddress +=  val << (4 *i) ;
        }
        status = true;
        sprintf(message,"Download: AT91SAM7Sx At:%s",argv[1]);
    }
    else
    {
        basseAddress = FLASH_ADDRESS;
        sprintf(message,"Download1: AT91SAM7Sx At: 0x%X\n",basseAddress);
        status = false;
    }

     //* Get the Flash version
    FlMessageLog(message);
    //* Get the Flash version
    sprintf(message,"Download: AT91SAM7Sx Version: 0x%X\n",*AT91C_MC_FVR);
    FlMessageLog(message);
   // get page
    page  =  (((basseAddress )- (unsigned int) FLASH_ADDRESS ) /FLASH_PAGE_SIZE_BYTE)&AT91C_PAGE_MASK;
    page_prev = page;
    for (NbByte = 0; NbByte < FLASH_PAGE_SIZE_BYTE; NbByte++)
    {
        RAMSectorData[NbByte] = ((unsigned char*) ( (page_prev*FLASH_PAGE_SIZE_BYTE)+basseAddress)) [NbByte];
    }
    if (status) basseAddress = 0;

    //* 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 ;

    // Register the flash write function.
    FlRegisterWriteFunction(FlashWriteByte);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人综合天天影院| 国产一区三区三区| 亚洲欧洲另类国产综合| 亚洲国产精华液网站w| 久久久亚洲国产美女国产盗摄 | 久久精品夜色噜噜亚洲aⅴ| 日韩精品自拍偷拍| 国产日韩av一区| 亚洲综合在线免费观看| 亚洲免费av在线| 日韩国产精品久久久| 国产盗摄精品一区二区三区在线 | 欧美国产精品一区二区三区| 国产精品精品国产色婷婷| 婷婷成人激情在线网| 精品综合久久久久久8888| 一区二区三区不卡视频在线观看| 一区二区三区鲁丝不卡| 久久国产视频网| 欧美图片一区二区三区| 精品久久久影院| 亚洲综合激情网| 国产成人在线免费| 日韩精品中文字幕在线不卡尤物| 国产精品卡一卡二| 久久电影网站中文字幕| 欧美在线观看一二区| 国产精品久久久久久久久动漫 | 综合电影一区二区三区| 欧美色中文字幕| 欧美日韩国产精品成人| 一区二区在线看| av亚洲精华国产精华精华| 国产清纯在线一区二区www| 日本欧美一区二区三区乱码| 欧美日韩一区高清| 午夜精品福利一区二区三区av | 一区精品在线播放| 粉嫩一区二区三区性色av| 日韩欧美在线1卡| 秋霞国产午夜精品免费视频| 欧美久久久久免费| 久久99九九99精品| 久久亚洲二区三区| jlzzjlzz亚洲日本少妇| 一区二区三区四区不卡在线| 日本国产一区二区| 日韩av网站免费在线| 欧美电视剧免费全集观看| 国内精品伊人久久久久av一坑| 久久色成人在线| 99精品视频在线观看| 午夜欧美视频在线观看| 欧美成人一区二区| av影院午夜一区| 日韩电影在线免费观看| 中文字幕不卡在线观看| 欧美人妖巨大在线| 国产成人在线视频免费播放| 亚洲国产精品自拍| 国产亚洲女人久久久久毛片| 欧美日韩一区不卡| 国产成人午夜片在线观看高清观看| 亚洲视频一区在线观看| 2017欧美狠狠色| 欧美伦理电影网| 国产成人av一区二区三区在线| 亚洲六月丁香色婷婷综合久久| 久久亚洲影视婷婷| 日韩三级精品电影久久久| 懂色一区二区三区免费观看| 欧美aⅴ一区二区三区视频| 亚洲天堂2014| 日韩一区日韩二区| 国产精品你懂的| 国产日韩欧美精品在线| 久久久亚洲精华液精华液精华液| 91精品国产色综合久久ai换脸| 在线免费观看不卡av| 色香蕉久久蜜桃| 欧美这里有精品| 欧美色倩网站大全免费| 欧美日韩不卡一区二区| 在线欧美日韩精品| 色视频欧美一区二区三区| 欧美在线免费视屏| 4438亚洲最大| 26uuu亚洲综合色| 国产精品欧美综合在线| 亚洲精品国久久99热| 亚洲18女电影在线观看| 日韩福利视频网| 精品一区二区久久| av在线一区二区| 欧美高清视频一二三区| 7777精品伊人久久久大香线蕉最新版| 91在线国产福利| 日韩欧美电影一二三| 国产精品免费视频网站| 亚洲综合在线第一页| 免费视频最近日韩| voyeur盗摄精品| 88在线观看91蜜桃国自产| 欧美精彩视频一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲v日本v欧美v久久精品| 激情图片小说一区| 色婷婷综合激情| 国产精品久久久久久亚洲伦| 亚洲午夜电影网| www.66久久| 欧美经典一区二区三区| 亚洲va欧美va人人爽| 北条麻妃国产九九精品视频| 欧美日韩成人综合在线一区二区| 国产日韩av一区| 日本成人在线视频网站| 欧美日韩成人一区二区| 樱花草国产18久久久久| 91在线国内视频| 成人欧美一区二区三区视频网页 | 欧美自拍偷拍午夜视频| 国产色产综合产在线视频| 日韩av一二三| 日韩一区二区在线观看| 日韩精品乱码av一区二区| 在线播放亚洲一区| 亚洲成a人片综合在线| 欧美日韩一卡二卡| 免费在线观看一区二区三区| 欧美精品一二三四| 免费观看日韩av| 国产亚洲精品aa午夜观看| 国产精品自在在线| 国产精品久久久久久亚洲毛片| 99re热视频精品| 亚洲成人一区在线| 精品日韩一区二区三区免费视频| 捆绑紧缚一区二区三区视频| 亚洲精品一区二区三区四区高清 | 欧美变态凌虐bdsm| 国产成人av电影免费在线观看| 亚洲国产成人一区二区三区| 91亚洲精品久久久蜜桃网站| 亚洲成人动漫一区| 日本一区二区免费在线 | 亚洲一区二区三区美女| 欧美一区二区三区精品| 99久久99久久精品免费观看| 婷婷久久综合九色综合伊人色| 国产午夜精品一区二区三区四区| 色综合久久综合| 久久久91精品国产一区二区精品| 久久精品人人做人人爽97| 精品在线免费观看| 555夜色666亚洲国产免| 亚洲国产成人av网| 日韩一区二区三区免费看| 麻豆精品一区二区| 欧美喷水一区二区| 蜜桃精品视频在线| 一区二区三区鲁丝不卡| 久久你懂得1024| 日韩欧美国产系列| 欧日韩精品视频| 成人av综合在线| 成人一级黄色片| 久久99国产精品久久99果冻传媒| 亚洲一区在线看| 国产精品免费视频观看| 日韩欧美一区二区不卡| 91网址在线看| 99v久久综合狠狠综合久久| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 免费精品视频最新在线| 亚洲3atv精品一区二区三区| 午夜精品福利在线| 日日噜噜夜夜狠狠视频欧美人 | 91.麻豆视频| 欧美一级生活片| 久久精品免费在线观看| 日本一区二区三区视频视频| 国产欧美精品在线观看| 国产精品成人一区二区艾草| 亚洲天堂福利av| 午夜久久久影院| 国产精品一区免费视频| 91偷拍与自偷拍精品| 欧美日韩国产中文| 久久久久久久国产精品影院| 一区在线中文字幕| 蜜桃av一区二区三区| 人人精品人人爱| 国产酒店精品激情| 欧美无乱码久久久免费午夜一区 | 男人的j进女人的j一区| 成人激情av网| 久久久99久久| 视频一区在线播放| 93久久精品日日躁夜夜躁欧美|