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

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

?? w25x32_wr.c

?? C語言源代碼及相關(guān)資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**------------------------------------------------------------------------------------------------------
** Created by:			
** Created date:		
** Version:				
** Descriptions:		使用LPC2300系列ARM的SSP DMA,操作W25X32。
**
********************************************************************************************************/
#include  	"config.h" 

/* 全局變量定義 */
//uint8	InitDatas[8] 			= {0x35, 0x45, 0x55, 0x36, 0x37, 0x38, 0x39, 0x30};

//uint8	RdCmdBuf[5] 			= {0x0B, 0x0, 0x20, 0x07, 0xFF}; 			 		// 該數(shù)組用于存放對FLASH的讀操作初始化信息,僅由SSPDMA_Snd函數(shù)訪問,發(fā)送完這組數(shù)據(jù)后,Flash進(jìn)入讀數(shù)據(jù)狀態(tài)
//uint8	WaitCmdbuf[8]   		= {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};	// 每發(fā)送一個0xff到Flash,Flash會返回一個數(shù)據(jù)

//max add for extend flash r/w area
uint8	setup_sec=SETUP_PARAMS_SEC; 			//設(shè)定參數(shù)存放的起始扇區(qū)號
uint8	work_sec= WORK_PARAMS_SEC; 			//工作參數(shù)存放的起始扇區(qū)號
uint8	custom_sec=CUSTOM_PARAMS_SEC;		//終端自用,無須上傳,自定義參數(shù)存放的起始扇區(qū)號
uint8	mileage_sec=MILEAGE_ACC_SEC;			//存儲里程數(shù)及ACC開關(guān)狀態(tài)的起始扇區(qū)號

uint8	Ini_Sec_counter(uint8* , uint8 , uint8);
uint8	Reset_All_Sec(void);
uint8	Test_Count_Sec(uint8, uint16, uint8);
uint8	Dump_Sec(uint8);
uint8	UART3_output_digit(uint16, uint8);

void  DelayS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<5000; i++);
 }
 
uint8 W25X32_READ(uint32 Oid_Addr,  uint32 Oid_Len,  uint8 * Buff)
{
/* 		中斷方式下DMA發(fā)送和接收 			*/
//	OS_ENTER_CRITICAL();
	DelayS(20);
	W25X32_RD(Oid_Addr,Oid_Len,Buff);
	
//	OS_EXIT_CRITICAL();
	return 	TRUE;	
	
}

uint8 W25X32_READ_2(uint32 Oid_Addr,  uint32 Oid_Len,  uint8 * Buff)
{
										
//	OS_ENTER_CRITICAL();
	DelayS(20);
	W25X32_RD_2(Oid_Addr,Oid_Len,Buff);
	
//	OS_EXIT_CRITICAL();
	return 	TRUE;	
	
}


/********************************************************************************************************
** 函數(shù)名稱:W25X32_INIT
** 函數(shù)功能:調(diào)用軟件包,演示使用SSP DMA操作W25X32
** 入口參數(shù):無
** 出口參數(shù):返回0則表明出錯	
** 調(diào)試說明:在Flash中運(yùn)行														
********************************************************************************************************/
uint8 W25X32_INIT(void)
{ 
	/* 完成SSP初始化 */
	SSP_Init();										// 初始化SSP管腳以及SSP的工作參數(shù)

#if 1
	//Reset_All_Sec();									//erase flash all sector
	Ini_Sec_counter( &setup_sec, 'S', SETUP_PARAMS_SEC );
	Ini_Sec_counter( &work_sec, 'W', WORK_PARAMS_SEC );
	Ini_Sec_counter( &custom_sec, 'C', CUSTOM_PARAMS_SEC );
	Ini_Sec_counter( &mileage_sec, 'M', MILEAGE_ACC_SEC );
#endif	
	
   return (TRUE); 
}

