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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? strata16.c

?? 支持三星原產(chǎn)的S3C24A0開發(fā)板
?? C
字號(hào):
/*****************************************
  NAME: strata16.c
  DESC: Program Strata 16-bit NOR Flash(32MB) 
  HISTORY: 2004.2.16(S3C24A0A)
 *****************************************/

#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "24a0addr.h"
#include "24a0lib.h"
#include "24a0slib.h"
#include "strata16.h"

static void InputAddresses(void);
//static void PageModeTest(void);
static int  Strata_ProgFlash(U32 realAddr,U16 data);
static void  Strata_EraseSector(int targetAddr);
static int  Strata_CheckID(int targetAddr);
static int  Strata_CheckDevice(int targetAddr);
static int  Strata_CheckBlockLock(int targetAddr);
static int  Strata_ClearBlockLock(int targetAddr); 
static int  Strata_BlankCheck(int targetAddr,int targetSize);
static int  _WAIT(void);

extern U32 downloadAddress;
extern U32 downloadProgramSize;

static U32 srcAddress;
static U32 targetOffset; 
static U32 targetAddress; 
static U32 targetSize; 

// Because S3C2410 is connected to Intel StrataFlash 28F128J3A,
// the addr parameter has to be a WORD address, so called in Intel specification.

#define _WR(addr,data)  *((volatile U16 *)(addr))=(U16)data 
#define _RD(addr)       ( *((volatile U16 *)(addr)) )       

// _RESET() : Read Array
#define _RESET()    _WR(targetAddress,0x00ff)

extern U32 downloadAddress;
extern U32 downloadProgramSize;

static int error_erase=0;       // Read Status Register, SR.5
static int error_program=0;     // Read Status Register, SR.4



//==========================================================================================
static int Strata_CheckID(int targetAddr) 
{
    _RESET();
    _WR(targetAddr, 0x0090); 
	Uart_Printf("Identification code=%x, Target Addr=%x\n",_RD(targetAddr), targetAddr);
	return _RD(targetAddr); // Read Identifier Code, including lower, higher 16-bit, 8MB, Intel Strate Flash ROM
                            // targetAddress must be the beginning location of a Block Address
}


//==========================================================================================
static int Strata_CheckDevice(int targetAddr) 
{
    //_RESET();
    _WR(targetAddr, 0x0090);
	Uart_Printf("Identification code=%x\n",_RD(targetAddr+0x2));
	return _RD(targetAddr+0x2); // Read Device Code, including lower, higher 16-bit, 8MB, Intel Strate Flash ROM
                                // targetAddress must be the beginning location of a Block Address
}


//==========================================================================================
static int Strata_CheckBlockLock(int targetAddr) 
{
    //_RESET();
    _WR(targetAddr, 0x0090);
    return _RD(targetAddr+0x4); // Read Block Lock configuration, 
                                // targetAddress must be the beginning location of a Block Address
}


//==========================================================================================
static int Strata_ClearBlockLock(int targetAddr) 
{
    U32 status,ReadStatus;
	unsigned long bSR7,bSR1;
    //_RESET();
    _WR(targetAddr, 0x0060);
    _WR(targetAddr, 0x00d0);

	_WR(targetAddr, 0x0090);
	status=_RD(targetAddr+0x4); 
	bSR7=status & (1<<7);
	bSR1=status & (1<<1);
	
	Uart_Printf("Block status register value: %x\n",status);
	
	while(bSR1) 
	{
	_WR(targetAddr, 0x0090);
	status=_RD(targetAddr+0x4); 
	bSR1=status & (1<<1);
	if(!bSR1)break;
	}

	Uart_Printf("Device is unlocked\n");
	
	_WR(targetAddr, 0x0070);	// Read Status Register
	ReadStatus=_RD(targetAddr);	// realAddr is any valid address within the device
	bSR7=ReadStatus & (1<<7);
	while(!bSR7 ) 
	{
	_WR(targetAddr, 0x0070);		  // Read Status Register
	ReadStatus=_RD(targetAddr);
	bSR7=ReadStatus & (1<<7);
	}
    _RESET();
}

