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

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

?? flashmem.c

?? vxworks for Sam2410 bsp NoNet
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* flashMem.c - Flash memory device driver *//* Copyright 1984-2000 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01p,10jan02,m_h  fix NVRAM01o,23feb00,jpd  comments changes.01n,21feb00,jpd  added INCLUDE_FLASH_SIB_FOOTER handling.01m,01feb00,jpd  added support for 28F320.01l,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 "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 */#ifdef INCLUDE_FLASH_SIB_FOOTER#define TYPE_DELETED       0xFFFFFFFF#define TYPE_CUSTOM_MASK   0xFFFF0000#define TYPE_WRS_SIB	   0x00010000#define SIB_HEADER_SIGNATURE    0xA00FFF9F /* This is an invalid instruction */#define FLASH_FOOTER_SIGNATURE  0xA0FFFF9F /* This is an invalid instruction */#define FLASH_BLOCK_SIZE        SZ_128Ktypedef struct footerType    {    void *	infoBase;	/* Address of first word of ImageFooter  */    char *	blockBase;	/* Start of area reserved by this footer */    UINT32	signature;	/* 'Magic' number proves it's a footer   */    UINT32	type;		/* Area type: ARM Image, SIB, customer   */    UINT32	checksum;	/* Just this structure                   */    } FOOTER;#endif /* INCLUDE_FLASH_SIB_FOOTER *//* 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;/* forward declarations */#ifdef	__STDC__void	sysFlashDelay (int delayCount);STATUS	sysFlashDataPoll (volatile FLASH_DEF * pFA, FLASH_DEF value);STATUS	sysFlashErase (UINT8 flashType);STATUS	sysFlashWrite (FLASH_DEF * pFB, int size, int offset,                       UINT8 flashType, FLASH_DEF value);UINT8	sysFlashTypeGet (void);#else	/* __STDC__ */void	sysFlashDelay ();STATUS	sysFlashDataPoll ();STATUS	sysFlashErase ();STATUS	sysFlashWrite ();UINT8	sysFlashTypeGet ();#endif	/* __STDC__ *//******************************************************************************** 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_SIZE))        return (ERROR);    bcopyBytes ((char *) (FLASH_ADRS + 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 flash memory** This routine clears the contents of flash memory.** Flash 28F\f2xxx\f1 devices are erased by writing a flash erase command to* the device and verifying that each flash location is set to a high value* (0xFF).** 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 flash memory cannot be erased.*/STATUS sysFlashErase    (    UINT8 flashType		/* type of flash memory on-board */    )    {    volatile FLASH_DEF * pFA = FLASH_CAST (FLASH_ADRS);    STATUS retVal = OK;    int ix;    switch (flashType)        {	case (FLASH_28F008):	case (FLASH_28F016):	case (FLASH_28F160):	case (FLASH_28F320):	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */            *pFA = FLASH28_CMD_ERASE_SETUP;		/* setup */            *pFA = FLASH28F008_CMD_ERASE;		/* erase */	    /* Check Write State Machine Status */	    do		*pFA = FLASH28F008_CMD_READ_STATUS;	    while ((*pFA & FLASH28F008_STAT_WSMS) != FLASH28F008_STAT_WSMS);            sysFlashDelay (6);	    /* Check Erase Error Status */	    if ((*pFA & FLASH28F008_STAT_EWS) != 0)		{		*pFA = FLASH28F008_CMD_CLEAR_STATUS;		retVal = ERROR;		}            pFA = FLASH_CAST (FLASH_ADRS);            *pFA = FLASH28_CMD_RESET;	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */            break;        case (FLASH_28F256):        case (FLASH_28F512):        case (FLASH_28F010):        case (FLASH_28F020):            {            /* program the device to all zeros */            if (sysFlashWrite (NULL, FLASH_SIZE, 0, flashType, 0) == ERROR)		return (ERROR);	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* raise Vpp */            *pFA = FLASH28_CMD_ERASE_SETUP;		/* setup */            *pFA = FLASH28_CMD_ERASE;			/* erase */            sysFlashDelay (10000);            for (; (pFA < FLASH_CAST ((UINT32)FLASH_ADRS + (UINT32)FLASH_SIZE))		   && (retVal == OK); pFA++)                for (ix = 0; TRUE; ix++)	            {	            *pFA = FLASH28_CMD_ERASE_VERIFY;	/* verify */	            sysFlashDelay (6);			/* wait for verify */	            if (*pFA == (FLASH_DEF) 0xffffffff)	/* done? */		        break;                    if (ix == 1000)			{			retVal = ERROR;			break;			}                    *pFA = FLASH28_CMD_ERASE_SETUP;	/* setup */                    *pFA = FLASH28_CMD_ERASE;		/* erase */	            sysFlashDelay (10000);	            }            pFA = FLASH_CAST (FLASH_ADRS);            *pFA = FLASH28_CMD_RESET;            *pFA = FLASH28_CMD_READ_MEM;	    sysFlashDelay (6);	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */            break;            }        case (FLASH_29F010):            {	    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;            *(FLASH_CAST FLASH29_REG_FIRST_CYCLE)  = FLASH29_CMD_SIXTH;            do {                retVal = sysFlashDataPoll (pFA, (FLASH_DEF) 0xffffffff);                } while ((*pFA != (FLASH_DEF) 0xffffffff) && (retVal == OK));            *(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_READ_RESET;	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* disable enable */            break;            }	case (FLASH_29C040A):        case (FLASH_29LV1024):	    /*	     * You can erase these entire chips, but there is really no	     * need, as a write automatically erases the sector being	     * written. In particular, we will not generally want all	     * of the chip erased from sysFlashSet().	     */            {            *(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;            *(FLASH_CAST FLASH29_REG_FIRST_CYCLE)  = FLASH29_CMD_SIXTH;	    /*	     * Atmel chip spec says it will take 20 ms max and does not	     * define a mechanism for polling for completion	     *	     * It seems that this driver cannot always safely use taskDelay()	     */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91黄色激情网站| 久久99精品久久久久久久久久久久| 顶级嫩模精品视频在线看| 久久你懂得1024| 国产999精品久久久久久| 国产精品美女一区二区三区 | 国产亚洲综合性久久久影院| 国产一区二区福利视频| 国产精品污污网站在线观看| 91女厕偷拍女厕偷拍高清| 亚洲午夜久久久久| 日韩欧美精品在线| a级高清视频欧美日韩| 亚洲激情五月婷婷| 欧美一区二区三级| 国产91精品一区二区麻豆亚洲| 国产精品精品国产色婷婷| 色哟哟一区二区在线观看| 日韩精品电影在线| 久久精品一区四区| 欧美系列在线观看| 国产在线精品视频| 一区二区三区免费网站| 日韩欧美一区电影| 91免费版pro下载短视频| 日韩vs国产vs欧美| 国产精品福利影院| 91麻豆精品国产91久久久久| 岛国一区二区在线观看| 亚洲午夜免费福利视频| 久久午夜电影网| 欧美色中文字幕| 国产 日韩 欧美大片| 午夜视频一区二区| 国产精品网站一区| 日韩午夜精品视频| 欧美制服丝袜第一页| 国产成人啪免费观看软件| 香蕉久久夜色精品国产使用方法| 日本一区二区三区电影| 宅男在线国产精品| 99久久精品免费看国产免费软件| 久久99这里只有精品| 亚洲精品国产一区二区三区四区在线| 欧美成人在线直播| 欧美日韩一区小说| 91在线观看免费视频| 国产精品99久久久久久有的能看| 天天av天天翘天天综合网| 国产精品色呦呦| 精品国产乱码久久| 欧美群妇大交群中文字幕| 91丨九色丨蝌蚪富婆spa| 国产精品乡下勾搭老头1| 日韩成人伦理电影在线观看| 亚洲美女屁股眼交3| 欧美国产成人精品| 国产目拍亚洲精品99久久精品| 欧美一区二区三区日韩| 欧美视频精品在线| 日本韩国欧美在线| 91美女视频网站| 99久久精品久久久久久清纯| 国产成人精品免费视频网站| 久久99国产精品麻豆| 日韩电影在线一区二区三区| 亚洲第一福利一区| 亚欧色一区w666天堂| 亚洲国产精品一区二区久久恐怖片 | 国产精品美女久久久久久2018| 精品少妇一区二区三区日产乱码| 欧美日韩第一区日日骚| 欧美无砖专区一中文字| 欧美视频在线不卡| 欧美日韩免费高清一区色橹橹 | 激情五月婷婷综合| bt7086福利一区国产| 成人美女视频在线观看18| 国产91精品一区二区麻豆亚洲| 国产精品一级二级三级| 国产一区二区美女诱惑| 国产精品1区2区| 懂色av中文字幕一区二区三区| 成人午夜精品一区二区三区| 成人国产亚洲欧美成人综合网| 国产69精品久久99不卡| 97se狠狠狠综合亚洲狠狠| 91久久精品一区二区三区| 91久久线看在观草草青青| 欧美日韩精品一区二区三区四区 | 欧美中文字幕一区二区三区亚洲| 色妞www精品视频| 欧美日韩一区 二区 三区 久久精品| 在线免费观看成人短视频| 欧美日韩三级在线| 精品国产1区二区| 中文字幕电影一区| 亚洲午夜私人影院| 麻豆国产欧美一区二区三区| 国产精品99久久久久| 成人国产亚洲欧美成人综合网| 91麻豆.com| 日韩欧美aaaaaa| 中文字幕色av一区二区三区| 午夜精品福利视频网站| 激情欧美一区二区| 91麻豆视频网站| 欧美一区二区在线免费观看| 久久久www免费人成精品| 一区二区三区欧美在线观看| 日韩va亚洲va欧美va久久| 国产69精品久久久久777| 在线观看日韩高清av| 精品国产亚洲在线| 亚洲私人黄色宅男| 麻豆精品视频在线| 色婷婷一区二区三区四区| 日韩小视频在线观看专区| 国产精品三级在线观看| 午夜电影网亚洲视频| 成人一区在线观看| 欧美激情一区不卡| 日韩精品电影在线| 日本韩国一区二区三区视频| 精品国产电影一区二区| 亚洲主播在线观看| 风间由美一区二区av101| 欧美精品乱码久久久久久按摩| 国产校园另类小说区| 五月天激情综合| 99久久er热在这里只有精品15| 欧美电影免费提供在线观看| 夜夜亚洲天天久久| 成人va在线观看| 久久久久久亚洲综合| 免费在线欧美视频| 欧美午夜精品一区| 成人免费一区二区三区在线观看| 久久97超碰国产精品超碰| 精品视频一区三区九区| 国产精品久久久久影院老司| 久久99久久精品| 91精品国产综合久久久蜜臀粉嫩| 亚洲欧美激情一区二区| 成人午夜激情影院| 国产亚洲精品bt天堂精选| 美国毛片一区二区| 欧美久久高跟鞋激| 亚洲成人黄色小说| 欧美性色黄大片| 亚洲免费看黄网站| 99视频在线精品| 国产精品久久久久影院| 成人午夜又粗又硬又大| 久久久国际精品| 国产成人精品aa毛片| 国产日韩成人精品| 国产成人8x视频一区二区 | www.在线成人| 国产精品黄色在线观看| 粉嫩高潮美女一区二区三区 | 久久国内精品自在自线400部| 欧美日本精品一区二区三区| 亚洲综合成人在线视频| 色乱码一区二区三区88| 一区二区不卡在线视频 午夜欧美不卡在 | 久久色在线视频| 国产精品一级片| 国产欧美日韩精品a在线观看| 国产福利一区二区三区视频在线| 日韩免费高清视频| 黄一区二区三区| 久久久不卡网国产精品二区| 国产精品一区二区果冻传媒| 欧美经典三级视频一区二区三区| 国产精品一区二区91| 中文天堂在线一区| 91麻豆免费观看| 亚洲综合激情小说| 欧美一区二区三区白人| 国产一区二区视频在线播放| 久久久精品免费免费| jizzjizzjizz欧美| 亚洲综合一二三区| 欧美一区二区精品在线| 黑人精品欧美一区二区蜜桃 | 国产精品一区二区三区乱码| 国产精品美女一区二区| 色哟哟国产精品| 免费人成精品欧美精品| 久久精品亚洲麻豆av一区二区| 91在线视频免费观看| 亚洲午夜精品久久久久久久久| 欧美一区二区大片| 国产成人亚洲综合色影视| 亚洲综合久久av| 久久蜜桃香蕉精品一区二区三区| 99热国产精品| 美腿丝袜在线亚洲一区| 国产精品区一区二区三区|