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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? bf561ezflash.c

?? 基于BF561的JS28F128 FLASH驅(qū)動(dòng)
?? C
字號(hào):
///////////////////////////////////////////////////////////////
//
// BF533EzFlash.c
//
// Analog Devices, Inc. - 2001
//
//
// Change Log
//
//		1.00.1
//			- made changes so that the driver will work with
//			  the revised GUI
//
//		1.00.0
//			- initial release
//
// VisualDSP++ "Flash Programmer" flash driver for use with the
// ADSP-BF533 EZ-KIT Lite containing the STMicroelectronics PSD4256G
// flash device.
//
///////////////////////////////////////////////////////////////

// error enum
#include "Errors.h"
#include "define.h"
#include "SetupDSP.h"
#include "smallflash.h"


#define BUFFER_SIZE		0x600
#define	NUM_SECTORS 	(FLASH_SIZE/FLASH_BLOCK_SIZE)
#define FLASH_WIDTH		16 //8	//Flash is 16bits width   

// structure for flash sector information
typedef struct _SECTORLOCATION{
	long lStartOff;
	long lEndOff;
}SECTORLOCATION;


// Flash Programmer commands
typedef enum
{
	NO_COMMAND,		// 0
	GET_CODES,		// 1
	RESET,			// 2
	WRITE,			// 3
	FILL,			// 4
	ERASE_ALL,		// 5
	ERASE_SECT,		// 6
	READ,			// 7
	GET_SECTNUM,	// 8
	GET_SECSTARTEND,// 9
	ERS_DATA_SEC,   //0x0a
	ERS_PROGRAM_SEC,//0x0b
	ERS_CONFIG_SEC,//0x0c
}enProgCmds;

// #defines for the assembler
asm ("#define FLASH_START_L 0x0000");
asm ("#define FLASH_START_H 0x2000");
bool EraseConfigSector();
bool EraseDataSector();
bool EraseProgramSector();
// function prototypes
ERROR_CODE SetupForFlash();
ERROR_CODE GetCodes();
ERROR_CODE PollToggleBit(unsigned long ulOffset);
ERROR_CODE ResetFlash();
ERROR_CODE EraseFlash();
ERROR_CODE EraseBlock( int nBlock );
ERROR_CODE UnlockFlash(unsigned long ulOffset);
ERROR_CODE WriteData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE FillData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE ReadData( unsigned long ulStart, long lCount, long lStride, int *pnData );
ERROR_CODE ReadFlash( unsigned long ulOffset, int *pnValue );
ERROR_CODE WriteFlash( unsigned long ulOffset, int nValue );
ERROR_CODE GetSectorNumber( unsigned long ulOffset, int *pnSector );
ERROR_CODE GetSectorStartEnd( long *lStartOff, long *lEndOff, int nSector );

// global data for use with the VisualDSP++ plug-in
char 			*AFP_Title = "ADSP-BF561 EZ-KIT Lite";//"ADSP-BF533 EZ-KIT Lite"; 
char 			*AFP_Description = "28F128J3A";//"SST39VF040";  
enProgCmds 		AFP_Command = NO_COMMAND;
int 			AFP_ManCode = -1;				// 0x20 = STMicroelectronics
int 			AFP_DevCode = -1;				// 0xE9 = PSD4256G
unsigned long 	AFP_Offset = 0x0;
int 			*AFP_Buffer;
long 			AFP_Size = BUFFER_SIZE;
long 			AFP_Count = -1;
long 			AFP_Stride = -1;
int 			AFP_NumSectors = NUM_SECTORS;
long 			AFP_SectorSize1 = 0x10000;
int 			AFP_SectorSize2 = 0x1000;
int 			AFP_Sector = -1;
int 			AFP_Error 			= 0;	      // contains last error encountered
bool 			AFP_Verify 			= FALSE;      // verify writes or not
long 			AFP_StartOff 		= 0x0;	      // sector start offset
long 			AFP_EndOff 			= 0x0;	      // sector end offset
int		    	AFP_FlashWidth		= 0x10;       // 0x08;// width of the flash device    
int 			*AFP_SectorInfo;
SECTORLOCATION SectorInfo[NUM_SECTORS];



// flag telling us that the flash had to be reset
char reset = 0x0;

// exit flag
bool bExit = FALSE;

// *********************
// Map of flash sectors
// *********************

// FLASH A

// 		Type			START ADDR    	END ADDR		SECTOR NUM
// 		-------			----------		--------		----------
// 		Main Flash		0x20000000		0x200FFFFF		00 - 15
// 		Boot Flash		0x20200000		0x2020FFFF		32 - 35

