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

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

?? ide.c

?? use LPC2210 to process compact_card
?? C
?? 第 1 頁 / 共 3 頁
字號:

		ATA_GetStatus(&Status);						/*獲取設備狀態寄存器*/
		if(Status==CARD_IS_FALSE) 					/*如果設備失敗返回*/
			return	(FALSE);						/*返回FALSE*/
		for(c = 0;Status&ATA_STAT_REG_DRQ;c++)		/*如果設備還有數據需要傳輸,有些設備需傳輸多于256字,那并不是協議所規范的*/
        {	        		
        	GetData();				/*讀取一個字數據并丟棄*/
        	ATA_GetStatus(&Status);					/*獲取設備狀態寄存器*/
        	if(Status==CARD_IS_FALSE) 				/*如果設備失敗返回*/
				return	(FALSE);					/*返回FALSE*/
        }
        		
        if( ATA[Device].INFODATA.CurrentSectorCapacity == 0)	/*如果CurrentSectorCapacity值為,即無效,可以通過以下值計算出*/
        {
         	ATA[Device].INFODATA.CurrentSectorCapacity =
         		(uint32)ATA[Device].INFODATA.NumberOfCylinders *	/*柱面數*/
        		(uint32)ATA[Device].INFODATA.NumberOfHeads  *		/*磁頭數*/
            		    ATA[Device].INFODATA.SectorsPerTrack;		/*磁道數*/
        }
        return(TRUE);
    }
    else
        return(FALSE);
}

