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

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

?? ide.c

?? arm lpc2000 應用歷程 arm lpc2000 應用歷程
?? C
?? 第 1 頁 / 共 3 頁
字號:

	  	for(temp32=0;temp32<TIMEOUTSET;temp32++)		/*等待設備準備好*/
  		{
  			SetDeviceHead(0xfa);						/*寫設備磁頭寄存器*/
	  		if( 0xfa == (uint8)GetDeviceHead())			/*讀出剛才寫進設備磁頭寄存器值*/
	  			break;									/*設備OK,完成復位*/
	   	}

		if(temp32<TIMEOUTSET)							/*如果設備不超時,則ATA接口上有設備*/
		{
			for(Device=0;MAX_DEVICE>Device;Device++)	/*初始化各設備,MAX_DEVICE最大值為1,即只能有主和從兩個設備*/
			{
				ATA_SetFeature(Device);					/*特性設備,(總線設置)*/
				if(ATA_IssueIDEIdentify(Device))		/*ATA設備識別,獲取CF卡內部信息*/
					ATA[Device].ATAIsOK = TRUE;			/*ATA設備可用,置位其標志位*/
				else
					ATA[Device].ATAIsOK = FALSE;		/**ATA設備不可用,清ATA設備準備好標志*/
			}
		}
	}
} 


/*********************************************************************************************************
** 函數名稱: ATA_ReadSetting					所在文件:IDE.C
** 功能描述: 讀扇區指令設置相關的寄存器。
** 輸   入: Sectors ,讀設備的起始扇區號
**			 Count ,扇區數
** 輸   出: 無
** 全局變量: ATA_DevReg,確定選擇的是主設備或是從設備和地址模式(本驅動使用LBA模式)
** 調用模塊: ATA_CommandSet(),寫命令設置
********************************************************************************************************/
void ATA_ReadSetting(uint32 Sectors , uint8 Count)
{
   	ATA_CommandSet( 									/*ATA指令設置*/
 		NULL,											/*Feature,特征寄存器*/
		(uint8)Count, 									/*SecCnt,扇區計數寄存器*/
		(uint8)Sectors, 								/*SecNum,扇區號寄存器*/
		(uint8)(Sectors/0x100),							/*CylLow,柱面低寄存器*/
		(uint8)(Sectors/0x10000),						/*CylHigh,柱面高寄存器*/
		(uint8)(((Sectors/0x1000000)&0x0f)|ATA_DevReg),	/*C_D_H,設備磁頭寄存器*/
		(uint8)IDE_CMD_READ 							/*Command,指令寄存器*/ 
				  );
}

/*********************************************************************************************************
** 函數名稱: ATA_ReadData512B
** 功能描述: 從硬盤讀出一個512B,在指定的緩沖區里
** 輸   入: Buffer,緩沖區地址
** 輸   出: 無
** 全局變量: 無
** 調用模塊: GetData(),從ATA數據寄存器讀取一個字節
********************************************************************************************************/
void ATA_ReadData512B(uint16 * Buffer)
{ 	uint16 i;
	for(i = 0; i < 256; i ++)					/*連續讀256個字(512字節)數據*/
    {
    	*(Buffer ++) = GetData();				/*讀數據寄存器一個字數據*/
    }
}

