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

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

?? flashmem.c

?? IXP425的BSP代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
            for (pFA = FLASH_CAST (offset); (pFA < FLASH_CAST                (size + offset)) && (retVal == OK); pFA++)	        for (ix = 0; TRUE; ix++)	            {		    if (pFB != NULL)			value = *pFB++;	            *pFA = FLASH28_CMD_PROG_SETUP;	/* write setup */	            *pFA = value;			/* data to write */	            sysFlashDelay (10);			/* wait for write */	            *pFA = FLASH28_CMD_PROG_VERIFY;	/* verify command */	            sysFlashDelay (6);			/* wait for verify */	            if (*pFA == value)			/* done? */		        break;	            if (ix == 25)			/* error? */			{	                retVal = ERROR;			break;			}	            }            *pFA = FLASH28_CMD_RESET;            *pFA = FLASH28_CMD_READ_MEM;	    sysFlashDelay (6);	    SYS_FLASH_WRITE_DISABLE_RTN ();		/* lower Vpp */            break;            }        case (FLASH_29F010):        case (FLASH_29LV160T):        case (FLASH_29LV160B):	case (FLASH_29LV040B):            {	    SYS_FLASH_WRITE_ENABLE_RTN ();		/* enable write */            for (pFA = FLASH_CAST (offset); pFA < FLASH_CAST                (size + offset) && (retVal == OK); pFA++)                {                *(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_PROGRAM;		if (pFB != NULL)		    value = *pFB++;                *pFA = value;                    	/* data to write */                do {                    retVal = sysFlashDataPoll (pFA, (FLASH_DEF) value);                    } while ((*pFA != value) && (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 write */            break;            }	case (FLASH_29C040A):	    sectorSize = 256;	    twc = 1;	    /* FALL THROUGH */        case (FLASH_29LV1024):            {            for (pFA = FLASH_CAST (offset);		 pFA < FLASH_CAST (size + offset); )                {		/* Enable sector 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_PROGRAM;		/*		 * write the sector:		 *    29LV1024: 128 half-word accesses = 256 bytes		 *    29C040A 256 byte accesses		 */		for (ix = 0; ix < sectorSize; ix++)		    {		    if (pFB != NULL)			value = *pFB++;		    /* ensure entire sector written */		    if (pFA >= FLASH_CAST (size + offset))			value = (FLASH_DEF) 0xFFFFFFFF;		    *pFA++ = value;                    	/* data to write */		    }		/*		 * Ensure write cycle completes. Atmel chip spec suggest		 * waiting for a specified time rather than polling for		 * completion.		 *		 * It seems that we cannot always safely use taskDelay()		 */		sysFlashDelay (10000 * twc);                }            break;            }        default:            retVal = ERROR;        }    return (retVal);    }/******************************************************************************** sysFlashTypeGet - determine the device type of on-board flash memory** This routine uses the `autoselect' command to determine the device type of* on-board flash memory for flash 29F\f2xxx\f1 devices.** RETURNS: An integer indicating the device type of on-board flash memory.*/UINT8 sysFlashTypeGet (void)    {    volatile FLASH_DEF * pFA = FLASH_CAST (FLASH_ADRS);	/* flash address */    UINT8 retVal;    SYS_FLASH_WRITE_ENABLE_RTN ();			/* enable writes */    *(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_AUTOSELECT;    /* 29LV1024 (at least) requires 20ms delay */    /* It seems we cannot always safely use taskDelay() */    sysFlashDelay (20000);    retVal = (UINT8) *++pFA;    *(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;    sysFlashDelay (20000);    SYS_FLASH_WRITE_DISABLE_RTN ();			/* disable writes */    return (retVal);    }/******************************************************************************** sysFlashSet - write to flash memory** This routine copies a specified string into flash memory after calling* sysFlashErase() and clearing flash memory.** If FLASH_NO_OVERLAY is defined, the parameter <offset> must be* appropriately aligned for the Flash devices in use (device width,* sector size etc.).** If the specified string must be overlaid on the contents of flash memory,* undefine FLASH_NO_OVERLAY.** RETURNS: OK, or ERROR if the write fails or the input parameters are* out of range.** SEE ALSO: sysFlashErase(), sysFlashGet(), sysFlashTypeGet(), sysFlashWrite()** INTERNAL* If multiple tasks are calling sysFlashSet() and sysFlashGet(),* they should use a semaphore to ensure mutually exclusive access to flash* memory.*/STATUS sysFlashSet    (    char *	string,		/* string to be copied into flash memory */    int		strLen,		/* maximum number of bytes to copy       */    int		segment,		/* segment base of flash*/    int		offset		/* byte offset into segment   */    )    {    char *tempBuffer;    if ((offset < 0) || (strLen < 0) || (segment < 0) || ((offset + strLen) > FLASH_SEGMENT_SIZE))        return (ERROR);    /* see if contents are actually changing */    if (bcmp ((char *) (segment + offset), string, strLen) == 0)	return (OK);    /* first read existing data */    if (tempBuffer = malloc(FLASH_SEGMENT_SIZE), tempBuffer == 0)	return (ERROR);    bcopyBytes ((char *) (segment), tempBuffer, FLASH_SEGMENT_SIZE);    bcopyBytes (string, (tempBuffer + offset), strLen);    if (flashType == 0)	flashType = sysFlashTypeGet ();    switch (flashType)    {        case (FLASH_28F640J3A):        case (FLASH_28F320J3A):	case (FLASH_28F128J3A):           /* unlock the sector*/	           if (sysFlashUnlock(FLASH_CAST (segment), flashType) == ERROR)           {		free (tempBuffer);               return (ERROR);           }		   	    /* erase the sector */	    if (sysFlashErase (FLASH_CAST (segment), flashType) == ERROR)		{		free (tempBuffer);		return (ERROR);		}	    break;	    	case FLASH_29C040A:        case FLASH_29LV1024:	    /* do not erase these as not required */	    break;	case (FLASH_29LV160T):	case (FLASH_29LV160B):        case (FLASH_29LV040B):	    /* erase the sector */	    if (sysFlashErase (FLASH_CAST (segment), flashType) == ERROR)		{		free (tempBuffer);		return (ERROR);		}	    break;	default:		free (tempBuffer);		return (ERROR);	    break;    } /* endswitch */    if (sysFlashWrite (FLASH_CAST (tempBuffer), FLASH_SEGMENT_SIZE, segment, flashType, 0)	    == ERROR)    {	free (tempBuffer);       return (ERROR);    }    return OK;}/******************************************************************************** sysSectorUnlock - unlock the flash memory** This routine unlock the contents of flash memory.*** RETURNS: OK, or ERROR if the contents of flash memory cannot be unlocked.*/STATUS sysFlashUnlock    (    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_LOCKSETUP;		/* setup */	    *pFA = FLASH28_CMD_UNLOCK;		/* 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;        default:            retVal = ERROR;        }    return (retVal);    }/******************************************************************************** sysFlashLock - lock the flash memory** This routine lock the contents of flash memory.*** RETURNS: OK, or ERROR if the contents of flash memory cannot be locked.*/STATUS sysFlashLock    (    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_LOCKSETUP;		/* setup */	    *pFA = FLASH28_CMD_LOCK;		/* 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;        default:            retVal = ERROR;        }    return (retVal);    }/******************************************************************************** flashNextBlock - Advance a pointer to the next flash block** This routine advances a pointer to the start of the next flash block* for a multi-block device.* * RETURNS: OK, or ERROR if the device type is unknown*/STATUS sysFlashNextBlock    (    UINT32 *flash_offset      /* Offset into flash memory */    )    {    STATUS retVal = OK;    UINT32 blockSize;    UINT32 flashSize;    if (flashType == 0)        flashType = sysFlashTypeGet();    switch (flashType)        {        case (FLASH_28F128J3A):            flashSize = 16 * 1024*1024;            break;        default:            return ERROR;        }    switch (flashType)        {        case (FLASH_28F128J3A):		blockSize = 128 * 1024;              *flash_offset = (*flash_offset + blockSize) & ~(blockSize-1);        default:              return ERROR;        }    return (retVal);    }/********************************************************************************* programFlash - Program the flash from a buffer** This routine updates the flash with the contents of a buffer, optionally* skipping the block containing the NVRam value. It displays a status* update during the programming process.** RETURNS: ERROR or OK*/STATUS programFlash(UINT8* buf,                           UINT32 flashStart, UINT32 flashEnd,                           BOOL skipNVRam, BOOL skipFUtil)    {    UINT32 addr, next_addr;   if (flashType == 0)	flashType = sysFlashTypeGet ();    printf("Progress:\n");    for (addr = flashStart; addr < flashEnd; addr = next_addr)    {        printf("\r%3d%%  ",(100 * (addr -flashStart) / (flashEnd - flashStart)));        next_addr = addr;        sysFlashNextBlock(&next_addr);	 /* unlock the block */		 if (OK != sysFlashUnlock(FLASH_CAST(addr), flashType))	 {	     printf("Error unlock flash block %x\n", addr);	 }	 /*erase the block*/        if (OK != sysFlashErase(FLASH_CAST(addr), flashType))        {            printf("Error erasing flash block %X\n",addr);            return ERROR;        }	 /*write the block*/        if (OK != sysFlashWrite(FLASH_CAST(buf + (addr - flashStart)),                             next_addr - addr,                             addr,                             flashType,                             0))        {            printf("Error writing flash block %X\n",addr);            return ERROR;        }	 /*compare the block*/	        if (0 != bcmp((char*)(buf + (addr - flashStart)),                       (char*)(addr),                       next_addr - addr))        {            printf("Error: data miscompares after write, block = %X.\n",addr);            return ERROR;        }    } /* end for addr */    printf("\r100%% ... done\n");    return OK;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久久久网站| 久久国产夜色精品鲁鲁99| 日韩一区二区三区免费观看| 欧美在线999| 91在线视频网址| 国产寡妇亲子伦一区二区| 免费不卡在线观看| 美女尤物国产一区| 久久国产精品无码网站| 日韩av一二三| 伦理电影国产精品| 亚洲福利视频一区二区| 综合激情网...| 国产欧美精品国产国产专区| 日韩欧美国产一二三区| 久久综合九色综合欧美98| 欧美r级在线观看| 国产日韩精品一区二区三区在线| 中文字幕不卡三区| 亚洲精品欧美二区三区中文字幕| 亚洲国产精品一区二区www在线| 亚洲图片欧美色图| 国产在线不卡视频| 99精品久久免费看蜜臀剧情介绍| 欧美性猛交xxxxxx富婆| 日韩免费高清电影| 中文字幕中文乱码欧美一区二区 | 亚洲午夜视频在线| 天堂va蜜桃一区二区三区| 国产一区视频在线看| 成人福利视频网站| 欧美精品乱码久久久久久 | 国产精品一区二区黑丝| 91欧美激情一区二区三区成人| 欧美在线一二三| 2021中文字幕一区亚洲| 亚洲免费观看在线观看| 性做久久久久久久久| 中文字幕免费一区| 国产精品美女久久久久久久久久久| 亚洲精品一二三| 亚洲成人午夜影院| 成人午夜在线免费| 91福利视频网站| 国产精品人妖ts系列视频| 国产欧美日韩视频一区二区| 午夜精品aaa| 国产精品视频你懂的| 亚洲电影激情视频网站| 免费高清在线一区| 欧美美女一区二区在线观看| 亚洲日本韩国一区| 高清在线不卡av| 国产丝袜美腿一区二区三区| 国产中文字幕一区| 精品国产一区久久| 狠狠狠色丁香婷婷综合激情| 欧美xxx久久| 天堂精品中文字幕在线| 一本大道久久a久久精二百| 在线成人av影院| 午夜欧美大尺度福利影院在线看| 欧美疯狂做受xxxx富婆| 亚洲人一二三区| 欧美一区二区黄| 成人影视亚洲图片在线| 激情综合色播激情啊| 亚洲一区二区三区四区在线免费观看 | 亚洲天堂av老司机| 日本亚洲欧美天堂免费| 精品久久一二三区| 国产成人免费av在线| 久久爱www久久做| 91成人免费电影| 婷婷成人综合网| 亚洲v日本v欧美v久久精品| 成人免费视频app| 日本一区二区高清| 蜜桃久久久久久久| 精品欧美黑人一区二区三区| 一区二区日韩av| 欧美精品三级日韩久久| 一区二区三区中文字幕| 91福利在线看| 日本久久一区二区三区| 日韩av一二三| 亚洲风情在线资源站| 国产日韩欧美高清| 久久亚洲一区二区三区明星换脸| 国产成人av福利| 精品一区二区在线看| 亚洲人成伊人成综合网小说| 2021国产精品久久精品| 国产亚洲女人久久久久毛片| 亚洲精品欧美综合四区| 精品剧情v国产在线观看在线| 2021久久国产精品不只是精品| 日产欧产美韩系列久久99| 久久久天堂av| 国产成人精品三级| 成人免费在线视频| 色欲综合视频天天天| 日韩黄色免费电影| 日韩三级中文字幕| www.av精品| 亚洲自拍偷拍网站| 2021国产精品久久精品| 成人av网站在线| 亚洲成人一区二区| 精品精品国产高清一毛片一天堂| 丝袜亚洲另类丝袜在线| 久久久精品免费观看| eeuss国产一区二区三区| 日韩中文字幕不卡| 久久午夜色播影院免费高清| 色天天综合久久久久综合片| 亚洲成人免费在线观看| 国产精品视频第一区| 色婷婷久久一区二区三区麻豆| 久久国产尿小便嘘嘘| 中文成人av在线| 9191成人精品久久| 国产一区91精品张津瑜| 五月婷婷激情综合| 国产精品情趣视频| 欧美电影免费观看高清完整版| 成人免费三级在线| 加勒比av一区二区| 亚洲人被黑人高潮完整版| 久久综合九色综合欧美98| 色综合久久久久综合体| 国产高清在线精品| 日日摸夜夜添夜夜添精品视频 | 一本大道av伊人久久综合| 奇米色777欧美一区二区| 国产精品国产精品国产专区不片| 欧美亚洲自拍偷拍| 国产不卡免费视频| 日韩av一区二区三区四区| 欧美美女bb生活片| 日本高清不卡一区| 国产福利精品导航| 亚洲一区二区三区影院| 亚洲免费观看高清完整版在线观看| 欧美成人欧美edvon| 日韩一级黄色大片| 欧美日韩情趣电影| 欧美三电影在线| 欧美xfplay| 99久久精品国产一区| 精品一区二区三区日韩| 视频一区中文字幕| 伊人色综合久久天天| 中文字幕一区二区三区四区不卡| 91精品国产入口在线| 91福利在线导航| 91一区二区在线| 99国产精品一区| 成人精品gif动图一区| 日韩电影一二三区| 午夜精品久久久久| 亚洲少妇30p| 亚洲图片一区二区| 亚洲高清免费在线| 蜜芽一区二区三区| 美女脱光内衣内裤视频久久影院| 午夜欧美电影在线观看| 午夜电影一区二区三区| 国产日韩欧美一区二区三区乱码 | 国产精品午夜在线观看| 国产精品久久久久7777按摩| 日韩一级黄色大片| 久久久蜜桃精品| 国产亚洲一区字幕| 亚洲欧美日韩电影| 午夜av一区二区三区| 日韩高清不卡一区| 蜜臀精品一区二区三区在线观看 | 天堂久久一区二区三区| 夜夜嗨av一区二区三区四季av | 日韩精品一区二区三区在线播放| 久久综合狠狠综合久久激情| 久久久精品免费网站| 国产精品免费久久| 一区二区三区在线观看视频| 美脚の诱脚舐め脚责91| 国产麻豆视频一区| 色猫猫国产区一区二在线视频| 国产成人精品一区二区三区四区| 在线日韩国产精品| 欧美日韩一区二区在线观看 | 日韩黄色免费网站| 成人性生交大片免费| 色老汉av一区二区三区| 日韩美女视频在线| 中文文精品字幕一区二区| 亚洲影院在线观看| 国产在线观看一区二区| av电影天堂一区二区在线观看| 欧美视频完全免费看|