/*********************************************************************************************************
** 函數名稱: ATA_DriveAllInfo					所在文件:IDE.C
** 功能描述: 該函數獲取IDE設備的特征信息,
** 輸   入: 結構體保存起始指針
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: 無
** 調用模塊: GetData(),讀ATA一個字的數據
**			 ATA_GetStatus(),獲取狀態
**			 ATA_WaitOnBusyNDrq(),等設備請求數據傳輸
********************************************************************************************************/
uint8 ATA_DriveAllInfo(void * PTR)
{
    	uint8 c,Status;

   	if(ATA_WaitOnBusyNDrq())												/*設備準備好傳輸數據*/
   	{
#define	DEVICEINFO 								((PCF_IDENTIFY_DATA)PTR)			/*宏定義結構指針*/
       	DEVICEINFO->GeneralConfiguration 	 	= GetData();			//*Word 00
		DEVICEINFO->NumberOfCylinders        	= GetData();			//*Word 01

		DEVICEINFO->Reserved1     			 	= GetData();			// Word 02
		DEVICEINFO->NumberOfHeads 		 		= GetData();			//*Word 03

		DEVICEINFO->UnformattedBytesPerTrack   	= GetData();			// Word 04
       	DEVICEINFO->UnformattedBytesPerSector  	= GetData();			// Word 05
		DEVICEINFO->SectorsPerTrack 		 	= GetData();			//*Word 06

		DEVICEINFO->SectorsPerCard 	= (uint32) GetData()<<16;		// Word 07
		DEVICEINFO->SectorsPerCard 	|=(uint32) GetData(); 			// Word 08
		DEVICEINFO->VendorUnique				= GetData();			//Word 09
     	for(c = 0 ; c <10 ; c++) 
       		DEVICEINFO->SerialNumber[c]		 	= GetData();			// Word 10-19
		DEVICEINFO->BufferType				 		= GetData();		// Word 20
		DEVICEINFO->BufferSectorSize		 	= GetData();			// Word 21
		DEVICEINFO->NumberOfEccBytes		 	= GetData();			// Word 22
 		for(c = 0 ; c <4 ; c++) 
 			DEVICEINFO->FirmwareRevision[c]	 	= GetData(); 		// Word 23-26
 	    for(c = 0 ; c <20 ; c++)
        	DEVICEINFO->ModelNumber[c] 		 	= GetData(); 		// Word 27-46
  		DEVICEINFO->MaximumBlockTransfer 	 	= GetData();			//*Word 47
  		DEVICEINFO->Reserved2				 	= GetData();			// Word 48
  		DEVICEINFO->Capabilities             	= GetData();			//*Word 49
		DEVICEINFO->Reserved3                	= GetData(); 		// Word 50      
		DEVICEINFO->PioCycleTimingMode       	= GetData();			//*Word 51
		DEVICEINFO->DmaCycleTimingMode    	 	= GetData();			// Word 52
        DEVICEINFO->TranslationFieldsValid   	= GetData();			//*Word 53

		DEVICEINFO->NumberOfCurrentCylinders 	= GetData();			//*Word 54
        DEVICEINFO->NumberOfCurrentHeads     	= GetData();			//*Word 55
        DEVICEINFO->CurrentSectorsPerTrack   	= GetData();			//*Word 56

		DEVICEINFO->CurrentSectorCapacity	 =(uint32)GetData();	   	//*Word 57
        DEVICEINFO->CurrentSectorCapacity   |=(uint32)GetData()<<16; //*Word 58

		DEVICEINFO->CurrentMultiSectorSetting	= GetData();			//*Word 59
		DEVICEINFO->UserAddressableSectors =(uint32)GetData();		//Word 60
		DEVICEINFO->UserAddressableSectors|=(uint32)GetData()<<16;	//Word 61
		DEVICEINFO->Reserved4[0] 			 	= GetData();			// Word 62
		DEVICEINFO->Reserved4[1] 			 	= GetData();			// Word 63
		DEVICEINFO->AdvancedPIOModes 	    	= GetData();			//*Word 64
		DEVICEINFO->Reserved6[0] 			 	= GetData();			// Word 65
		DEVICEINFO->Reserved6[1] 			 	= GetData();			// Word 66
		DEVICEINFO->MinimumPIOCycleTime 	 	= GetData();			//*Word 67
		DEVICEINFO->MinimumPIOCycleTimeIORDY 	= GetData();			//*Word 68
		for(c = 0 ; c <10 ; c++)
			DEVICEINFO->Reserved7[c] 		 	= GetData();			// Word 69-79
		DEVICEINFO->AtaVersion 	        = (uint32)GetData();			// Word 80
		DEVICEINFO->AtaVersion		   |= (uint32)GetData();			// Word 81
		DEVICEINFO->FeaturesCommandSupported[0] = GetData();			// Word 82
		DEVICEINFO->FeaturesCommandSupported[1] = GetData();			// Word 83
		DEVICEINFO->FeaturesCommandSupported[2] = GetData();			// Word 84
		DEVICEINFO->FeaturesCommandEnabled[0]   = GetData();			// Word 85
		DEVICEINFO->FeaturesCommandEnabled[1]   = GetData();			// Word 86
		DEVICEINFO->FeaturesCommandEnabled[2]   = GetData();			// Word 87
		DEVICEINFO->Reserved8				  	= GetData();			// Word 88
		DEVICEINFO->MajorRevision				= GetData();			// Word 89
		DEVICEINFO->MinorRevision				= GetData();			// Word 90
		
		DEVICEINFO->PowerManagementValue		= GetData();			// Word 91
		for(c = 0 ; c <36 ; c++)
			DEVICEINFO->Reserved9[c]			= GetData();			// Word 92-127
		DEVICEINFO->SecurityStatus   			= GetData();			//*Word 128
		for(c = 0 ; c <32 ; c++)
			DEVICEINFO->VendorUniqueBytes[c]	= GetData();			// Word 129-159
		DEVICEINFO->PowerRequirementDescription	= GetData();			//*Word 160
		DEVICEINFO->Reserved10				  	= GetData();			// Word 161
		DEVICEINFO->KeyManagementSupported	  	= GetData();			// Word 162
		for(c = 0 ; c <83 ; c++)
			DEVICEINFO->Reserved11[c]			= GetData();			// Word 163-255

		ATA_GetStatus(&Status);						/*獲取設備狀態寄存器*/
		if(Status==CARD_IS_FALSE) 					/*如果設備失敗返回*/
			return	(FALSE);						/*返回FALSE*/
		for(c = 0;Status&ATA_STAT_REG_DRQ;c++)		/*如果設備還有數據需要傳輸,有些設備需傳輸多于256字,那并不是協議所規范的*/
        {	        		
        	GetData();				/*讀取一個字數據并拋棄*/
        	ATA_GetStatus(&Status);					/*獲取設備狀態寄存器*/
        	if(Status==CARD_IS_FALSE) 				/*如果設備失敗返回*/
				return	(FALSE);					/*返回FALSE*/
        }
        		
       	return TRUE;
    }
    else
        return FALSE;
#undef	DEVICEINFO
}