/*********************************************************************************************************
** 函數名稱: ATA_ReadSector					所在文件:IDE.C
** 功能描述: 從硬盤讀取一或多個扇區,放入到形參指定的內存中
** 輸   入: Device,設備號
**			 Buffer,讀出數據存放的緩沖區地址
**			 Sector,讀扇區號
**			 count, 讀扇區數
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: ATA,設備狀態及信息結構體
** 調用模塊: OSSemPend(),等待信號量
**			 ATA_SelDevice(),選擇設備
**			 ATA_ReadSetting(),讀扇區設置
**			 ATA_WaitOnBusyNDrq(),等待數據請求
**			 ATA_ReadData512B(),讀512字節數據
**			 ATA_WaitOnBusyNDrdy(),等待設備準備好
**			 OSSemPost(),發送信號量
********************************************************************************************************/
uint8 ATA_ReadSector(uint8 Device,uint16 *Buffer,uint32 Sector,uint8 count)
{	
#ifdef UCOSII
	uint8	err;
#endif

	uint8	Status=FALSE;
	if(ATA[Device].ATAIsOK==FALSE) 				/*設備不可用,立即返回*/
		return	FALSE;							/*設備無效直接返回*/

#ifdef UCOSII
	OSSemPend(CFIDESem, 0, &err);				/*等待信號量*/
#endif

	if(ATA_SelectDevice(Device))				/*選擇主從設備*/
	{
		ATA_ReadSetting( Sector, count);		/*讀扇區設置*/
		do
		{	
			count--;							/*扇區數減1*/
			if(ATA_WaitOnBusyNDrq())			/* 等待設備請求數據傳輸*/
		    {	
			   	ATA_ReadData512B( Buffer );		/*連續讀取一扇區的數據*/
			   	Buffer +=256;					/*調整數據格式*/
			}
			else
			   	break;							/*出錯,退出d0...while*/
		}while(count>0);						/*所有扇區數據傳輸完成*/
			
		if(ATA_WaitOnBusyNDrdy())				/*等待設備就緒,讀取狀態寄存器同時檢測設備是否出錯*/
			Status = TRUE;						/*操作正確*/
	}	
	
	
#ifdef UCOSII
	OSSemPost(CFIDESem);						/*發送信號量*/
#endif

	return Status;								/*返回*/
}

/*********************************************************************************************************
** 函數名稱: ATA_WriteSetting					所在文件:IDE.C
** 功能描述: 寫扇區指令設置相關的寄存器。
** 輸   入: Sectors,寫入的起始扇區號
**           Count,扇區數
** 輸   出: 無
** 全局變量: ATA_DevReg,確定選擇的是主設備或是從設備和地址模式(本驅動使用LBA模式)
** 調用模塊: ATA_CommandSet(),寫命令設置
********************************************************************************************************/
void ATA_WriteSetting(uint32 Sectors , uint8 Count)
{
	ATA_CommandSet( 									/*ATA指令設置*/
 		NULL,											/*Feature,特征寄存器*/
		(uint8)Count, 									/*SecCnt,扇區計數寄存器*/
		(uint8)Sectors, 								/*SecNum,扇區號寄存器*/
		(uint8)(Sectors/0x100),							/*CylLow,柱面低寄存器*/
		(uint8)(Sectors/0x10000),						/*CylHigh,柱面高寄存器*/
		(uint8)(((Sectors/0x1000000)&0x0f)|ATA_DevReg),	/*C_D_H,設備磁頭寄存器*/
		(uint8)IDE_CMD_WRITE 							/*Command,指令寄存器*/ 
				  );	
} 

/*********************************************************************************************************
** 函數名稱: ATA_WriteData512B
** 功能描述: 寫入ATA設備512字節數據
** 輸   入: Buffer,緩沖區地址
** 輸   出: 無
** 全局變量: 無
** 調用模塊: SetData(),從ATA數據寄存器讀取一個字節
********************************************************************************************************/
void ATA_WriteData512B(uint16 * Buffer)
{   	
	uint16 i;
   	for(i = 0; i < 256; i ++)			/*連續寫256個字(512字節)數據*/
   	{
     	SetData(*(Buffer++)); 			/*寫數據寄存器一個字數據*/    	
   	}
}

