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

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

?? flashmem.c

?? IXP425的BSP代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* flashMem.c - Flash memory device driver *//* Copyright 1984-2000 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01o,15feb01,frf  merged latest contribution, added support for                 28F128J3A, 28F320J3A, 28F640J3A and 29LV040B.01n,23mar00,zl   added support for 29LV160B/T. added sysSectorErase().01m,01feb00,jpd  added support for 28F320. SPR 3129301l,09sep98,jpd  added support for 28F016SV; minor doc fixes.01k,20apr98,jpd  moved back into main source tree from local copy in BSPs.01j,24mar98,jpd  added support for 29LV1024 and 29C040A.01i,04jul97,jpd  added support for 28F008 device, made overlay buffer dynamic.01h,25jun96,map  added documentation, and some clean up.01g,02apr96,tam  cast FLASH_ADRS and FLASH_SIZE to UINT32 to get rid off                 a compiler warning.01f,12feb96,kkk  made 1st param of sysFlashDataPoll() volatile to confirm                 to dzb's change.01e,26jan96,dzb  added volatile to register pointers.           +jpb  changed delay parameters to be globals if not defined.01d,24feb94,dzb  added sysFlashWrite{En,Dis}able(), sysFlashBoardDelay().01c,15feb94,dzb  added SYS_FLASH_DELAY_SHIFT macro.01b,07jan94,dzb  added support for 29F0X0 flash devices.                 cut ties to NVRAM macros.  added support for FLASH_WIDTH.01a,05oct93,dzb  derived from version 1b of mem/iFlashMem.c.*//*DESCRIPTIONThis library contains routines to manipulate flash memory.  Read and writeroutines are included.The macro values FLASH_ADRS, FLASH_SIZE, and FLASH_WIDTH must be defined toindicate the address, size (in bytes), and the data-access width (in bytes) ofthe flash memory.If the flash memory needs to be overlaid, and the section of the memory thatneeds to be overlaid is less than FLASH_SIZE, then, for efficiency, defineFLASH_SIZE_WRITABLE to the size (in bytes) of the overlay section.The routine sysFlashDelay() creates a delay for a specified number ofmicroseconds.  The timing loop can be adjusted on a board-dependent basis bydefining the function sysFlashBoardDelay and values for the following macros,.iPSYS_FLASH_DELAY_SHIFT.iPSYS_FLASH_DELAY_ADJ.iPSYS_FLASH_DELAY_INCR.LPTo use the routine sysFlashBoardDelay(), the macro SYS_FLASH_BOARD_DELAYshould be defined.The macro FLASH_NO_OVERLAY should be defined when calls to sysFlashSet()are expected to erase the flash and reprogram it with only the new data.The macro SYS_FLASH_TYPE should be defined for flash devices that cannot beauto-selected. This macro should be set to a flash device code defined in theheader files, <drv/mem/flash28.h> and <drv/mem/flash29.h>To support flash devices that that need to turn on/off write protect features(special programming voltages or other write-enable features), the macroSYS_FLASH_WRITE, and the routines, sysFlashWriteEnable() andsysFlashFlashWriteDisable() should be defined.INTERNAL:The FLASH_SIZE_WRITABLE concept doesn't work very well.  It just limits theamount of flash that is writable, so why bother.  What it was reallyintended to address was flash that is only block writable, i.e. youcan only write a complete block at a time.  To properly handle blockmemory, you must copy the old block of memory to a buffer, update thepart of the buffer that is to be changed, and then write back thecomplete buffer in a single write operation.The accesses to non-volatile memory, and flash control registers needsto be abstracted.  Macros should be used for all actual i/o operations.*/#include "drv/mem/flashDev.h"#include "drv/mem/flash28.h"#include "drv/mem/flash29.h"/* defines *//* Establish default values for DELAY parameters */#ifndef	SYS_FLASH_DELAY_SHIFT#   define	SYS_FLASH_DELAY_SHIFT 0#endif /*SYS_FLASH_DELAY_SHIFT*/#ifndef	SYS_FLASH_DELAY_ADJ#   define	SYS_FLASH_DELAY_ADJ 0#endif	/* SYS_FLASH_DELAY_ADJ */#ifndef	SYS_FLASH_DELAY_INCR#   define	SYS_FLASH_DELAY_INCR 1#endif	/* SYS_FLASH_DELAY_INCR *//* Names of routines, or null values */#ifdef	SYS_FLASH_WRITE#   define SYS_FLASH_WRITE_ENABLE_RTN()	sysFlashWriteEnable ()#   define SYS_FLASH_WRITE_DISABLE_RTN() sysFlashWriteDisable ()#else#   define SYS_FLASH_WRITE_ENABLE_RTN()#   define SYS_FLASH_WRITE_DISABLE_RTN()#endif	/* SYS_FLASH_WRITE */#ifdef	SYS_FLASH_BOARD_DELAY#   define SYS_FLASH_BOARD_DELAY_RTN()	sysFlashBoardDelay ()#else#   define SYS_FLASH_BOARD_DELAY_RTN()#endif	/* SYS_FLASH_BOARD_DELAY */#ifdef SYS_FLASH_TYPE#   define FLASH_MEM_TYPE		SYS_FLASH_TYPE#else#   define FLASH_MEM_TYPE		0#endif	/* SYS_FLASH_TYPE */#ifdef FLASH_SIZE_WRITEABLE#   define FLASH_MEM_SIZE		FLASH_SIZE_WRITEABLE#else#   define FLASH_MEM_SIZE		FLASH_SIZE#endif	/* FLASH_SIZE_WRITEABLE *//* Operation status bits for Flash 29Fxxx devices */#define Q7(ix)		((ix & 0x80) >> 7)	/* DQ7 bit */#define Q5(ix)		((ix & 0x20) >> 5)	/* DQ5 bit *//* globals */IMPORT	void sysFlashWriteEnable (void);IMPORT	void sysFlashWriteDisable (void);IMPORT	void sysFlashBoardDelay (void);int	flashDelayShift	= SYS_FLASH_DELAY_SHIFT;int	flashDelayAdj	= SYS_FLASH_DELAY_ADJ;int	flashDelayIncr	= SYS_FLASH_DELAY_INCR;static UINT8 flashType = FLASH_MEM_TYPE;/* forward declarations */void	sysFlashDelay (int delayCount);STATUS	sysFlashDataPoll (volatile FLASH_DEF * pFA, FLASH_DEF value);STATUS	sysFlashWrite (FLASH_DEF * pFB, int size, int offset,                       UINT8 flashType, FLASH_DEF value);STATUS sysFlashUnlock ( FLASH_DEF * pFA,  UINT8 flashType);STATUS sysFlashLock(FLASH_DEF * pFA, UINT8 flashType);UINT8	sysFlashTypeGet (void);STATUS sysFlashNextBlock(UINT32 * flash_offset);/******************************************************************************** sysFlashGet - get the contents of flash memory** This routine copies the contents of flash memory into a specified* string.  The string is terminated with an EOS.** RETURNS: OK, or ERROR if access is outside the flash memory range.** SEE ALSO: sysFlashSet()** INTERNAL* If multiple tasks are calling sysFlashSet() and sysFlashGet(),* they should use a semaphore to ensure mutually exclusive access.*/STATUS sysFlashGet    (    char *	string,		/* where to copy flash memory      */    int		strLen,		/* maximum number of bytes to copy */    int		offset		/* byte offset into flash memory   */    )    {    if ((offset < 0) || (strLen < 0) || ((offset + strLen) > (FLASH_ADRS + FLASH_SIZE)))        return (ERROR);    bcopyBytes ((char *) (offset), string, strLen);    string [strLen] = EOS;    return (OK);    }/******************************************************************************** sysFlashDelay - create a delay for a specified number of microseconds** This routine implements a busy wait for a specified number of microseconds.* The timing loop can be adjusted on a board-dependent basis by* defining values for the following macros:* .iP* SYS_FLASH_DELAY_SHIFT* .iP* SYS_FLASH_DELAY_ADJ* .iP* SYS_FLASH_DELAY_INCR* .LP* The values SYS_FLASH_DELAY_SHIFT and SYS_FLASH_DELAY_ADJ* convert microseconds into a board-dependent tick-count.* This routine can call a user-defined hook, sysFlashBoardDelay(),* which creates a delay for a number of board-dependent ticks as* specified by SYS_FLASH_DELAY_INCR.  To use sysFlashBoardDelay(), define* SYS_FLASH_BOARD_DELAY in config.h.** RETURNS: N/A** SEE ALSO: sysFlashErase(), sysFlashWrite()*/void sysFlashDelay    (    int delayCount	/* number of uSec to delay */    )    {    int ix;    delayCount <<= flashDelayShift;	/* board-dependent shift */    delayCount += flashDelayAdj;		/* board-dependent addition */    for (ix = 0; ix < delayCount; ix += flashDelayIncr)        SYS_FLASH_BOARD_DELAY_RTN ();    }/******************************************************************************** sysFlashDataPoll - wait for a flash device operation to complete** This routine polls a specified address on a 29F\f2xxx\f1 flash device* until the device operation at that location completes or times out.** While a flash operation is in progress, a read on the device* returns on Q7 (data bit 7) the complement of the previous value of Q7.  Once* the flash operation has completed, the Q7 bit returns the true data* of the last write. Subsequent reads return the correct data in Q0-7.** The Q5 bit implements a timeout functionality.  When a currently* executing flash operation exceeds specified limits, the Q5 bit is set (to 1).** RETURNS: OK, or ERROR if the timeout (!Q5) occurs before the device operation* completes.** SEE ALSO: sysFlashErase(), sysFlashWrite()*/STATUS sysFlashDataPoll    (    volatile FLASH_DEF * pFA,	/* programmed address to poll */    FLASH_DEF value		/* data programmed to poll address */    )    {    STATUS retVal = OK;    volatile FLASH_POLL_DEF * pTest = (FLASH_POLL_DEF *) pFA;    volatile FLASH_POLL_DEF * pVal  = (FLASH_POLL_DEF *) &value;    int ix;			/* byte counter */    int vBit;			/* programmed value of DQ7 */    for (ix = (FLASH_WIDTH/FLASH_CHIP_WIDTH - 1); (ix >= 0 ) && (retVal == OK);             ix--, pTest++, pVal++)        {        vBit = Q7(*pVal);        while (Q7(*pTest) != vBit)            if (Q5(*pTest) == 1)	/* timeout ? */                break;        if (Q7(*pTest) != vBit)		/* check Q7 & Q5 race */            retVal = ERROR;        }    return (retVal);    }/******************************************************************************** sysFlashErase - erase the contents of a sector** This routine clears the contents of one sector in the flash memory.** Flash 29F\f2xxx\f1 devices are erased by writing the six-byte erase code* into specific address locations, which sets all byte locations to a high* value (0xFF).** RETURNS: OK, or ERROR if the contents of sector cannot be erased.*/STATUS sysFlashErase    (    FLASH_DEF * pFA,		/* Sector start address */    UINT8 flashType		/* type of flash memory on-board */    )    {    STATUS retVal = OK;    switch (flashType)        {	case (FLASH_28F640J3A):	case (FLASH_28F320J3A):	case (FLASH_28F128J3A):	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */            *pFA = FLASH28_CMD_ERASE_SETUP;		/* setup */            *pFA = FLASH28F008_CMD_ERASE;		/* erase */	    /* Check Write State Machine Status */	    do	      {	      } while ((*pFA & FLASH28F008_STAT_WSMS) != FLASH28F008_STAT_WSMS);	    /* Check Erase Error Status */           if (*pFA & (BIT(5) | BIT(4) | BIT(3) | BIT(1)))		{		*pFA = FLASH28F008_CMD_CLEAR_STATUS;		retVal = ERROR;		}            *pFA = FLASH28_CMD_RESET;	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */            break;        case (FLASH_29LV160T):        case (FLASH_29LV160B):	case (FLASH_29LV040B):    	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* enable write */            *(FLASH_CAST FLASH29_REG_FIRST_CYCLE)  = FLASH29_CMD_FIRST;            *(FLASH_CAST FLASH29_REG_SECOND_CYCLE) = FLASH29_CMD_SECOND;            *(FLASH_CAST FLASH29_REG_FIRST_CYCLE)  = FLASH29_CMD_CHIP_ERASE;            *(FLASH_CAST FLASH29_REG_FIRST_CYCLE)  = FLASH29_CMD_FOURTH;            *(FLASH_CAST FLASH29_REG_SECOND_CYCLE) = FLASH29_CMD_FIFTH;            *pFA		  		   = FLASH29_CMD_SECTOR;            do {                retVal = sysFlashDataPoll (pFA, (FLASH_DEF) 0xffffffff);                } while ((*pFA != (FLASH_DEF) 0xffffffff) && (retVal == OK));	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* disable write */	    break;        default:            retVal = ERROR;        }    return (retVal);    }/******************************************************************************** sysFlashWrite - write data to flash memory** This routine copies specified data of a specified length, <size>, into a* specified offset, <offset>, in the flash memory.  Data is passed as a string,* <pFB>, if not NULL.  If NULL, data is taken as a repeated sequence of* <value>.* The parameter <flashType> should be set to the flash device code.* The parameter <offset> must be appropriately aligned for the width of* the Flash devices in use.** Flash 28F\f2xxx\f1 devices are programmed by a sequence of operations:* .iP* set up device to write* .iP* perform write* .iP* verify the write* .LP** Flash 29F\f2xxx\f1 devices are programmed by a sequence of operations:* .iP* set up device to write* .iP* perform write* .iP* wait for the write to complete* .LP** RETURNS: OK, or ERROR if the write operation fails.** SEE ALSO: sysFlashSet()*/STATUS sysFlashWrite    (    FLASH_DEF *	pFB,		/* string to be copied; use <value> if NULL */    int		size,		/* size to program in bytes */    int		offset,		/* byte offset into flash memory */    UINT8	flashType,	/* type of flash memory on-board */    FLASH_DEF	value		/* value to program */    )    {    volatile FLASH_DEF * pFA;		/* flash address */    STATUS retVal = OK;    int ix;    int sectorSize = 128;    int twc = 2;	/* time for write completion */    switch (flashType)        {	case (FLASH_28F008):	case (FLASH_28F016):	case (FLASH_28F160):	case (FLASH_28F320):	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */            for (pFA = FLASH_CAST (offset); (pFA < FLASH_CAST                (size + offset)) && (retVal == OK); pFA++)		{		if (pFB != NULL)		    value = *pFB++;		*pFA = FLASH28_CMD_PROG_SETUP;	/* write setup */		*pFA = value;			/* data to write */		/* Check Write State Machine Status */		do		    {		    *pFA = FLASH28F008_CMD_READ_STATUS;		    }		while ((*pFA & FLASH28F008_STAT_WSMS) != FLASH28F008_STAT_WSMS);		/* Check Byte Write Error Status */		if (*pFA & (BIT(5) | BIT(4) | BIT(3) | BIT(1)))		    {		    *pFA = FLASH28F008_CMD_CLEAR_STATUS;		    retVal = ERROR;		    }		}            *pFA = FLASH28_CMD_RESET;	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */            break;	case (FLASH_28F320J3A):	    	case (FLASH_28F640J3A):	    	case (FLASH_28F128J3A):	     SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */	     for ( pFA = FLASH_CAST (offset);		   (pFA <FLASH_CAST (size + offset)) &&	       (retVal == OK);		   pFA++)	       {	       if (pFB != NULL)		 value = *pFB++;	       *pFA = FLASH28_CMD_PROG_SETUP;	/* write setup */	       *pFA = value;				/* data to write */	       /* Check Write State Machine Status */	       do		 {		 }	       while ((*pFA & FLASH28F008_STAT_WSMS) != FLASH28F008_STAT_WSMS);	       /* Check Byte Write Error Status */	                  if (*pFA & (BIT(5) | BIT(4) | BIT(3) | BIT(1)))		   {		   *pFA = FLASH28F008_CMD_CLEAR_STATUS;		   retVal = ERROR;		    }	       *pFA = FLASH28_CMD_RESET;	       }	     SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */	     break;        case (FLASH_28F256):        case (FLASH_28F512):        case (FLASH_28F010):        case (FLASH_28F020):            {	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品电影在线观看| 欧美日韩国产一级二级| 国产69精品久久久久777| 欧美色区777第一页| 亚洲激情图片qvod| 在线视频你懂得一区| 亚洲美女屁股眼交3| 99精品国产视频| 日本视频免费一区| 国产精品三级久久久久三级| 91久久一区二区| 亚洲男人天堂av| 欧美电影免费观看高清完整版在线| 久久99久久精品欧美| 日本一区二区成人| 91国模大尺度私拍在线视频| 五月天视频一区| 日韩欧美一级片| 色综合一区二区| 日韩精品国产欧美| 在线观看一区日韩| 天堂久久久久va久久久久| 色婷婷亚洲综合| 国产成人自拍网| 免费在线观看成人| 亚洲精品乱码久久久久久日本蜜臀| 日韩一级黄色大片| 日本乱码高清不卡字幕| www.成人网.com| 欧洲在线/亚洲| 日韩亚洲欧美综合| 久久久国产精品麻豆| 亚洲婷婷综合久久一本伊一区| 性感美女极品91精品| 久久99日本精品| 波多野结衣中文字幕一区二区三区 | 国产精品久久久久久久久久久免费看| 国产精品久久久久久亚洲伦| 亚洲一级电影视频| 久久精品99国产国产精| 丰满放荡岳乱妇91ww| 欧美三区在线观看| 国产欧美一区二区精品久导航| 综合在线观看色| 麻豆一区二区在线| 91日韩在线专区| 国产亚洲欧洲997久久综合| 亚洲一二三四在线| 白白色亚洲国产精品| 精品国产91九色蝌蚪| 一片黄亚洲嫩模| 成人免费高清视频| 日韩午夜激情电影| 亚洲国产裸拍裸体视频在线观看乱了| 国产电影精品久久禁18| 日韩欧美亚洲一区二区| 亚洲国产视频在线| 成人高清视频在线观看| 精品久久久久久无| 一区二区高清在线| bt7086福利一区国产| 国产亚洲一区二区在线观看| 在线视频一区二区免费| 亚洲欧美色一区| 97久久精品人人爽人人爽蜜臀| 久久精子c满五个校花| 极品瑜伽女神91| 精品国产乱码久久久久久蜜臀| 免费成人性网站| 久久综合网色—综合色88| 麻豆精品视频在线观看| 欧美一区二区三区视频| 天天操天天综合网| 欧美一级高清大全免费观看| 麻豆成人91精品二区三区| 日韩欧美一区二区在线视频| 日韩综合一区二区| 精品少妇一区二区三区日产乱码| 奇米精品一区二区三区在线观看一| 91久久精品一区二区| 视频在线观看国产精品| 日韩三级av在线播放| 免费成人性网站| 日本一区二区免费在线观看视频| 99精品久久只有精品| 视频一区欧美精品| 国产日韩高清在线| 91美女在线看| 蜜桃一区二区三区在线观看| 国产香蕉久久精品综合网| 91免费在线视频观看| 美日韩一级片在线观看| 1000部国产精品成人观看| 欧美精品在线一区二区三区| 国产精品亚洲成人| 日日夜夜免费精品| 国产精品国产自产拍高清av| 欧美亚洲日本一区| 激情欧美日韩一区二区| 亚洲一区二区在线观看视频| 精品国产一区二区亚洲人成毛片 | 一区二区三区不卡在线观看 | 精品国产一区二区精华| 91网站最新地址| 国产在线一区二区综合免费视频| 五月天国产精品| 亚洲天堂福利av| 精品国产一区二区三区久久影院| 91福利国产精品| 91丝袜呻吟高潮美腿白嫩在线观看| 免费成人美女在线观看.| 亚洲国产一区二区a毛片| 国产精品高清亚洲| 欧美高清一级片在线| 91美女精品福利| 春色校园综合激情亚洲| 亚洲精品成人悠悠色影视| 国产精品久久久久婷婷二区次| 精品国产sm最大网站| 日韩午夜精品电影| 91精品国产综合久久久久| 在线一区二区视频| 99久免费精品视频在线观看| 大白屁股一区二区视频| 成年人网站91| 一本大道综合伊人精品热热| 色婷婷av久久久久久久| 欧美网站一区二区| 91麻豆精品国产91久久久久| 在线亚洲免费视频| 欧美日韩国产免费| 91精品国产全国免费观看| 欧美高清视频不卡网| 日韩丝袜情趣美女图片| 日韩欧美的一区二区| 久久无码av三级| 中文字幕成人网| 中文字幕日韩av资源站| 免费观看在线色综合| 成人性视频免费网站| 久久蜜桃av一区精品变态类天堂 | 欧美日韩国产三级| 日韩理论在线观看| 日本午夜精品视频在线观看| 国产一区二区免费在线| 91视频一区二区| 精品免费99久久| 亚洲精品福利视频网站| 国产在线播放一区三区四| 国产欧美精品一区二区色综合| 国产精品一区二区黑丝| 韩国av一区二区三区四区| 国产 欧美在线| 欧美日韩在线三级| 中文字幕精品一区二区三区精品| 亚洲综合图片区| 国产毛片精品国产一区二区三区| 欧美电影影音先锋| 亚洲一区二区在线视频| fc2成人免费人成在线观看播放| 日韩欧美一级在线播放| 日日欢夜夜爽一区| 欧美丰满少妇xxxbbb| 五月综合激情网| 91精品国产综合久久精品麻豆| 亚洲人xxxx| 91久久久免费一区二区| 亚洲精品欧美激情| 欧美色男人天堂| 日韩和欧美一区二区| 6080yy午夜一二三区久久| 丝袜美腿高跟呻吟高潮一区| 91精品国产综合久久精品app| 日韩成人一级片| 欧美大片一区二区| 激情图区综合网| 欧美国产精品专区| 91色乱码一区二区三区| 一区二区三区四区亚洲| 在线观看日韩高清av| 午夜欧美在线一二页| 日韩区在线观看| 国产麻豆欧美日韩一区| 国产色产综合色产在线视频| 成人精品鲁一区一区二区| 国产精品电影一区二区三区| 色婷婷综合视频在线观看| 亚洲福利视频三区| 欧美一区二区视频网站| 国产一区在线观看麻豆| 国产精品传媒视频| 欧美午夜精品理论片a级按摩| 视频一区二区中文字幕| 久久婷婷国产综合国色天香| 粉嫩蜜臀av国产精品网站| 亚洲最大色网站| 欧美精品一区视频| 色悠悠久久综合| 美女性感视频久久| 国产精品久久久久久久久动漫 |