/*********************************************************************************************************
** 函數名稱: ATA_IssueIDEIdentify					所在文件:IDE.C
** 功能描述: 確認IDE設備,獲取IDE設備信息
** 輸   入: Device,設備號
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: ATA_DevReg,選擇設備
** 調用模塊: ATA_CommandSet(),指令設置
**      	 ATA_SelectDevice(),選擇設備
**			 ATA_WaitOnBusyNDrdy(),等設備準備好
**			 ATA_DriveBasicInfo(),初始化設備信息
********************************************************************************************************/
uint8 ATA_IssueIDEIdentify(uint8 Device)
{			
	uint8 retStatus = FALSE;
  	if(ATA_SelectDevice(Device))		/*選擇設備*/
    {
 	   	ATA_CommandSet( 				/*ATA指令設置*/
 	   		NULL,						/*Feature,特征寄存器*/
			NULL, 						/*SecCnt,扇區計數寄存器*/
			NULL, 						/*SecNum,扇區號寄存器*/
			NULL,						/*CylLow,柱面低寄存器*/
			NULL,						/*CylHigh,柱面高寄存器*/
			ATA_DevReg,					/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_IDENTIFY 			/*Command,指令寄存器*/ 
				  	  );
       	if(ATA_DriveBasicInfo(Device))	/*初始化設備信息*/
    		if(ATA_WaitOnBusyNDrdy())	/*等待設備準備好,檢測指令執行結果*/
    	   		retStatus = TRUE;
    }
	return retStatus;
} 


/*********************************************************************************************************
** 函數名稱: ATA_IdentifyDrive					所在文件:IDE.C
** 功能描述: 確認IDE設備,獲取IDE設備信息
** 輸   入: Device:設備號,0為主設備,1為從設備
**			 PTR:保存設備信息的指針
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: CFIDESem,信號量指針
**			 ATA_DevReg,選擇設備
**			 ATA[Device].ATAIsOK,設備狀態
** 調用模塊: OSSemPend(),等待信號量
**			 ATA_SelectDevice(),選擇設備
**      	 ATA_CommandSet(),指令設置
**			 ATA_WaitOnBusyNDrdy(),等設備準備好
**			 ATA_DriveAllInfo(),初始化設備信息
**			 OSSemPost(),發送信號量
********************************************************************************************************/
uint8 ATA_IdentifyDrive(uint8 Device,void *PTR)
{			
	uint8 retStatus = FALSE;

#ifdef UCOSII
	uint8	err;
#endif

	if(ATA[Device].ATAIsOK==FALSE) 											
		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_IDENTIFY 			/*Command,指令寄存器*/ 
				  	  );
       	if(ATA_DriveAllInfo(PTR))		/*初始化設備信息*/
        	if( ATA_WaitOnBusyNDrdy())	/*等待設備準備好*/
          		retStatus = TRUE;
    }
    
#ifdef UCOSII
	OSSemPost(CFIDESem);				/*發送信號量*/											
#endif
    
	return retStatus;
}




/*********************************************************************************************************
** 函數名稱: ATA_SetFeature					所在文件:IDE.C
** 功能描述: 設置CF卡功能特性命令(如使用CF卡特有的8位數據總線)
** 輸   入: 無
** 輸   出: 指令正常完成返回TURE,出錯返回FALSE
** 全局變量: ATA_DevReg,選擇的設備
** 調用模塊: ATA_CommandSet(),ATA指令設置
**			 ATA_SelectDevice(),選擇設備
********************************************************************************************************/
uint8 ATA_SetFeature(uint8 Device)
{   
	uint8 retStatus = FALSE;
    if(ATA_SelectDevice(Device))	/*等待設備準備好*/
   	{
#ifdef ATA_BUS_AT_8bit   			/*使用8位總線*/
   		 ATA_CommandSet( 			/*ATA指令設置*/
 	   		0x01,					/*Feature,特征寄存器*/
			NULL, 					/*SecCnt,扇區計數寄存器*/
			NULL, 					/*SecNum,扇區號寄存器*/
			NULL,					/*CylLow,柱面低寄存器*/
			NULL,					/*CylHigh,柱面高寄存器*/
			ATA_DevReg,				/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_SETFEATURES 	/*Command,指令寄存器*/ 
				  	  );
#else								/*使用16位*/
   		 ATA_CommandSet( 			/*ATA指令設置*/
 	   		0x81,					/*Feature,特征寄存器*/
			NULL, 					/*SecCnt,扇區計數寄存器*/
			NULL, 					/*SecNum,扇區號寄存器*/
			NULL,					/*CylLow,柱面低寄存器*/
			NULL,					/*CylHigh,柱面高寄存器*/
			ATA_DevReg,				/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_SETFEATURES 	/*Command,指令寄存器*/ 
					   );
#endif				
	retStatus = ATA_WaitOnBusyNDrdy();			/*等待設備準備好*/
	}
	return retStatus;
}
 