/*********************************************************************************************************
** 函數名稱: WriteSector					所在文件:IDE.C
** 功能描述: 向硬盤寫入一或多個扇區
** 輸   入: Device,選擇主設備或從設備
**			 Buffer,緩沖區地址
**			 Sector,寫入扇區號
**			 count, 寫入扇區數
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: ATA,設備狀態及信息結構體
** 調用模塊: OSSemPend(),等待信號量
**			 ATA_SelDevice(),選擇設備
**			 ATA_ReadSetting(),讀扇區設置
**			 ATA_WaitOnBusyNDrq(),等待數據請求
**			 ATA_WriteData512B(),寫512字節數據
**			 ATA_WaitOnBusyNDrdy(),等待設備準備好
**			 OSSemPost(),發送信號量
********************************************************************************************************/
uint8 ATA_WriteSector(uint8 Device,uint16 * Buffer, uint32 Sector ,uint8 count)
{	
#ifdef UCOSII
	uint8	err;
#endif
	uint8	Status=FALSE;
	if(ATA[Device].ATAIsOK==FALSE) 			/*CF卡不可用,立即返回*/
		return	FALSE;

#ifdef UCOSII
	OSSemPend(CFIDESem, 0, &err);			/*等待信號量*/
#endif
	
	if(ATA_SelectDevice(Device))			/*選擇需要操作的設備*/
	{
		ATA_WriteSetting( Sector, count);	/*寫扇區設置*/
	    do
	    {	count--;
	    	if(ATA_WaitOnBusyNDrq())		/*等待設備請求數據傳輸*/
			{
	    		ATA_WriteData512B(Buffer);	/*寫入一個扇區數據*/
	    		Buffer +=256;				/*調要寫入數據緩沖區的指針*/
			}
			else
				break;						/*出錯退出*/
		}while(count>0);

		if(ATA_WaitOnBusyNDrdy())			/*等待設備就緒,讀取狀態寄存器同時檢測設備是否出錯*/
			Status = TRUE;					/*操作正確*/
	}
	
#ifdef UCOSII
	OSSemPost(CFIDESem);					/*發信號量*/
#endif

	return Status;							/*返回*/
}


/*********************************************************************************************************
** 函數名稱: ATA_IdleImmediate					所在文件:IDE.C
** 功能描述: 直接進入空閑狀態(硬件轉動)
** 輸   入: Device,選擇主設備或從設備
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: ATA,設備狀態及信息結構體
**			 CFIDESem,信號量
**			 ATA_DevReg,確定選擇的是主設備或是從設備和地址模式(本驅動使用LBA模式)
** 調用模塊: OSSemPend(),等待信號量
**			 ATA_SelDevice(),選擇設備
**			 ATA_CommandSet(),ATA指令設置
**			 ATA_WaitOnBusyNDrdy(),等待設備就緒
**			 OSSemPost(),發送信號量
********************************************************************************************************/
uint8 ATA_IdleImmediate(uint8 Device)
{
#ifdef UCOSII
	uint8	err;
#endif
	uint8 	retStatus = FALSE;
	if(ATA[Device].ATAIsOK==FALSE) 			/*CF卡不可用,立即返回*/
		return	FALSE;

#ifdef UCOSII
	OSSemPend(CFIDESem, 0, &err);			/*等待信號量*/
#endif
	if(ATA_SelectDevice(Device))			/*選擇設備*/
	{	
   		ATA_CommandSet( 					/*ATA指令設置*/
 	   		NULL,							/*Feature,特征寄存器*/
			NULL, 							/*SecCnt,扇區計數寄存器*/
			NULL, 							/*SecNum,扇區號寄存器*/
			NULL,							/*CylLow,柱面低寄存器*/
			NULL,							/*CylHigh,柱面高寄存器*/
			ATA_DevReg,						/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_IDLE_IMMEDIATE			/*Command,指令寄存器*/ 
					   );
    	
    	retStatus =ATA_WaitOnBusyNDrdy();	/*指令執行后狀態*/
	}

#ifdef UCOSII
	OSSemPost(CFIDESem);					/*發信號量*/
#endif

	return retStatus;						/*返回*/
}