//==========================================================================================
void Strata_EraseSector(int targetAddress) 
{
    unsigned long ReadStatus;
    unsigned long bSR5;     // Erase and Clear Lock-bits Status, lower 16bit, 8MB Intel Strate Flash ROM
    unsigned long bSR7;     // Write State Machine Status, lower 16bit, 8MB Intel Strate Flash ROM

    //_RESET();
    _WR(targetAddress, 0x0020); // Block Erase, First Bus Cycle, targetAddress is the address withint the block
    _WR(targetAddress, 0x00d0); // Block Erase, Second Bus Cycle, targetAddress is the address withint the block
    
    //_RESET();
    _WR(targetAddress, 0x0070); // Read Status Register, First Bus Cycle, targetAddress is any valid address within the device
    ReadStatus=_RD(targetAddress);  // Read Status Register, Second Bus Cycle, targetAddress is any valid address within the device
    bSR7=ReadStatus & (1<<7);       // lower 16-bit 8MB Strata
    while(!bSR7) 
    {
        _WR(targetAddress, 0x0070);
        ReadStatus=_RD(targetAddress);
        bSR7=ReadStatus & (1<<7);
    }

    _WR(targetAddress, 0x0070); // When the block erase is complete, status register bit SR.5 should be checked. 
                    // If a block erase error is detected, the status register should be cleared before
                    // system software attempts correct actions.
    ReadStatus=_RD(targetAddress);  
    bSR5=ReadStatus & (1<<5);           // lower 16-bit 8MB Strata 
    if (bSR5==0) 
    {
        Uart_Printf("Block_%x Erase O.K. \n",targetAddress);
    } 
    else 
    {
        //Uart_Printf("Error in Block Erasure!!\n");
        _WR(targetAddress, 0x0050); // Clear Status Register
        error_erase=1;                  // But not major, is it casual ?
    }

    _RESET();   // write 0xffh(_RESET()) after the last opoeration to reset the device to read array mode.
}

//==========================================================================================
int Strata_BlankCheck(int targetAddr,int targetSize) 
{
    int i,j;
    for (i=0; i<targetSize; i+=2) 
    {
        j=*((volatile U16 *)(i+targetAddr));
        if (j!=0xffff)      // In erasure it changes all block dta to 0xff
        {
            Uart_Printf("E : %x = %x\n", (i+targetAddr), j);
            return 0;
        }
    }
    return 1;
}



int Strata_ProgFlash(U32 realAddr,U16 data) 
	{
		volatile U16 *ptargetAddr;
		unsigned int ReadStatus, status;
		unsigned int bSR7,bSR1,bSR4;	  // Write State Machine Status, 8MB Intel Strate Flash ROM
	
		ptargetAddr = (volatile U16 *)realAddr;


		_WR(realAddr, 0x0040);	// realAddr is any valid adress within the device
		*ptargetAddr=data;			// 16 bit data
	
		_WR(realAddr, 0x0070);	// Read Status Register
		ReadStatus=_RD(realAddr);	// realAddr is any valid address within the device
		bSR7=ReadStatus & (1<<7);

		while(!bSR7 ) 
		{
			_WR(realAddr, 0x0070);		  // Read Status Register
			ReadStatus=_RD(realAddr);
			bSR7=ReadStatus & (1<<7);
		}
		
		_WR(realAddr, 0x0070); 
		ReadStatus=_RD(realAddr);			  // Real Status Register
	
		if(ReadStatus&(1<<3))
		{
		Uart_Printf("Voltage Range Error\n");
			_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
		}	
		if(ReadStatus&(1<<1))
		{
		Uart_Printf("Device Protect Error\n");
			_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
		}	
		if(ReadStatus&(1<<4))
		{
		Uart_Printf("Programming Error\n");
			_WR(realAddr, 0x0050);			// Clear Status Register	
		return 0;
		}	
	
	}