// FLASH B

// 		Main Flash		0x20100000		0x201FFFFF		16 - 31
// 		Boot Flash		0x20280000		0x2028FFFF		36 - 39




// FLASH bf561  

// 		Type			START ADDR    	END ADDR		SECTOR NUM
// 		-------			----------		--------		----------
// 		Flash		    0x20000000		0x200FFFFF		00 - 31

//     During Block-Erase, A19-A15 address line will select the block.
 
main()
{
	int i = 0;
	
	// by making AFP_Buffer as big as possible the plug-in can send and
	// receive more data at a time making the data transfer quicker
	//
	// by allocating it on the heap the compiler does not create an
	// initialized array therefore making the driver image smaller
	// and faster to load
	//
	// we have modified the linker description file (LDF) so that the heap
	// is large enough to store BUFFER_SIZE elements at this point
	AFP_Buffer = (int *)malloc(BUFFER_SIZE);
	
	// AFP_Buffer will be NULL if we could not allocate storage for the
	// buffer
	if ( AFP_Buffer == NULL )
	{
		// tell GUI that our buffer was not initialized
		AFP_Error = BUFFER_IS_NULL;
	}

	//initiate sector information structures
	for(i=0;i<AFP_NumSectors; i++)
	{
		GetSectorStartEnd(&SectorInfo[i].lStartOff, &SectorInfo[i].lEndOff, i);
	}

	AFP_SectorInfo = (int*)&SectorInfo[0];

	// setup the flash so the DSP can access it
	SetupDSP();
	SetupForFlash();
	//setup code so that flash programmer can just read memory instead of call GetCodes().
	GetCodes();

	// command processing loop
	while ( !bExit )
	{
		// the plug-in will set a breakpoint at "AFP_BreakReady" so it knows
		// when we are ready for a new command because the DSP will halt
		//
		// the jump is used so that the label will be part of the debug
		// information in the driver image otherwise it may be left out
		// since the label is not referenced anywhere
		asm("AFP_BreakReady:");
		if ( FALSE )
			asm("jump AFP_BreakReady;");

		// switch on the command
		switch ( AFP_Command )
		{
			// get manufacturer and device codes
			case GET_CODES:
				AFP_Error = GetCodes();
				break;

			// reset
			case RESET:
				AFP_Error = ResetFlash();
				break;

			// write
			case WRITE:
				AFP_Error = WriteData( AFP_Offset, AFP_Count, AFP_Stride, AFP_Buffer );
				break;

			// fill
			case FILL:
				AFP_Error = FillData( AFP_Offset, AFP_Count, AFP_Stride, AFP_Buffer );
				break;

			// erase all
			case ERASE_ALL:
				AFP_Error = EraseFlash();
				break;

			// erase sector
			case ERASE_SECT:
				AFP_Error = EraseBlock( AFP_Sector ); //固定的擦除塊   
				break;

			// read
			case READ:
				AFP_Error = ReadData( AFP_Offset, AFP_Count, AFP_Stride, AFP_Buffer );
				break;

			// get sector number based on address
			case GET_SECTNUM:
				AFP_Error = GetSectorNumber( AFP_Offset, &AFP_Sector );
				break;

			// get sector number start and end offset
			case GET_SECSTARTEND:
				AFP_Error = GetSectorStartEnd( &AFP_StartOff, &AFP_EndOff, AFP_Sector );
				break;
			case ERS_DATA_SEC:
				{
					EraseDataSector(); //跟 case ERASE_SECT	 功能一樣 		
				}
				break;	
			case ERS_PROGRAM_SEC:
				{
					EraseProgramSector();					
				}
				break;
			case ERS_CONFIG_SEC:
				{
					EraseConfigSector();
				}
				break;
			// no command or unknown command do nothing
			case NO_COMMAND:
			default:
				// set our error
				AFP_Error = UNKNOWN_COMMAND;
				break;
		}

		// clear the command
 		AFP_Command = NO_COMMAND;
	}

	// free the buffer if we were able to allocate one
	if ( AFP_Buffer )
		free( AFP_Buffer );


	// all done
	return 0;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE SetupForFlash()
//
// Perform necessary setup for the processor to talk to the
// flash such as external memory interface registers, etc.
//
//////////////////////////////////////////////////////////////

ERROR_CODE SetupForFlash()///????
{
	//*pEBIU_AMBCTL0	= 0x0000FFC0;
	//*pEBIU_AMGCTL	= 0x00F2;

	return NO_ERR;
}



//////////////////////////////////////////////////////////////
// ERROR_CODE WriteData()
//
// Write a buffer to flash.
//
// Inputs:	unsigned long ulStart - offset in flash to start the writes at
//			long lCount - number of elements to write, in this case bytes
//			long lStride - number of locations to skip between writes
//			int *pnData - pointer to data buffer
//
//////////////////////////////////////////////////////////////
ERROR_CODE WriteData( unsigned long ulStart, long lCount, long lStride, int *pnData )
{
	FlashWriteData(ulStart,lCount,lStride,pnData);
	return NO_ERR;	
}


//////////////////////////////////////////////////////////////
// ERROR_CODE FillData()
//
// Fill flash with a value.
//
// Inputs:	unsigned long ulStart - offset in flash to start the writes at
//			long lCount - number of elements to write, in this case bytes
//			long lStride - number of locations to skip between writes
//			int *pnData - pointer to data buffer
//
//////////////////////////////////////////////////////////////

ERROR_CODE FillData( unsigned long ulStart, long lCount, long lStride, int *pnData )
{
	long i;	
	for(i=0;i<lCount/2;i++)
	{      
		FlashWriteData(ulStart, 2, lStride, pnData);  //zhanzy modify
		ulStart += sizeof(UWORD);
	}
	// return the appropriate error code
	return NO_ERR;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE ReadData()
//
// Read a buffer from flash.
//
// Inputs:	unsigned long ulStart - offset in flash to start the reads at
//			int nCount - number of elements to read, in this case bytes
//			int nStride - number of locations to skip between reads
//			int *pnData - pointer to data buffer to fill
//
//////////////////////////////////////////////////////////////

ERROR_CODE ReadData( unsigned long ulStart, long lCount, long lStride, int *pnData )
{
	FlashReadData(ulStart,lCount,lStride,pnData);
	// return the appropriate error code
	return NO_ERR;
}
//////////////////////////////////////////////////////////////
// ERROR_CODE WriteFlash()
//
// Write a value to an offset in flash.
//
// Inputs:	unsigned long ulOffset - offset to write to
//			int nValue - value to write
//
//////////////////////////////////////////////////////////////

ERROR_CODE WriteFlash( unsigned long ulOffset, int nValue )
{
	FlashWriteCell(ulOffset, nValue);
	return NO_ERR;
}

//////////////////////////////////////////////////////////////
// ERROR_CODE ReadFlash()
//
// Read a value from an offset in flash.
//
// Inputs:	unsigned long ulOffset - offset to read from
//			int pnValue - pointer to store value read from flash
//
//////////////////////////////////////////////////////////////

ERROR_CODE ReadFlash( unsigned long ulOffset, int *pnValue )
{
	FlashReadCell(ulOffset, pnValue);
	// ok
	return NO_ERR;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE PollToggleBit()
//
// Polls the toggle bit in the flash to see when the operation
// is complete.
//
// Inputs:	unsigned long ulOffset - offset in flash
//
//////////////////////////////////////////////////////////////

ERROR_CODE PollToggleBit(unsigned long ulOffset)
{
	FlashPollToggleBit(ulOffset);
	return NO_ERR;
}



//////////////////////////////////////////////////////////////
// ERROR_CODE ResetFlash()
//
// Sends a "reset" command to the flash.
//
//////////////////////////////////////////////////////////////

ERROR_CODE ResetFlash()
{
	// send the reset command to the flash
	FlashReset();

	// reset should be complete
	return NO_ERR;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE EraseFlash()
//
// Sends an "erase all" command to the flash.
//
//////////////////////////////////////////////////////////////

ERROR_CODE EraseFlash()
{
	FlashEraseChip();
	return NO_ERR;
}

//////////////////////////////////////////////////////////////
// ERROR_CODE EraseBlock()
//
// Sends an "erase block" command to the flash.
//
//////////////////////////////////////////////////////////////

ERROR_CODE EraseBlock( int  nBlock)
{
	FlashEraseBlock(nBlock);
	return NO_ERR;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE UnlockFlash()
//
// Sends an "unlock" command to the flash to allow the flash
// to be programmed.
//
//////////////////////////////////////////////////////////////

ERROR_CODE UnlockFlash(unsigned long ulOffset)
{
	FlashUnlock(ulOffset);
	return NO_ERR;
}	


//////////////////////////////////////////////////////////////
// ERROR_CODE GetCodes()
//
// Sends an "auto select" command to the flash which will allow
// us to get the manufacturer and device codes.
//
//////////////////////////////////////////////////////////////

ERROR_CODE GetCodes()
{
	// send the auto select command to the flash
	UDWORD wdID = FlashGetID();
	
	AFP_DevCode = wdID & 0x00FF;

	// there is no ManCode so just hard code it to 0x0
	AFP_ManCode = ((wdID>>8)&0xff);

	// we need to issue another command to get the part out
	// of auto select mode so issue a reset which just puts
	// the device back in read mode
	FlashReset();

	// ok
	return NO_ERR;
}


//////////////////////////////////////////////////////////////
// ERROR_CODE GetSectorNumber()
//
// Gets a sector number based on the offset.
//
//////////////////////////////////////////////////////////////

ERROR_CODE GetSectorNumber( unsigned long ulOffset, int *pnSector )
{
	int nSector = ulOffset/FLASH_BLOCK_SIZE;
	*pnSector   = nSector;

	// ok
	return NO_ERR;
}

//////////////////////////////////////////////////////////////
// ERROR_CODE GetSectorStartEnd()
//
// Gets a sector number based on the offset.
//
// Inputs:	long *lStartOff - pointer to the start offset
//			long *lEndOff - pointer to the end offset
//			int nSector - sector number
//
//////////////////////////////////////////////////////////////

ERROR_CODE GetSectorStartEnd( long *lStartOff, long *lEndOff, int nSector )
{
	if(nSector >= NUM_SECTORS)
		return INVALID_SECTOR;
	*lStartOff  = nSector * FLASH_BLOCK_SIZE;
	*lEndOff    = nSector * FLASH_BLOCK_SIZE + FLASH_BLOCK_SIZE - 1;

	// ok
	return NO_ERR;
}

//擦除數(shù)據(jù)區(qū)
bool EraseDataSector()
{
	int nEraseStart = FLASH_DATA_OFFSET / FLASH_BLOCK_SIZE;
	int nEraseEnd   = FLASH_CFG_OFFSET  / FLASH_BLOCK_SIZE;
	int i,j;
	for(i=nEraseStart;i<nEraseEnd;i++)
	{
		EraseBlock(i);			
	}
	return TRUE;
}

bool EraseProgramSector()
{
	int nEraseStart = 0;
	int nEraseEnd   = FLASH_DATA_OFFSET / FLASH_BLOCK_SIZE;
	int i,j;
	for(i=nEraseStart;i<nEraseEnd;i++)
	{
		EraseBlock(i);		
	}
	return TRUE;
}

bool EraseConfigSector()
{
	int nEraseStart = FLASH_CFG_OFFSET / FLASH_BLOCK_SIZE;
	int nEraseEnd   = FLASH_SIZE / FLASH_BLOCK_SIZE;
	int i,j;
	for(i=nEraseStart;i<nEraseEnd;i++)
	{
		EraseBlock(i);		
	}
	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品12区| 综合久久久久久| 国产一区二区导航在线播放| 蜜桃视频在线一区| 国产.欧美.日韩| 91成人看片片| 日韩女同互慰一区二区| 中文字幕精品三区| 亚洲va中文字幕| 国产精品18久久久久久久久久久久| 国产sm精品调教视频网站| 一本大道av伊人久久综合| 制服丝袜亚洲播放| 国产精品久久久久一区二区三区共| 亚洲大尺度视频在线观看| 久久er99精品| 一本在线高清不卡dvd| 555夜色666亚洲国产免| 日本一区二区成人在线| 亚洲成人午夜电影| 国产91精品久久久久久久网曝门| 欧美这里有精品| 久久一区二区视频| 亚洲国产日韩a在线播放| 国产一区二区三区在线观看免费视频| 色狠狠一区二区三区香蕉| 久久久噜噜噜久久人人看| 亚洲国产精品一区二区www在线| 国产在线乱码一区二区三区| 色呦呦一区二区三区| 国产视频一区二区在线观看| 午夜精品久久久久久| 99这里只有久久精品视频| 91精品国产欧美一区二区成人| 亚洲国产精品高清| 毛片av中文字幕一区二区| 成人app下载| 精品久久国产字幕高潮| 亚洲午夜精品一区二区三区他趣| 成人丝袜视频网| 欧美成人一区二区三区片免费| 亚洲激情校园春色| 成人黄色777网| 久久综合九色欧美综合狠狠| 午夜久久久影院| 91国偷自产一区二区三区观看| 久久精品免费在线观看| 美女久久久精品| 精品视频在线免费观看| 国产精品午夜在线观看| 久久精品国产秦先生| 欧美日韩和欧美的一区二区| 18成人在线观看| 久久久亚洲精华液精华液精华液| 天天综合色天天综合| 欧美手机在线视频| 亚洲精品久久久蜜桃| 播五月开心婷婷综合| 国产欧美中文在线| 国产寡妇亲子伦一区二区| 欧美大片在线观看一区二区| 日本视频中文字幕一区二区三区| 欧美日韩三级视频| 亚洲综合久久久久| 欧美伊人久久大香线蕉综合69| 最近中文字幕一区二区三区| 成人开心网精品视频| 中文字幕巨乱亚洲| 成人黄色网址在线观看| 国产精品色一区二区三区| 国产精品系列在线播放| 国产三级精品视频| 成人美女视频在线看| 国产精品国产精品国产专区不片| 成人午夜视频网站| 亚洲欧洲日韩综合一区二区| 99久久久久久| 亚洲精品水蜜桃| 欧美中文字幕一二三区视频| 亚洲一级在线观看| 911精品产国品一二三产区| 五月天激情综合| 天天色综合成人网| 国产精品自拍网站| 国产精品77777竹菊影视小说| 欧美精品久久99久久在免费线| 麻豆中文一区二区| 欧美日韩一级二级| 日产欧产美韩系列久久99| 91精品国产综合久久久久久久久久| 午夜精品一区二区三区三上悠亚| 欧美日韩国产大片| 蜜乳av一区二区三区| 精品免费视频一区二区| 日韩免费观看高清完整版在线观看| 中文字幕av一区 二区| 日韩国产高清影视| 97久久超碰国产精品电影| 日韩情涩欧美日韩视频| 日韩毛片精品高清免费| 黄色精品一二区| 欧美三级日韩在线| 国产精品久久久久天堂| 久久99精品久久久久久国产越南| 91黄色激情网站| 国产精品视频九色porn| 免费在线观看一区| 欧美影院一区二区三区| 国产精品久久久久国产精品日日| 奇米影视一区二区三区小说| 欧美在线视频全部完| 中文字幕第一区第二区| 久久福利视频一区二区| 欧美精品一二三| 亚洲老妇xxxxxx| av一区二区不卡| 久久夜色精品一区| 免费看精品久久片| 精品视频在线看| 亚洲男女一区二区三区| 国产成人av福利| 精品理论电影在线| 裸体歌舞表演一区二区| 91精品久久久久久蜜臀| 午夜精品久久久久久久99樱桃| 色香蕉成人二区免费| 日韩毛片一二三区| 99在线精品一区二区三区| 久久一日本道色综合| 久久精品国产第一区二区三区| 这里只有精品电影| 奇米一区二区三区| 日韩一二在线观看| 日本色综合中文字幕| 日韩视频免费观看高清完整版在线观看 | 丰满少妇久久久久久久| 精品不卡在线视频| 国产一区二区三区精品欧美日韩一区二区三区 | 播五月开心婷婷综合| 欧美国产国产综合| av网站一区二区三区| 中文字幕日韩一区| 91网上在线视频| 亚洲激情在线播放| 欧美日韩亚洲不卡| 午夜欧美视频在线观看| 欧美剧情电影在线观看完整版免费励志电影 | 国产成人一区在线| 国产精品日产欧美久久久久| 成人中文字幕电影| 国产精品国产精品国产专区不片| caoporen国产精品视频| 亚洲视频一区二区在线| 欧美亚洲禁片免费| 麻豆精品视频在线观看免费| 欧美精品一区二区精品网| 国产福利一区在线| |精品福利一区二区三区| 在线中文字幕一区二区| 日韩av在线发布| 久久精品日韩一区二区三区| 99精品久久只有精品| 亚洲成av人片一区二区三区| 欧美一级片在线观看| 国产精品系列在线观看| 亚洲欧美国产三级| 91精品在线观看入口| 国产精品18久久久久久vr| 亚洲另类一区二区| 日韩欧美一区二区视频| 成人免费黄色在线| 亚欧色一区w666天堂| 欧美变态凌虐bdsm| 91在线视频官网| 麻豆成人久久精品二区三区小说| 国产偷国产偷精品高清尤物| 在线视频欧美精品| 久草精品在线观看| 国产精品久久久久四虎| 7777精品伊人久久久大香线蕉完整版 | 国产精品天干天干在线综合| 色欲综合视频天天天| 麻豆精品新av中文字幕| 综合久久综合久久| 欧美sm美女调教| 一本久久a久久精品亚洲| 九九精品一区二区| 一区二区国产视频| 久久久99免费| 欧美精品高清视频| 99久久国产综合精品女不卡| 蓝色福利精品导航| 亚洲一区在线观看网站| 日本一区二区免费在线| 91精品一区二区三区在线观看| kk眼镜猥琐国模调教系列一区二区| 日韩精品电影一区亚洲| 亚洲婷婷综合久久一本伊一区| 欧美xingq一区二区| 一区在线观看视频|