/*********************************************************************************************************
** 函數名稱: ATA_StandbyImmediate	所在文件:IDE.C
** 功能描述: 立即進入空閑(硬盤停轉)
** 輸   入: Device,主設備或從設備
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: ATA,設備狀態及信息結構體
**			 CFIDESem,信號量
**			 ATA_DevReg,確定選擇的是主設備或是從設備和地址模式(本驅動使用LBA模式)
** 調用模塊: OSSemPend(),等待信號量
**			 ATA_SelDevice(),選擇設備
**			 ATA_CommandSet(),ATA指令設置
**			 ATA_WaitOnBusyNDrdy(),等待設備就緒
**			 OSSemPost(),發送信號量
********************************************************************************************************/
uint8 ATA_StandbyImmediate(uint8 Device)
{	
#ifdef UCOSII
	uint8	err;
#endif
	uint8 retStatus = FALSE;
	if(ATA[Device].ATAIsOK==FALSE) 			/*CF卡不可用,立即返回*/
		return	FALSE;

#ifdef UCOSII
	OSSemPend(CFIDESem, 0, &err);			/*等待信號量*/
#endif
	
	if(ATA_SelectDevice(Device))			/*選擇設備*/
	{	
   		ATA_CommandSet( 					/*ATA指令設置*/
 	   		NULL,							/*Feature,特征寄存器*/
			NULL, 							/*SecCnt,扇區計數寄存器*/
			NULL, 							/*SecNum,扇區號寄存器*/
			NULL,							/*CylLow,柱面低寄存器*/
			NULL,							/*CylHigh,柱面高寄存器*/
			ATA_DevReg,						/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_STANDBY_IMMEDIATE		/*Command,指令寄存器*/ 
					   );
					   
    	retStatus =ATA_WaitOnBusyNDrdy();	/*等待設備不忙*/	
	}

#ifdef UCOSII
	OSSemPost(CFIDESem);					/*發信號量*/
#endif

	return retStatus;						/*返回*/
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美的一区二区| 久久99在线观看| 91麻豆成人久久精品二区三区| 国产欧美一区二区在线| 国产精品一区二区三区网站| 欧美精彩视频一区二区三区| 成人天堂资源www在线| 中文字幕中文乱码欧美一区二区| 99精品久久99久久久久| 亚洲综合在线免费观看| 欧美日韩综合在线免费观看| 日本aⅴ免费视频一区二区三区| 欧美成人精品二区三区99精品| 国内精品视频666| 国产精品丝袜91| 色伊人久久综合中文字幕| 天天亚洲美女在线视频| 精品福利在线导航| 99国产精品久久久久| 视频在线观看一区| 国产欧美日韩一区二区三区在线观看 | 国产亚洲欧美日韩俺去了| 成人免费黄色在线| 亚洲综合图片区| 久久新电视剧免费观看| 97久久超碰精品国产| 日本午夜精品一区二区三区电影 | 亚洲女同一区二区| 欧美区在线观看| 国产成人免费视频一区| 亚洲精品一二三| 欧美精品一区二区三区蜜桃视频| 不卡一二三区首页| 免费不卡在线视频| 国产精品毛片a∨一区二区三区| 精品视频全国免费看| 国产精品一级黄| 亚洲成人一区二区| 国产精品美女www爽爽爽| 欧美精品精品一区| 成人av网址在线观看| 图片区日韩欧美亚洲| 国产精品久久久久久久久免费相片| 欧美精品在欧美一区二区少妇| 777亚洲妇女| 成人精品免费看| 美洲天堂一区二卡三卡四卡视频| 国产精品第四页| 久久久久久久一区| 91麻豆精品国产91久久久使用方法 | 欧美一区二区三区在线看| 成人福利电影精品一区二区在线观看 | 蜜臀av一区二区| 亚洲另类色综合网站| 久久久久高清精品| 日韩精品一区二区三区在线播放 | 最近日韩中文字幕| 久久一区二区视频| 精品国精品国产| 91麻豆精品国产自产在线观看一区 | 国产成人一区二区精品非洲| 天天色 色综合| 亚洲免费高清视频在线| 日本一区二区三区电影| 日韩色在线观看| 欧美精品第一页| 欧美色图一区二区三区| 91女人视频在线观看| av电影一区二区| 99re在线精品| 91免费视频网| 色综合欧美在线| 色激情天天射综合网| 一本大道久久精品懂色aⅴ| aaa国产一区| 99精品视频免费在线观看| 成人午夜又粗又硬又大| 成人午夜私人影院| 成人精品视频.| 色综合天天综合狠狠| 色综合天天综合网天天看片| 91国产丝袜在线播放| 欧美综合欧美视频| 欧美日韩国产精品自在自线| 欧美日韩精品一区二区三区四区| 欧美三区免费完整视频在线观看| 欧美精品日韩一区| 日韩一区二区三区视频在线| 日韩欧美国产1| 久久久www免费人成精品| 日本一区二区视频在线| 国产精品免费看片| 伊人婷婷欧美激情| 亚洲1区2区3区视频| 久久99热99| 国产精品一级在线| 91免费视频网址| 91精品国产色综合久久不卡电影 | 成人毛片视频在线观看| 色综合久久中文字幕综合网| 91国内精品野花午夜精品| 538prom精品视频线放| 精品88久久久久88久久久| 中文字幕第一页久久| 亚洲乱码日产精品bd| 日韩国产在线观看一区| 国产麻豆一精品一av一免费| 99久久久无码国产精品| 欧美日韩精品三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 美腿丝袜亚洲色图| 成人午夜视频福利| 欧美日韩在线播放| 久久只精品国产| 亚洲精品高清在线观看| 精一区二区三区| 91丨九色丨黑人外教| 欧美一级日韩免费不卡| 国产精品看片你懂得| 免费在线观看日韩欧美| 北条麻妃一区二区三区| 日韩一区二区视频在线观看| 综合久久久久久久| 美国av一区二区| 91欧美激情一区二区三区成人| 欧美v日韩v国产v| 亚洲综合丁香婷婷六月香| 国产一区二区在线影院| 欧美性感一区二区三区| 中文字幕av在线一区二区三区| 午夜精品久久久| 99久久精品国产一区| 精品国产区一区| 亚洲观看高清完整版在线观看| 国产精品亚洲视频| 日韩欧美精品在线| 亚洲一区电影777| 波多野结衣欧美| 欧美精品一区二| 美女一区二区三区| 欧美三级日韩三级国产三级| 国产精品不卡在线| 国产盗摄一区二区三区| 欧美一级日韩一级| 亚洲一区二区3| 91国产成人在线| 亚洲视频一区在线| 成人性生交大片免费看中文网站| 日韩视频123| 免费一级欧美片在线观看| 欧美三级欧美一级| 一区二区视频在线看| aaa欧美色吧激情视频| 欧美国产精品劲爆| 国产成人精品影视| 久久亚洲精华国产精华液| 久久99国产精品尤物| 欧美成人免费网站| 看片网站欧美日韩| 日韩一区二区免费电影| 日韩精品色哟哟| 91精品国产一区二区三区 | 国产美女久久久久| 久久综合九色欧美综合狠狠| 久久精品国产网站| 日韩网站在线看片你懂的| 欧美aⅴ一区二区三区视频| 欧美卡1卡2卡| 日韩高清不卡在线| 欧美一级午夜免费电影| 久久99精品国产麻豆婷婷洗澡| 日韩免费在线观看| 久久99国产乱子伦精品免费| 久久久精品一品道一区| 国产很黄免费观看久久| 国产欧美日韩三区| 99精品欧美一区二区三区综合在线| 亚洲色图另类专区| 色噜噜偷拍精品综合在线| 亚洲午夜一区二区三区| 91精品国产综合久久久久| 麻豆精品在线视频| 久久久久久久久久久久久女国产乱 | 国产拍欧美日韩视频二区| 丁香一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美性受xxxx黑人xyx| 日日骚欧美日韩| 精品国产网站在线观看| 成人午夜av影视| 亚洲成人一区二区在线观看| 日韩一级大片在线| 国产一区二区三区综合| 最新久久zyz资源站| 欧洲一区在线电影| 蜜桃久久精品一区二区| 国产午夜精品一区二区三区嫩草 | 日韩欧美一级特黄在线播放| 国产成人精品一区二| 亚洲综合久久久|