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

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

?? ide.c

?? 基于ZLGFS的BOOT,可以通過源碼學習BOOT的運行流程
?? 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一区二区三区免费野_久草精品视频
亚洲毛片av在线| 日本欧美在线观看| 精品国产成人系列| 欧美亚洲动漫另类| 国产精华液一区二区三区| 婷婷成人激情在线网| 国产精品你懂的在线欣赏| 91精品国产综合久久精品图片| proumb性欧美在线观看| 精品亚洲免费视频| 五月天中文字幕一区二区| 亚洲色图19p| 国产精品欧美一区二区三区| 精品国产91亚洲一区二区三区婷婷| 欧美亚洲国产一区二区三区| av资源网一区| 国产美女精品一区二区三区| 免费精品视频在线| 亚洲制服丝袜av| 亚洲蜜桃精久久久久久久| 国产精品污污网站在线观看| 亚洲精品在线观| 欧美sm极限捆绑bd| 3atv在线一区二区三区| 欧美日韩国产首页| 在线观看网站黄不卡| 91在线高清观看| 成人高清免费观看| 国产999精品久久久久久绿帽| 狠狠色综合色综合网络| 久久成人av少妇免费| 麻豆一区二区99久久久久| 日本系列欧美系列| 日韩 欧美一区二区三区| 日本不卡一二三区黄网| 蜜臀av国产精品久久久久| 蜜芽一区二区三区| 精品在线观看视频| 激情图片小说一区| 国产高清在线精品| caoporm超碰国产精品| 99re在线视频这里只有精品| 99re热这里只有精品免费视频| 92国产精品观看| 一本大道综合伊人精品热热| 日韩欧美国产一区二区在线播放| 奇米精品一区二区三区在线观看 | 日韩丝袜情趣美女图片| 91精品免费在线| 日韩欧美国产不卡| 久久久国产午夜精品| 中文字幕av不卡| 日韩一区中文字幕| 亚洲午夜三级在线| 免费日本视频一区| 国产成人精品免费网站| 色综合色狠狠综合色| 欧美日韩一卡二卡三卡 | 欧美视频在线播放| 日韩一区二区在线看片| 久久久久久夜精品精品免费| 国产精品欧美综合在线| 亚洲女人****多毛耸耸8| 国产精品高清亚洲| 亚洲va国产天堂va久久en| 久久成人av少妇免费| 成人av综合在线| 欧美日韩在线直播| 亚洲精品一区二区三区影院| 国产精品欧美一区喷水| 亚洲高清免费一级二级三级| 国产又黄又大久久| 在线观看日韩电影| 日韩欧美视频在线| 136国产福利精品导航| 天天射综合影视| 成人手机在线视频| 7777女厕盗摄久久久| 国产欧美日韩三区| 日韩激情视频网站| 成人h精品动漫一区二区三区| 欧美日韩视频一区二区| 久久精品一区二区| 亚洲18影院在线观看| 国产精品77777| 欧美日本韩国一区二区三区视频| 久久精品亚洲乱码伦伦中文| 亚洲成人动漫精品| eeuss影院一区二区三区 | 久久精品一级爱片| 亚洲一区二区视频在线观看| 国产成人精品午夜视频免费| 91.麻豆视频| 一区二区三区成人在线视频| 国产精品一区一区| 欧美日韩高清一区二区不卡| 中文字幕一区免费在线观看| 日本美女视频一区二区| 91在线无精精品入口| 久久精品一区二区三区不卡| 男女性色大片免费观看一区二区 | 欧美中文字幕一二三区视频| 国产午夜亚洲精品午夜鲁丝片| 日韩av一区二区三区四区| 色婷婷av一区| 国产精品久久综合| 国产精品1区2区3区在线观看| 在线播放亚洲一区| 亚洲美女屁股眼交| 成人高清视频在线观看| 久久嫩草精品久久久精品| 久久精品国产亚洲一区二区三区| 欧美日韩黄色一区二区| 亚洲色图在线播放| 99久久99久久精品国产片果冻| 久久久高清一区二区三区| 美女一区二区三区| 日韩三级视频中文字幕| 日本不卡一区二区| 这里只有精品免费| 天堂一区二区在线免费观看| 欧美色综合网站| 一卡二卡三卡日韩欧美| 91首页免费视频| 亚洲人被黑人高潮完整版| 99精品久久久久久| 亚洲天堂网中文字| 97se亚洲国产综合自在线| 亚洲视频在线观看三级| 99久久久免费精品国产一区二区| 国产精品视频线看| bt7086福利一区国产| 日韩毛片精品高清免费| 在线视频中文字幕一区二区| 亚洲国产综合91精品麻豆| 欧美三级在线看| 日本欧美韩国一区三区| 日韩午夜激情av| 国产乱子伦一区二区三区国色天香| 欧美电影免费观看高清完整版 | 欧美午夜不卡视频| 亚洲电影你懂得| 欧美一区二区三区人| 精品一区免费av| 国产欧美一区二区三区在线看蜜臀 | 国产精品理论片| 96av麻豆蜜桃一区二区| 亚洲一级电影视频| 91精品国产91综合久久蜜臀| 狠狠色丁香婷婷综合久久片| 日本一区免费视频| 91福利视频网站| 日本少妇一区二区| 久久精品亚洲国产奇米99| av电影在线观看不卡| 一卡二卡欧美日韩| 91精品国产综合久久久久久漫画 | 久久人人爽人人爽| www.视频一区| 午夜精品成人在线视频| 久久综合色播五月| 99国产精品一区| 免费在线看一区| 国产精品三级av| 欧美性videosxxxxx| 久久精品国产一区二区| 日韩美女啊v在线免费观看| 欧美日韩成人高清| 风间由美性色一区二区三区| 亚洲欧美视频一区| 日韩欧美美女一区二区三区| av不卡免费在线观看| 亚洲777理论| 国产精品三级久久久久三级| 欧美另类一区二区三区| 国产成人小视频| 天天免费综合色| 日本一区二区三区dvd视频在线| 色www精品视频在线观看| 国内偷窥港台综合视频在线播放| 亚洲欧美另类久久久精品| 欧美不卡视频一区| 91久久国产最好的精华液| 国产在线精品一区二区夜色| 一区二区三区中文在线| 久久婷婷久久一区二区三区| 91成人国产精品| 国产a级毛片一区| 日本中文在线一区| 1000精品久久久久久久久| 日韩精品专区在线影院重磅| 欧美天天综合网| a4yy欧美一区二区三区| 狠狠色狠狠色综合| 午夜精品久久久久久久蜜桃app| 国产精品久久久一本精品| 精品久久人人做人人爰| 制服丝袜日韩国产| 色久优优欧美色久优优| 成人免费视频视频在线观看免费|