// 將buff寫入從地址Oid_Addr開始的Flash存儲單元里
uint8 W25X32_WRITE(uint32 Oid_Addr,  uint32 Oid_Len,  uint8 * Buff,  uint32  Data_Size)
{
	const	uint8	pageLen=0xff;
	uint8	i=0; 
	//uint8	temp[SEC_SIZE];
	uint8	*	temp;

#if defined(SYSTEM_SEMCONTROL)
				INT8U SysFlashErr;
				OSSemPend(gw_pSysFlashSem, 0, &SysFlashErr);
#else
				OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)

	OSMemQuery(IntBuffer_Big,&MemInfo);
	if(MemInfo.OSNFree > (uint8)(Data_Size/BlockSize_Big))
	{
		temp=(INT8U *)OSMemGet(IntBuffer_Big,&err);
		//使用獲得的內(nèi)存塊
		if( (Oid_Addr+Oid_Len)/SEC_SIZE	> Oid_Addr/SEC_SIZE )
		{
			
			W25X32_READ(GetAddr(Oid_Addr/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase(Oid_Addr/SEC_SIZE, Oid_Addr/SEC_SIZE); 
			memmove(temp+Oid_Addr%SEC_SIZE,Buff,Oid_Len-(Oid_Addr+Oid_Len)%SEC_SIZE);
			for(i=0;i<Data_Size/pageLen;i++)
			{
				W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
			W25X32_READ(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase((Oid_Addr+Oid_Len)/SEC_SIZE, (Oid_Addr+Oid_Len)/SEC_SIZE); 
			memmove(temp,Buff+Oid_Len-(Oid_Addr+Oid_Len)%SEC_SIZE,(Oid_Addr+Oid_Len)%SEC_SIZE);
			for(i=0;i<Data_Size/pageLen;i++)
			{
				W25X32_WR(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
		}
		else
		{
			W25X32_READ(GetAddr(Oid_Addr/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase(Oid_Addr/SEC_SIZE, Oid_Addr/SEC_SIZE); 
			memmove(temp+Oid_Addr%SEC_SIZE,Buff,Oid_Len);
			for(i=0;i<Data_Size/pageLen;i++)
			{
				W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
		}
		//memset(temp,0,sizeof(temp));
		//W25X32_READ(GetAddr(FIRSTSEC,Oid_Addr),Oid_Len,temp);
		//釋放獲得的內(nèi)存塊
		OSMemPut(IntBuffer_Big,temp);
	}
	else 
	{
#if defined(UART_SEMCONTROL)
				OSSemPost(gw_pSysFlashSem);
#else
				OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
		return	FALSE;	
	}
#if defined(UART_SEMCONTROL)
				OSSemPost(gw_pSysFlashSem);
#else
				OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)	
	return	TRUE;
		    	
}

uint8	W25X32_WRITE_2(uint32	Oid_Addr,uint32		Oid_Len,uint8	*	Buff,uint32	Data_Size)

{
	const	uint8	pageLen=0xff;
	uint8	i=0; 
	//uint8	temp[SEC_SIZE];
	uint8	*	temp;
#if defined(SYSTEM_SEMCONTROL)
				INT8U SysFlashErr;
				OSSemPend(gw_pSysFlashSem, 0, &SysFlashErr);
#else
				OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
	
	OSMemQuery(IntBuffer_Big,&MemInfo);
	if(MemInfo.OSNFree > (uint8)(Data_Size/BlockSize_Big))
	{
		temp=(INT8U *)OSMemGet(IntBuffer_Big,&err);
		//使用獲得的內(nèi)存塊
		if( ((Oid_Addr+Oid_Len)/SEC_SIZE)	> (Oid_Addr/SEC_SIZE) )
		{
			
			W25X32_READ_2(GetAddr(Oid_Addr/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase_2(Oid_Addr/SEC_SIZE, Oid_Addr/SEC_SIZE); 
			memmove(temp+Oid_Addr%SEC_SIZE,Buff,Oid_Len-(Oid_Addr+Oid_Len)%SEC_SIZE);
			for(i=0;i<Data_Size/pageLen;i++)
			{
				W25X32_WR_2(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR_2(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
			W25X32_READ_2(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase_2((Oid_Addr+Oid_Len)/SEC_SIZE, (Oid_Addr+Oid_Len)/SEC_SIZE); 
			memmove(temp,Buff+Oid_Len-(Oid_Addr+Oid_Len)%SEC_SIZE,(Oid_Addr+Oid_Len)%SEC_SIZE);
			for(i=0;i<Data_Size/pageLen;i++)
			{
				W25X32_WR_2(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR_2(GetAddr((Oid_Addr+Oid_Len)/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
		}
		else
		{
			W25X32_READ_2(GetAddr(Oid_Addr/SEC_SIZE,0),Data_Size,temp);
			W25X32_Erase_2(Oid_Addr/SEC_SIZE, Oid_Addr/SEC_SIZE); 
			memmove(temp+Oid_Addr%SEC_SIZE,Buff,Oid_Len);
			for(i=0;i<Data_Size/pageLen;i++)
			{	
				W25X32_WR_2(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,pageLen);
				OSTimeDly(3);
			}
			if(Data_Size%pageLen>0)
			{
				OSTimeDly(3);
				W25X32_WR_2(GetAddr(Oid_Addr/SEC_SIZE,i*pageLen),temp+i*pageLen,Data_Size%pageLen);
			}
		}
		//memset(temp,0,sizeof(temp));
		//W25X32_READ(GetAddr(FIRSTSEC,Oid_Addr),Oid_Len,temp);
		//釋放獲得的內(nèi)存塊
		OSMemPut(IntBuffer_Big,temp);
	}
	else
	{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美综合另类在线卡通| 日韩视频123| 亚洲伦理在线精品| 色综合天天在线| 亚洲免费观看高清| 欧美欧美午夜aⅴ在线观看| 丝袜美腿高跟呻吟高潮一区| 日韩一区二区三区四区| 久久99国产精品久久99果冻传媒| 亚洲精品在线观看视频| 国产福利一区二区三区| 一区二区在线免费观看| 欧美精三区欧美精三区| 狠狠色狠狠色综合日日91app| 国产片一区二区| 91麻豆123| 蜜桃视频一区二区三区在线观看| 久久免费电影网| 色综合天天综合在线视频| 视频在线在亚洲| 久久精品无码一区二区三区| 91视频www| 蜜臀精品久久久久久蜜臀 | 亚洲成人资源在线| 欧美成人高清电影在线| 成人小视频免费在线观看| 亚洲一区二区三区影院| 精品精品国产高清a毛片牛牛| 粉嫩一区二区三区在线看| 一区av在线播放| 久久久五月婷婷| 欧美性欧美巨大黑白大战| 国产真实乱偷精品视频免| 亚洲综合成人网| 国产校园另类小说区| 欧美午夜精品一区| 国产91丝袜在线播放九色| 亚洲777理论| 综合久久一区二区三区| 精品久久久久一区| 欧美少妇bbb| 成人国产亚洲欧美成人综合网| 日本中文字幕一区| 亚洲激情网站免费观看| 久久久99精品久久| 欧美一区二区在线不卡| 97超碰欧美中文字幕| 九九九精品视频| 亚洲高清免费观看 | 亚洲午夜av在线| 国产女人aaa级久久久级 | 欧美性大战久久久| 高清免费成人av| 久久精品久久99精品久久| 一区二区欧美国产| 中文字幕在线一区二区三区| 精品日韩在线观看| 欧美一区日本一区韩国一区| 91成人国产精品| proumb性欧美在线观看| 麻豆精品在线观看| 日韩电影免费一区| 亚洲一区中文日韩| 亚洲美女视频一区| 中文字幕中文字幕中文字幕亚洲无线| 久久午夜老司机| 欧美一区二区三区四区五区| 欧美丝袜自拍制服另类| 91在线免费视频观看| 国产成人高清在线| 国产电影一区二区三区| 国产成人午夜99999| 国产一二三精品| 国产美女在线观看一区| 国产最新精品精品你懂的| 久久av中文字幕片| 国内久久精品视频| 国产剧情一区二区三区| 国产伦精品一区二区三区视频青涩 | 亚洲狠狠丁香婷婷综合久久久| 中文字幕成人网| 亚洲国产精品精华液2区45| 欧美—级在线免费片| 国产精品免费久久久久| 国产精品高潮久久久久无| 中文字幕在线一区| 亚洲另类在线一区| 午夜精品国产更新| 奇米影视7777精品一区二区| 麻豆国产欧美日韩综合精品二区| 美美哒免费高清在线观看视频一区二区| 日韩有码一区二区三区| 国内精品不卡在线| 成人免费视频视频| 欧美性videosxxxxx| 91精品欧美福利在线观看| 欧美va亚洲va香蕉在线| 国产日本欧美一区二区| 亚洲国产精品ⅴa在线观看| 136国产福利精品导航| 一级精品视频在线观看宜春院| 一区二区国产视频| 亚洲高清免费视频| 国模套图日韩精品一区二区 | 国模套图日韩精品一区二区 | 亚洲国产一二三| 日韩精品1区2区3区| 国产一区二区三区av电影| jvid福利写真一区二区三区| 欧美系列日韩一区| 精品久久国产字幕高潮| 亚洲免费观看高清完整版在线观看 | 一区二区成人在线| 久久精品二区亚洲w码| 成人18视频日本| 777a∨成人精品桃花网| 国产精品美女久久久久久久| 亚洲国产精品自拍| 国产精品羞羞答答xxdd| 欧美性大战久久久| 亚洲国产成人午夜在线一区| 午夜久久福利影院| 不卡视频免费播放| 日韩免费观看2025年上映的电影| 国产精品久久久久aaaa| 日本不卡视频在线| 日本韩国欧美一区二区三区| 精品福利在线导航| 亚洲综合在线第一页| 国产精品一区专区| 欧美高清dvd| 1000精品久久久久久久久| 久久国产免费看| 91视频观看视频| 日本一二三四高清不卡| 精品一区二区在线看| 欧美日韩一区二区三区在线看 | 日本视频在线一区| 色综合中文字幕国产| 欧美一区二区三区四区五区| 亚洲日本在线a| 成人深夜视频在线观看| 精品国产乱子伦一区| 婷婷开心激情综合| 欧美亚州韩日在线看免费版国语版| 国产欧美一区二区三区在线看蜜臀| 天天av天天翘天天综合网| 91蝌蚪porny| 国产精品久久久久影视| 国产精品一二三四五| 日韩免费一区二区| 天堂精品中文字幕在线| 欧美日韩黄色影视| 一区二区三区精品视频在线| 91香蕉视频黄| 最新日韩av在线| 东方aⅴ免费观看久久av| 久久欧美一区二区| 精油按摩中文字幕久久| 日韩视频一区二区| 青椒成人免费视频| 91麻豆精品国产91久久久久久久久 | 91精品国产综合久久小美女| 亚洲女女做受ⅹxx高潮| 91丨九色porny丨蝌蚪| 亚洲天天做日日做天天谢日日欢| 波多野结衣中文字幕一区二区三区| 欧美国产97人人爽人人喊| 成人亚洲一区二区一| 国产精品无圣光一区二区| 成人国产精品免费网站| 日韩毛片一二三区| 欧洲国内综合视频| 午夜视频一区二区三区| 欧美一区二区女人| 久久精品噜噜噜成人av农村| 精品精品欲导航| 国产毛片精品国产一区二区三区| 久久久久久久久久久99999| 国产成人精品午夜视频免费| 国产亚洲精品中文字幕| 成人高清在线视频| 亚洲一线二线三线视频| 91精品国产综合久久久蜜臀图片| 久久精品国产精品亚洲综合| 久久久国产综合精品女国产盗摄| 不卡一区二区三区四区| 亚洲精品菠萝久久久久久久| 欧美日韩在线三级| 毛片一区二区三区| 中文字幕成人网| 精品1区2区3区| 精品一区在线看| 日韩码欧中文字| 56国语精品自产拍在线观看| 国产在线国偷精品产拍免费yy| 中文字幕av不卡| 精品视频资源站| 国产乱码精品一区二区三区五月婷| 国产精品高清亚洲|