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

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

?? flashmem.c

?? Vxworks下BSP源碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* flashMem.c - Flash memory device driver *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01b,03jan02,m_h  Fix flash write01a,12apr01,m_h  derived from version 01l of mem/flashMem.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 "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;/* 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):	    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);	    /* 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):        case (FLASH_29LV800):            {	    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()	     */	    sysFlashDelay (20000);            break;            }        default:            retVal = ERROR;        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影视一区二区三区| 精品免费99久久| xfplay精品久久| 亚洲精品视频在线观看网站| 麻豆视频一区二区| 色哟哟精品一区| 国产精品你懂的在线欣赏| 欧美aa在线视频| 欧美体内she精高潮| 国产女同互慰高潮91漫画| 日av在线不卡| 欧美喷水一区二区| 亚洲成人你懂的| 色欧美乱欧美15图片| 国产婷婷色一区二区三区四区 | 91丨porny丨国产入口| 欧美电影精品一区二区 | 亚洲欧洲成人av每日更新| 久久99久久久久| 欧美人狂配大交3d怪物一区| 亚洲欧美激情插| 99re这里都是精品| 亚洲欧洲性图库| 成人99免费视频| 中文字幕成人网| 成人av在线资源| 国产精品国产三级国产普通话99| 国产1区2区3区精品美女| 国产亚洲综合在线| 国产在线观看一区二区| 亚洲精品一线二线三线无人区| 人妖欧美一区二区| 日韩精品一区二区三区视频在线观看| 日本欧美加勒比视频| 欧美一区二区在线视频| 美女性感视频久久| 欧美大片一区二区三区| 久久国产欧美日韩精品| 久久夜色精品一区| 福利一区福利二区| 最新日韩在线视频| 在线看国产日韩| 日本最新不卡在线| 久久久美女毛片| 不卡视频一二三四| 亚洲线精品一区二区三区| 欧美电影在线免费观看| 免费看欧美女人艹b| 久久久99免费| 91老师国产黑色丝袜在线| 亚洲bdsm女犯bdsm网站| 欧美r级电影在线观看| 不卡的av网站| 亚洲高清久久久| 久久综合av免费| av色综合久久天堂av综合| 一区二区三区电影在线播| 538prom精品视频线放| 国产精品一色哟哟哟| 亚洲图片激情小说| 欧美一区二区女人| 成人性色生活片免费看爆迷你毛片| 久久久久97国产精华液好用吗| 成人综合在线视频| 亚洲一卡二卡三卡四卡五卡| 欧美成人三级在线| 91麻豆产精品久久久久久 | 成人免费视频视频| 亚洲六月丁香色婷婷综合久久 | 欧美无砖砖区免费| 国产一区二区三区久久久| 中文在线一区二区 | 日韩美一区二区三区| 久久99国产精品久久99果冻传媒| 国产日韩精品视频一区| 欧美精选一区二区| 韩国v欧美v亚洲v日本v| 中文字幕欧美国产| 精品视频免费看| 懂色av一区二区夜夜嗨| 亚洲一区二区三区爽爽爽爽爽| 欧美日韩国产一级| 99精品视频在线播放观看| 美女视频黄免费的久久 | 精品一区二区精品| 一区二区三区四区亚洲| 久久一区二区视频| 欧美一三区三区四区免费在线看| av不卡一区二区三区| 免费在线欧美视频| 亚洲国产精品麻豆| 亚洲免费大片在线观看| 国产偷v国产偷v亚洲高清| 欧美一级高清片在线观看| 欧美特级限制片免费在线观看| 国产成a人亚洲精品| 国产一区二区三区四区在线观看| 三级精品在线观看| 亚洲午夜久久久久久久久电影院| 国产精品国产三级国产aⅴ中文| 国产亚洲综合性久久久影院| 精品国产一区久久| 制服丝袜一区二区三区| 欧美乱妇20p| 欧美日韩免费观看一区二区三区 | 在线视频一区二区免费| 成人动漫一区二区三区| 狠狠色综合色综合网络| 午夜精品aaa| 亚洲电影激情视频网站| 亚洲国产精品一区二区www在线| 亚洲精品福利视频网站| 亚洲欧美日韩国产一区二区三区| 国产精品白丝在线| 亚洲视频一区在线观看| 亚洲免费在线电影| 一区二区成人在线观看| 亚洲一卡二卡三卡四卡五卡| 天天影视网天天综合色在线播放 | 日韩一级大片在线| 欧美电影免费观看高清完整版在线 | 国产女人水真多18毛片18精品视频| 久久亚洲私人国产精品va媚药| 久久综合丝袜日本网| 久久一区二区三区国产精品| 国产日韩亚洲欧美综合| 国产精品久久久一本精品 | 国产精品动漫网站| 亚洲视频图片小说| 亚洲午夜激情av| 久久精品国产秦先生| 国产一区91精品张津瑜| 99久久精品国产一区| 欧洲av一区二区嗯嗯嗯啊| 欧美一卡二卡三卡| 欧美国产日本韩| 亚洲精品国产a久久久久久| 奇米影视一区二区三区小说| 国产专区欧美精品| 99精品视频一区二区| 欧美日韩精品欧美日韩精品一综合| 欧美福利视频一区| 国产亚洲欧美激情| 亚洲免费电影在线| 麻豆专区一区二区三区四区五区| 丁香激情综合五月| 91黄色激情网站| 精品久久免费看| 一区在线观看免费| 男人的j进女人的j一区| 成人一区二区三区中文字幕| 色综合久久综合网97色综合| 91 com成人网| 中文字幕免费不卡| 午夜精品久久久久影视| 日韩**一区毛片| 成人白浆超碰人人人人| 欧美精品一卡两卡| 中文子幕无线码一区tr| 免费观看在线色综合| 色哟哟亚洲精品| 国产女人aaa级久久久级| 亚洲二区在线观看| 大胆亚洲人体视频| 日韩区在线观看| 亚洲一区二区高清| 国产91精品在线观看| 日韩欧美一级二级三级| 亚洲乱码日产精品bd| 国产成人免费在线观看不卡| 欧美视频三区在线播放| 国产精品久久久久久久久免费桃花 | 91精品国产色综合久久不卡蜜臀| 久久精品人人爽人人爽| 视频一区在线视频| 色哟哟一区二区在线观看| 中文字幕国产精品一区二区| 奇米综合一区二区三区精品视频| 在线视频你懂得一区| 国产精品午夜在线| 国产精品一品二品| 日韩一区国产二区欧美三区| 亚洲一区二区三区精品在线| 99在线视频精品| 国产精品女同一区二区三区| 国产精品自在欧美一区| 欧美成人一区二区三区| 日本欧美加勒比视频| 欧美亚洲另类激情小说| 亚洲欧洲www| 99久久精品一区二区| 国产日韩av一区二区| 国产夫妻精品视频| 精品久久久网站| 精品一区二区日韩| 久久欧美一区二区| 国产成人亚洲精品青草天美| 精品国产乱码久久久久久夜甘婷婷| 亚洲一区二区在线观看视频 | 91社区在线播放|