/*********************************************************************************************************
** 函數名稱: ATA_INI					所在文件:IDE.C
** 功能描述: ATA設備初始化
** 輸   入: 無
** 輸   出: 無
** 全局變量: ATA,設備狀態信息結構體
**			 CFIDESem,信號量
** 調用模塊: OSSemCreate(),建立信號量
**			 ATA_FindIDEDevice(),查找ATA設備
********************************************************************************************************/
void ATA_INI(void)
{
	uint8 Device;
	for(Device=0;Device<MAX_DEVICE;Device++)
	{
		ATA[Device].ATAIsOK = FALSE;			/*初始化設備不存在*/
		ATA[Device].ERRCODE = CARD_IS_FALSE;	/*設備無效*/
		ATA[Device].ERRSECTOR = -1;				/*無效扇區號*/
	}
#ifdef UCOSII
	CFIDESem = OSSemCreate(1);					/*建立信號量*/
	if(CFIDESem != NULL)						/*信號量成功建立*/
#endif
	{
		ATA_FindIDEDevice();					/*查找ATA接口上的ATA設備*/
	}

}

/*********************************************************************************************************
** 函數名稱: ATA_FindIDEDevice					所在文件:IDE.C
** 功能描述: 查找ATA設備,硬件復位
** 輸   入: 無
** 輸   出: 無
** 全局變量: ATA,設備狀態信息結構體
** 調用模塊: SYS_HaveCard(),ATA設備探測
**			 SYS_IdeHardReset() ATA設備硬件復位
**			 SetDeviceHead(),寫設備磁頭寄存器
**			 GetDeviceHead(),讀設備磁頭寄存器
**			 ATA_SetFeature() 功能設置函數
**			 ATA_IssueIDEIdentify(),ATA設備識別
********************************************************************************************************/
void ATA_FindIDEDevice(void)
{

	uint32 temp32;
	uint8  Device;										/*為0選擇主設備,為1選擇從設備*/
	
	if(SYS_HaveCard())									/*如果ATA接口上沒有設備*/
	{
		SYS_IdeHardReset();								/*ATA設備硬件復位*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区欧美一区| 欧美96一区二区免费视频| 亚洲欧美成人一区二区三区| 首页国产欧美久久| 成人午夜电影网站| 日韩欧美久久一区| 亚洲午夜影视影院在线观看| 国产精品一区二区无线| 在线不卡一区二区| 亚洲老妇xxxxxx| 粉嫩高潮美女一区二区三区 | 国产成人亚洲综合色影视| 欧洲一区在线观看| 久久精品亚洲精品国产欧美kt∨| 蜜桃av一区二区| 99re66热这里只有精品3直播| 欧美一区二区高清| 亚洲福利视频一区| 色综合久久中文综合久久牛| 中文一区二区完整视频在线观看 | 日韩在线一区二区| 欧美伊人久久久久久久久影院| 国产精品你懂的| 精品一区二区影视| 日韩你懂的在线播放| 午夜精品福利一区二区蜜股av| 91欧美激情一区二区三区成人| 国产亚洲成年网址在线观看| 国模冰冰炮一区二区| 日韩欧美中文一区二区| 全部av―极品视觉盛宴亚洲| 欧美熟乱第一页| 亚洲一区二区高清| 亚洲欧洲成人精品av97| 国产在线视频精品一区| 欧美成人a视频| 免费视频一区二区| 欧美成人伊人久久综合网| 美女网站色91| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩欧美一区二区在线视频| 日本中文字幕一区二区有限公司| 欧美精品123区| 日本成人中文字幕在线视频| 91精品国产色综合久久不卡蜜臀 | 在线观看中文字幕不卡| 亚洲成av人片观看| 91精品国产综合久久久久久久| 日韩av不卡一区二区| 欧美第一区第二区| 岛国av在线一区| 亚洲欧美视频在线观看| 欧美三区在线视频| 美国十次了思思久久精品导航| 精品国产免费视频| 成人av在线资源| 亚洲国产综合人成综合网站| 欧美一卡2卡3卡4卡| 国内成人精品2018免费看| 国产精品久久夜| 欧美乱妇20p| 丁香另类激情小说| 亚洲国产aⅴ成人精品无吗| 日韩免费福利电影在线观看| 99久久亚洲一区二区三区青草| 亚洲国产精品久久人人爱蜜臀| 欧美一级免费观看| jizz一区二区| 蜜桃精品视频在线| 亚洲视频你懂的| 日韩欧美黄色影院| 成人欧美一区二区三区小说 | 精品国产精品网麻豆系列| 成人天堂资源www在线| 亚洲精品国产精品乱码不99| 欧美一卡2卡三卡4卡5免费| 成人av电影免费在线播放| 亚洲成人资源在线| 国产精品视频线看| 欧美日韩视频在线第一区| 国产成人av福利| 亚洲v中文字幕| 中文文精品字幕一区二区| 91精品国产色综合久久| 91麻豆自制传媒国产之光| 国产一区二三区好的| 亚洲高清中文字幕| 亚洲视频一区二区在线观看| 欧美mv日韩mv亚洲| 91久久线看在观草草青青| 成人av影院在线| 日韩成人一级大片| 亚洲男同1069视频| 中文字幕国产精品一区二区| 欧美一二三区精品| 欧美综合一区二区三区| 不卡一区在线观看| 国产精品一区二区免费不卡| 男人操女人的视频在线观看欧美| 亚洲少妇最新在线视频| 国产亚洲精品久| 精品国产人成亚洲区| 日韩丝袜美女视频| 欧美一区二区三区视频免费播放| 色8久久精品久久久久久蜜| 成人精品高清在线| 国产精品一品二品| 国产麻豆成人传媒免费观看| 蜜臀精品久久久久久蜜臀 | 精品久久久久久综合日本欧美| 欧美午夜精品久久久| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 91麻豆免费看| www.亚洲人| 成人a区在线观看| 成a人片亚洲日本久久| 成人激情文学综合网| 大美女一区二区三区| 成人不卡免费av| 91色.com| 欧美日韩国产三级| 91精品国产综合久久精品| 欧美一区二区久久| 2024国产精品视频| 国产喷白浆一区二区三区| 久久久777精品电影网影网| 国产欧美中文在线| 中文字幕在线视频一区| 亚洲日本韩国一区| 一区二区免费在线| 三级不卡在线观看| 美女视频免费一区| 大胆亚洲人体视频| 在线免费观看日本一区| 欧美少妇一区二区| 日韩一区国产二区欧美三区| 337p日本欧洲亚洲大胆精品| 国产日韩精品一区二区三区| 亚洲天堂网中文字| 日韩制服丝袜av| 国产精品亚洲视频| 在线视频一区二区三| 日韩欧美资源站| 中文字幕一区日韩精品欧美| 亚洲国产你懂的| 国产一区二区三区精品欧美日韩一区二区三区 | 国产亚洲精品7777| 国产欧美视频在线观看| 亚洲人成在线观看一区二区| 亚洲高清在线视频| 国产一区二区三区免费| 色综合天天综合狠狠| 欧美一区二区在线免费播放 | 国产精品传媒在线| 日韩福利电影在线| 成人av网址在线| 欧美精选一区二区| 国产精品狼人久久影院观看方式| 亚洲一区二区高清| 成人免费三级在线| 欧美一级淫片007| 亚洲精品中文在线观看| 看电视剧不卡顿的网站| 91麻豆国产精品久久| 欧美xxx久久| 亚洲一区二区三区在线播放| 国产乱妇无码大片在线观看| 欧美三级中文字| 中文字幕欧美三区| 久久国产精品色| 欧美在线影院一区二区| 国产蜜臀97一区二区三区| 免费日本视频一区| 精品视频全国免费看| 国产精品福利影院| 国产一区在线精品| 日韩一卡二卡三卡四卡| 亚洲一区二区三区四区五区黄| 成人高清伦理免费影院在线观看| 欧美精品一区二区三区一线天视频| 一级精品视频在线观看宜春院 | 视频一区中文字幕| 在线精品视频免费播放| 国产精品国产三级国产有无不卡| 国内外成人在线| 日韩三级精品电影久久久| 亚洲丶国产丶欧美一区二区三区| 99久久免费视频.com| 中文字幕av一区 二区| 另类调教123区| 日韩视频免费观看高清完整版 | 久久机这里只有精品| 制服丝袜亚洲播放| 亚洲成av人片一区二区梦乃| 91福利精品第一导航| 亚洲男女一区二区三区| 91麻豆精品在线观看| 亚洲免费观看高清完整版在线观看熊| 国产精品18久久久久久久久| 精品国产乱码久久久久久久 |