#define TARGET_ADDR_28F128      0x08000000  // nGCS2
#define SOURCE_ADDR_FOR_28F128    0x11000000  // After 16MB of SDRAM
                                            // 0x30000000 - 0x30ffffff : Area for this test program

//==========================================================================================                                            
void Program28F256K3_16Bit(void)
{
// FlashROM write program must reside at RAM region NOT ROM region
// In reading and writing all interrupts are disabled because the flash ROM
// strongly dislike to be disturbed by other stuff.
// And the region of flash ROM must be I/O region which means NO cacheable
// and NO bufferable in MMU. Check it out !!!
// 2001.6.18. Mon. It's local rain. I'll hope it eliminates the drought in Korea. by chc

    unsigned long interrupt_reservoir;
    int i;


    Uart_Printf("\n[ 28F128J3A-16bit Flash Writing Program ]\n\n");
   
	rSROM_BW=rSROM_BW&~(1<<9);
	rSROM_BW=(rSROM_BW&~(0x40))|(0x1<<6);
	
    rINTMSK = BIT_ALLMSK;   
    targetAddress=TARGET_ADDR_28F128;
    targetSize=downloadProgramSize;

	Uart_Printf("Src size=%x\n",targetSize);

    if(targetSize==0)
    {
        Uart_Printf("\nThe data must be downloaded using ICE or USB from 0x11000000\n");
        srcAddress=downloadAddress; 
    }
    else
    { 
        srcAddress=downloadAddress+4; //to discard the data head for the size
    }
        
    InputAddresses(); //srcAddress,targetSize,targetOffset will be determined.      
    Uart_Printf("Source base address(0x11000000) = 0x%x\n",srcAddress);
    Uart_Printf("Target base address(0x08000000) = 0x%x\n",targetAddress);
    Uart_Printf("Target offset      (0x0)        = 0x%x\n",targetOffset);
    Uart_Printf("Target size        (0x20000*n)  = 0x%x\n",targetSize);

    if ( (Strata_CheckID(targetAddress) & 0xffff) != 0x0089)       // ID number = 0x0089
    {
        Uart_Printf("Identification check error(%x)!!\n",Strata_CheckID(targetAddress) & 0xffff);
        return ;
    }

    if ( (Strata_CheckDevice(targetAddress) & 0xffff) != 0x8803)   // Device number=0x0018 0x8803 
    {
        Uart_Printf("Device check error !!\n");
        return ;
    }
	
	for(i=0;i<targetSize;i+=0x10000)
    {
   	Strata_ClearBlockLock(targetAddress+targetOffset+i); 
    Strata_EraseSector(targetAddress+targetOffset+i);
    }

    Uart_Printf("\nErase the sector : 0x%x.\n", targetAddress);

    if(!Strata_BlankCheck(targetAddress+targetOffset,targetSize))
    {
        Uart_Printf("Blank Check Error!!!\n");
        return;
    }

    Uart_Printf("\nStart of the data writing...\n");

    for (i=0; i<targetSize; i+=2) 
    {
	    Strata_ProgFlash(i+targetAddress+targetOffset, *((U16 *)(srcAddress+i)));
	    if(i%0x10000==0xfffc)
            Uart_Printf("[%x]",(i+4)/0x10000);
    }
    Uart_Printf("\nEnd of the data writing \n");

    _RESET();


    Uart_Printf("Verifying Start...\n");
    for (i=0; i<targetSize; i+=2) 
    {
        if (*((U16 *)(i+targetAddress+targetOffset)) !=*((U16 *)(i+srcAddress))) 
        {
            Uart_Printf("verify error  src %08x = %04x\n", srcAddress+i, *((U16 *)(srcAddress+i)));
            Uart_Printf("verify error  des %08x = %04x\n", i+targetAddress+targetOffset, *((U16 *)(i+targetAddress)));
			return;
        }
	 }
//	PageModeTest();

	Uart_Printf("Verifying End!!!");
}

