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

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

?? flashmem.c

?? Vxworks下BSP源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 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;        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久五月婷婷| 国产精品超碰97尤物18| 欧美一区二区三区四区高清| 欧美日韩国产大片| 91精品国产一区二区三区| 精品国产一区二区三区久久影院| 亚洲v日本v欧美v久久精品| 天天免费综合色| 韩国欧美国产1区| 一本色道久久综合狠狠躁的推荐| 99国产精品一区| 日韩免费高清av| 久久免费看少妇高潮| 国产午夜三级一区二区三| 亚洲综合色视频| 国产a久久麻豆| 91精品国产综合久久婷婷香蕉 | 国产精品久久久久久久午夜片| 国产精品久久综合| 日本亚洲视频在线| 色综合天天做天天爱| 久久久久久99精品| 丝袜a∨在线一区二区三区不卡| 91国产免费看| 2020日本不卡一区二区视频| 一区二区三区91| 91在线播放网址| 中文字幕一区二区三区四区不卡 | 色综合久久六月婷婷中文字幕| 日韩欧美一级二级| 亚洲1区2区3区4区| 欧美日韩一区二区三区在线看| 国产精品卡一卡二卡三| 成人av资源站| 亚洲欧美日韩电影| 91麻豆免费看片| 亚洲一区二区三区四区在线观看| 91国产成人在线| 亚洲电影你懂得| 日韩午夜电影av| 国产真实精品久久二三区| 久久欧美一区二区| 国产一区二区三区四区五区美女| 日韩欧美高清一区| 国模冰冰炮一区二区| 久久久久久电影| 91久久精品午夜一区二区| 日产精品久久久久久久性色 | 日韩av网站免费在线| 欧美一区二区精品久久911| 国产成人av一区二区三区在线| 综合分类小说区另类春色亚洲小说欧美 | 亚洲人成精品久久久久久| 91久久精品一区二区三| 日本成人在线电影网| 亚洲国产精品成人久久综合一区| 不卡的电影网站| 日韩电影免费在线观看网站| 欧美激情一二三区| 日韩女优电影在线观看| 成人国产一区二区三区精品| 婷婷中文字幕一区三区| 欧美极品aⅴ影院| 精品少妇一区二区| 欧美性一区二区| 99国产精品国产精品毛片| 蜜芽一区二区三区| 亚洲色图清纯唯美| 国产欧美日韩三级| 337p粉嫩大胆噜噜噜噜噜91av| 欧美优质美女网站| av一本久道久久综合久久鬼色| 狠狠色2019综合网| 日本成人在线一区| 日韩精品一二区| 午夜国产精品影院在线观看| 亚洲天天做日日做天天谢日日欢 | 国产一区二三区| 全部av―极品视觉盛宴亚洲| 日韩精品高清不卡| 亚洲成人综合视频| 亚洲成av人片在www色猫咪| 亚洲欧美另类在线| 亚洲综合久久av| 午夜天堂影视香蕉久久| 日韩精品电影在线| 激情丁香综合五月| 处破女av一区二区| 日本韩国欧美国产| 在线播放91灌醉迷j高跟美女 | 免费观看久久久4p| 精品一区二区久久久| 粉嫩aⅴ一区二区三区四区五区| 国产成人在线视频播放| www.99精品| 欧美理论在线播放| 日本一区二区视频在线| 一区二区在线观看av| 日韩av在线播放中文字幕| 国产99久久久久| 8v天堂国产在线一区二区| 国产日韩av一区| 午夜精品一区二区三区免费视频| 久久精品国产一区二区| av亚洲精华国产精华| 日韩视频免费观看高清完整版| 国产欧美日韩视频在线观看| 丝瓜av网站精品一区二区| 波多野结衣在线aⅴ中文字幕不卡| 欧美日韩精品福利| 中文字幕亚洲视频| 国产成人h网站| 2022国产精品视频| 日韩激情视频网站| 在线视频国内一区二区| 国产精品视频一二三区 | 精品久久久久av影院 | 色婷婷综合久久久久中文一区二区| 精品国内二区三区| 日韩精品一二三四| 欧美日韩中文精品| 亚洲国产美国国产综合一区二区| 成人av资源在线观看| 国产精品色噜噜| 波多野结衣视频一区| 亚洲日本va在线观看| 色又黄又爽网站www久久| 亚洲欧洲无码一区二区三区| 成人小视频免费在线观看| 国产精品婷婷午夜在线观看| av一二三不卡影片| 亚洲欧美一区二区三区国产精品| 91女厕偷拍女厕偷拍高清| 中文字幕制服丝袜一区二区三区 | 亚洲国产精品一区二区www| 欧美色窝79yyyycom| 免费av成人在线| 欧美精品一区二区不卡| 成人免费看片app下载| 美腿丝袜亚洲三区| 久久久久久久久久电影| 91丨porny丨蝌蚪视频| 亚洲午夜久久久久久久久电影网| 日韩一区二区三区视频在线| 国产传媒一区在线| 亚洲国产视频a| 亚洲精品一区二区三区福利| 色综合久久久久综合| 日韩高清不卡一区| 一区在线中文字幕| 91精品国产欧美一区二区成人| 国产91清纯白嫩初高中在线观看| 亚洲高清免费观看高清完整版在线观看 | 色94色欧美sute亚洲线路二| 精品一区二区综合| 日韩精品一区第一页| 成人欧美一区二区三区小说| 精品国产乱码久久久久久影片| youjizz久久| 国产一区欧美日韩| 日韩中文欧美在线| 一区二区三区日韩欧美精品| 亚洲激情自拍视频| 久久久精品欧美丰满| 日韩欧美中文字幕精品| 91精品国产高清一区二区三区 | 美女在线视频一区| 亚洲成a人片综合在线| 亚洲电影第三页| 性感美女久久精品| 一区二区三区欧美亚洲| 亚洲天堂2014| 中文字幕亚洲电影| 国产精品久久99| 夜夜精品视频一区二区| 午夜精品福利一区二区三区蜜桃| 亚洲午夜三级在线| 蜜桃av一区二区三区电影| 美腿丝袜在线亚洲一区| 国产精品亚洲а∨天堂免在线| 国产麻豆精品在线| 99视频精品全部免费在线| www.欧美日韩国产在线| 欧美色网一区二区| 欧美一三区三区四区免费在线看| 日韩三级在线免费观看| 欧美国产禁国产网站cc| 亚洲日穴在线视频| 免费观看在线色综合| 国产成人精品网址| 欧美色图在线观看| 精品毛片乱码1区2区3区| 亚洲欧美日韩电影| 免费成人在线观看视频| 丁香天五香天堂综合| 日韩三级免费观看| 亚洲婷婷综合久久一本伊一区 | 精品国产露脸精彩对白| 中文字幕在线视频一区| 久久精品国内一区二区三区|