//==========================================================================================
static void InputAddresses(void)
{
    Uart_Printf("\n[ 28F128J3A Writing Program ]\n");

    Uart_Printf("\nSource size [0x?] : 0h~%xh\n",downloadProgramSize);
    Uart_Printf("\nAvailable Target Offset Address:0h,10000h,20000h, ..., ff0000h\n"); 
    Uart_Printf("Input target address offset [0x?] : ");
    targetOffset=Uart_GetIntNum();
	if(targetOffset==(U32)(-1)) targetOffset=0x0;	
    if(targetSize==0)
    {
        Uart_Printf("Input target size [0x?] : ");
		if(targetOffset==(U32)(-1)) targetOffset=0x0;	
        targetSize=Uart_GetIntNum();
    }
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人超碰在线观看| 麻豆成人久久精品二区三区小说| 欧美一区二区三区视频免费播放| 国产精品小仙女| 无吗不卡中文字幕| 国产精品天美传媒| 日韩三级视频在线看| 91在线一区二区三区| 国内精品伊人久久久久av影院| 亚洲午夜免费福利视频| 国产精品激情偷乱一区二区∴| 精品国内片67194| 欧美日韩高清影院| 色婷婷狠狠综合| 不卡视频在线观看| 盗摄精品av一区二区三区| 久久国产剧场电影| 亚洲高清中文字幕| 伊人色综合久久天天人手人婷| 日韩国产欧美三级| 亚洲少妇屁股交4| 欧美国产日本韩| 久久久久久久久久久电影| 日韩一区二区中文字幕| 欧美日韩一区二区三区在线| 91久久精品一区二区| 成人av动漫在线| 国产很黄免费观看久久| 国产在线日韩欧美| 激情小说亚洲一区| 老司机精品视频线观看86| 天堂成人国产精品一区| 午夜精品久久久久久久| 亚洲动漫第一页| 亚洲妇熟xx妇色黄| 午夜伦理一区二区| 亚洲成人自拍网| 五月综合激情网| 亚洲国产精品久久人人爱| 亚洲小说春色综合另类电影| 亚洲视频香蕉人妖| 亚洲色图色小说| 亚洲摸摸操操av| 亚洲午夜免费视频| 婷婷夜色潮精品综合在线| 午夜视频在线观看一区二区三区| 亚洲成av人片| 蜜桃视频一区二区三区在线观看| 日本成人在线电影网| 久久不见久久见免费视频7| 精品一区免费av| 国产精品一区2区| 高清不卡一区二区| 91网站黄www| 成人免费小视频| 一区二区三区波多野结衣在线观看| 亚洲综合无码一区二区| 香蕉影视欧美成人| 韩国女主播一区| 成人一级片在线观看| 色噜噜久久综合| 欧美精品99久久久**| 久久一夜天堂av一区二区三区| 欧美激情一区二区三区不卡| 亚洲猫色日本管| 免费高清不卡av| 成人美女视频在线观看18| 欧美在线观看视频在线| 日韩欧美一级精品久久| 国产精品日韩成人| 亚洲大片免费看| 精品在线观看视频| 色哟哟一区二区在线观看| 欧美一区二区三区在线观看| 久久精品一区二区三区四区 | 亚洲综合丝袜美腿| 免费不卡在线观看| 成人精品国产福利| 欧美肥妇bbw| 国产精品美女久久久久久2018| 亚洲国产成人va在线观看天堂| 麻豆高清免费国产一区| 99视频精品全部免费在线| 欧美猛男男办公室激情| 中文av字幕一区| 另类人妖一区二区av| 91色在线porny| 精品国产123| 亚洲精品视频在线观看网站| 激情深爱一区二区| 欧美自拍偷拍一区| 国产亚洲一区二区三区四区| 亚洲一区精品在线| 成人一区二区三区中文字幕| 欧美一级理论性理论a| 专区另类欧美日韩| 国产一区三区三区| 欧美高清精品3d| 亚洲三级理论片| 激情久久五月天| 欧美精品久久久久久久久老牛影院| 欧美激情在线观看视频免费| 欧美视频在线一区| 国产精品乱人伦| 久久精品国产一区二区三| 欧美色综合天天久久综合精品| 国产精品丝袜91| 久久se精品一区二区| 欧美日韩精品系列| 亚洲乱码国产乱码精品精小说| 国产精品香蕉一区二区三区| 欧美一二三四区在线| 午夜视频久久久久久| 91免费视频大全| 国产精品天干天干在线综合| 国内国产精品久久| 日韩美女一区二区三区| 婷婷久久综合九色国产成人| 91国偷自产一区二区三区成为亚洲经典 | 国产精品一区二区久激情瑜伽| 欧美成人一区二区| 免费一区二区视频| 欧美二区三区91| 日韩中文字幕亚洲一区二区va在线 | 国模套图日韩精品一区二区| 日韩欧美国产午夜精品| 日本伊人色综合网| 欧美日本在线一区| 五月综合激情网| 欧美区一区二区三区| 亚洲国产日产av| 欧美三级资源在线| 亚洲va欧美va天堂v国产综合| 在线观看av一区二区| 亚洲国产综合视频在线观看| 日本韩国欧美一区| 亚洲午夜久久久久| 欧美日韩性生活| 日韩成人av影视| 日韩欧美一级二级三级| 狠狠色狠狠色综合日日91app| 欧美videos大乳护士334| 久久99精品国产| 久久夜色精品国产噜噜av| 国产精品12区| 国产精品国产三级国产普通话99 | 精品国产免费视频| 国产乱码精品一区二区三区五月婷 | 五月天久久比比资源色| 欧美一区二区三区性视频| 美国毛片一区二区三区| 26uuu亚洲综合色| 粉嫩高潮美女一区二区三区| 亚洲丝袜精品丝袜在线| 欧美偷拍一区二区| 老色鬼精品视频在线观看播放| 精品国产欧美一区二区| 成人app软件下载大全免费| 亚洲日本在线天堂| 欧美精品丝袜久久久中文字幕| 老司机精品视频线观看86| 中文字幕精品在线不卡| 一本大道久久精品懂色aⅴ| 日韩国产成人精品| 国产婷婷色一区二区三区在线| 97久久精品人人澡人人爽| 亚洲成人一区在线| 久久婷婷久久一区二区三区| 91色.com| 美国毛片一区二区| 亚洲视频免费观看| 日韩一区二区三区电影| jlzzjlzz亚洲女人18| 日韩一区欧美二区| 欧美极品另类videosde| 在线观看国产精品网站| 国产一区二区在线视频| 亚洲精品欧美激情| 精品粉嫩超白一线天av| 色婷婷一区二区| 国内精品不卡在线| 亚洲大片精品永久免费| 日本一区二区三区dvd视频在线 | 精品动漫一区二区三区在线观看| 成人a区在线观看| 青青草原综合久久大伊人精品| 国产精品美日韩| 日韩精品一区二| 欧美性猛片xxxx免费看久爱| 国产另类ts人妖一区二区| 亚洲成人精品影院| 国产精品视频一二三| 欧美一三区三区四区免费在线看 | 337p粉嫩大胆噜噜噜噜噜91av| 在线一区二区视频| 国产精品一区二区视频| 三级影片在线观看欧美日韩一区二区| 日本一区二区免费在线观看视频 | 91精品国产91久久综合桃花 | 黄色日韩三级电影|