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

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

?? cf_tureide.c

?? ARM9.rar
?? C
?? 第 1 頁 / 共 3 頁
字號:
** 輸   入: 結構體保存起始指針
** 輸   出: TRUE,正常返回
**			 FALSE,出錯返回
** 全局變量: 無
** 調用模塊: GetData(),讀ATA一個字的數據
**			 ATA_GetStatus(),獲取狀態
**			 ATA_WaitOnBusyNDrq(),等設備請求數據傳輸
********************************************************************************************************/
U8 ATA_DriveAllInfo(void * PTR)
{
    	U8 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 	= (U32) GetData()<<16;		// Word 07
		DEVICEINFO->SectorsPerCard 	|=(U32) 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	 =(U32)GetData();	   	//*Word 57
        DEVICEINFO->CurrentSectorCapacity   |=(U32)GetData()<<16; //*Word 58

		DEVICEINFO->CurrentMultiSectorSetting	= GetData();			//*Word 59
		DEVICEINFO->UserAddressableSectors =(U32)GetData();		//Word 60
		DEVICEINFO->UserAddressableSectors|=(U32)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 	        = (U32)GetData();			// Word 80
		DEVICEINFO->AtaVersion		   |= (U32)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(),初始化設備信息
********************************************************************************************************/
U8 ATA_IssueIDEIdentify(U8 Device)
{			
	U8 retStatus = FALSE;
  	if(ATA_SelectDevice(Device))		/*選擇設備*/
    {
 	   	ATA_CommandSet( 				/*ATA指令設置*/
 	   		CF_NULL,						/*Feature,特征寄存器*/
			CF_NULL, 						/*SecCnt,扇區計數寄存器*/
			CF_NULL, 						/*SecNum,扇區號寄存器*/
			CF_NULL,						/*CylLow,柱面低寄存器*/
			CF_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(),發送信號量
********************************************************************************************************/
U8 ATA_IdentifyDrive(U8 Device,void *PTR)
{			
	U8 retStatus = FALSE;

	if(ATA[Device].ATAIsOK==FALSE) 											
		return	FALSE;	

  	if(ATA_SelectDevice(Device))		/*選擇設備*/
    {
 	   	ATA_CommandSet( 				/*ATA指令設置*/
 	   		CF_NULL,						/*Feature,特征寄存器*/
			CF_NULL, 						/*SecCnt,扇區計數寄存器*/
			CF_NULL, 						/*SecNum,扇區號寄存器*/
			CF_NULL,						/*CylLow,柱面低寄存器*/
			CF_NULL,						/*CylHigh,柱面高寄存器*/
			ATA_DevReg,					/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_IDENTIFY 			/*Command,指令寄存器*/ 
				  	  );
       	if(ATA_DriveAllInfo(PTR))		/*初始化設備信息*/
        	if( ATA_WaitOnBusyNDrdy())	/*等待設備準備好*/
          		retStatus = TRUE;
    }
 
	return retStatus;
}




/*********************************************************************************************************
** 函數名稱: ATA_SetFeature					所在文件:IDE.C
** 功能描述: 設置CF卡功能特性命令(如使用CF卡特有的8位數據總線)
** 輸   入: 無
** 輸   出: 指令正常完成返回TURE,出錯返回FALSE
** 全局變量: ATA_DevReg,選擇的設備
** 調用模塊: ATA_CommandSet(),ATA指令設置
**			 ATA_SelectDevice(),選擇設備
********************************************************************************************************/
U8 ATA_SetFeature(U8 Device)
{   
	U8 retStatus = FALSE;
    if(ATA_SelectDevice(Device))	/*等待設備準備好*/
   	{
#ifdef ATA_BUS_AT_8bit   			/*使用8位總線*/
   		 ATA_CommandSet( 			/*ATA指令設置*/
 	   		0x01,					/*Feature,特征寄存器*/
			CF_NULL, 					/*SecCnt,扇區計數寄存器*/
			CF_NULL, 					/*SecNum,扇區號寄存器*/
			CF_NULL,					/*CylLow,柱面低寄存器*/
			CF_NULL,					/*CylHigh,柱面高寄存器*/
			ATA_DevReg,				/*C_D_H,設備磁頭寄存器*/
			IDE_CMD_SETFEATURES 	/*Command,指令寄存器*/ 
				  	  );
#else								/*使用16位*/
   		 ATA_CommandSet( 			/*ATA指令設置*/
 	   		0x81,					/*Feature,特征寄存器*/
			CF_NULL, 					/*SecCnt,扇區計數寄存器*/
			CF_NULL, 					/*SecNum,扇區號寄存器*/
			CF_NULL,					/*CylLow,柱面低寄存器*/
			CF_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)
{
	U8 Device;
	for(Device=0;Device<MAX_DEVICE;Device++)
	{
		ATA[Device].ATAIsOK = FALSE;			/*初始化設備不存在*/
		ATA[Device].ERRCODE = CARD_IS_FALSE;	/*設備無效*/
		ATA[Device].ERRSECTOR = -1;				/*無效扇區號*/
	}

	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)
{

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

	  	for(temp32=0;temp32<TIMEOUTSET;temp32++)		/*等待設備準備好*/
  		{
  			SetDeviceHead(0xfa);						/*寫設備磁頭寄存器*/
	  		if( 0xfa == (U8)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設備可用,置位其標志位*/
					printf( "Device[%d] is OK\n", Device ) ;		//
				}
				else
				{
					ATA[Device].ATAIsOK = FALSE;		/**ATA設備不可用,清ATA設備準備好標志*/
					printf( "Device[%d] is NOT OK!!!\n", Device ) ;		//
				}
			}
		}
		else
			printf( "查找CF卡超時無響應!\n" ) ;		//
	}
} 


/*********************************************************************************************************
** 函數名稱: ATA_ReadSetting					所在文件:IDE.C
** 功能描述: 讀扇區指令設置相關的寄存器。
** 輸   入: Sectors ,讀設備的起始扇區號
**			 Count ,扇區數
** 輸   出: 無
** 全局變量: ATA_DevReg,確定選擇的是主設備或是從設備和地址模式(本驅動使用LBA模式)
** 調用模塊: ATA_CommandSet(),寫命令設置

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91无套直看片红桃| 国产成人精品影视| 中文字幕一区二区三区在线观看 | 精品国产一区二区三区av性色| 欧美专区日韩专区| 欧美日韩三级视频| 欧美日韩精品高清| 日韩一区二区视频在线观看| 91精品国产综合久久久蜜臀图片| 在线观看91视频| 91精品国产综合久久福利 | 精品一区二区综合| 国产麻豆成人传媒免费观看| 国产麻豆精品一区二区| www.亚洲激情.com| 在线免费观看日本一区| 3751色影院一区二区三区| 欧美成人综合网站| 国产精品的网站| 一级精品视频在线观看宜春院 | 精品免费视频.| 中文天堂在线一区| 午夜一区二区三区视频| 久久国产三级精品| 成人福利视频网站| 欧美伊人久久久久久午夜久久久久| 欧美三级日韩三级| 久久久欧美精品sm网站| 一区二区三区在线影院| 久久国产精品免费| 91久久精品一区二区| 欧美一区二区三区爱爱| 欧美韩日一区二区三区| 天天av天天翘天天综合网色鬼国产| 国内精品不卡在线| 欧美亚洲国产bt| 久久精品亚洲乱码伦伦中文| 亚洲一区二区精品久久av| 激情综合网激情| 欧美亚洲动漫另类| 国产精品区一区二区三| 男人的j进女人的j一区| 欧美性生交片4| 亚洲国产精品二十页| 麻豆精品精品国产自在97香蕉| 91麻豆免费看| 久久色在线视频| 丝袜美腿一区二区三区| 99国产精品国产精品久久| 欧美mv日韩mv国产网站app| 亚洲国产精品久久不卡毛片| 成人免费三级在线| 精品日韩av一区二区| 亚洲综合另类小说| 97久久超碰国产精品| 国产欧美精品区一区二区三区| 午夜欧美视频在线观看| 91年精品国产| 1024精品合集| 成人精品国产福利| 国产精品视频yy9299一区| 精品一区二区三区蜜桃| 91精品国产美女浴室洗澡无遮挡| 一区二区三区不卡在线观看 | 国产日本亚洲高清| 精品一区二区三区av| 91精品久久久久久蜜臀| 亚洲图片一区二区| 欧美性受xxxx| 亚洲一区二区视频在线观看| 色综合天天综合| 国产精品久久久久天堂| 不卡欧美aaaaa| 国产精品久久看| 99久久婷婷国产综合精品电影 | 久久97超碰色| 欧美成人猛片aaaaaaa| 美女视频免费一区| 久久综合色鬼综合色| 国产成人精品三级麻豆| 国产精品色婷婷久久58| 色天使色偷偷av一区二区| 亚洲欧美另类小说视频| 欧美私人免费视频| 丝瓜av网站精品一区二区| 欧美一级理论片| 免费的国产精品| 欧美国产丝袜视频| 91美女精品福利| 日韩成人精品在线观看| 欧美大片日本大片免费观看| 国产成人av一区| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩视频一区二区| 婷婷开心久久网| 国产午夜三级一区二区三| 99re亚洲国产精品| 三级在线观看一区二区| 久久午夜色播影院免费高清| www.日韩在线| 麻豆极品一区二区三区| 亚洲欧洲无码一区二区三区| 欧美三级日本三级少妇99| 国产综合一区二区| 亚洲欧美另类久久久精品| 日韩一区二区不卡| www.欧美精品一二区| 天堂成人免费av电影一区| 国产欧美一区在线| 欧美日韩精品高清| 成人av集中营| 久久爱另类一区二区小说| 亚洲天堂免费在线观看视频| 欧美一级日韩免费不卡| 91在线云播放| 国产一区视频导航| 亚洲电影一级片| 国产欧美日韩卡一| 制服丝袜亚洲播放| 91看片淫黄大片一级在线观看| 日韩成人午夜电影| 亚洲一区中文日韩| 欧美极品aⅴ影院| 欧美一区二区三区免费| 91成人免费网站| 成人黄色电影在线| 极品销魂美女一区二区三区| 天天影视色香欲综合网老头| 中文字幕欧美一| 国产亚洲短视频| 欧美大片拔萝卜| 91精品国产综合久久国产大片| 在线看日本不卡| 99精品久久久久久| 成人av资源网站| 国产精品小仙女| 国内成+人亚洲+欧美+综合在线| 视频一区在线播放| 亚洲国产cao| 午夜精品福利一区二区蜜股av | 91在线码无精品| 成人福利电影精品一区二区在线观看| 久久99热这里只有精品| 裸体歌舞表演一区二区| 日日夜夜精品视频天天综合网| 一区二区三区在线播| 亚洲免费av网站| 一区二区在线观看视频| 一区二区视频免费在线观看| 亚洲欧美日韩中文播放| 伊人开心综合网| 一区二区三区不卡视频 | 麻豆精品在线看| 日本午夜一本久久久综合| 三级欧美韩日大片在线看| 视频一区视频二区在线观看| 日本午夜精品视频在线观看| 日本欧美加勒比视频| 久久精品国产精品青草| 精品一区二区三区香蕉蜜桃| 国产综合一区二区| 成人中文字幕电影| 91香蕉视频污在线| 7777精品久久久大香线蕉| 日韩一区二区三区精品视频| 久久综合成人精品亚洲另类欧美| 欧美激情一区在线| 国产精品初高中害羞小美女文| 亚洲免费在线看| 日韩av电影一区| 国产美女一区二区三区| 99久久99久久免费精品蜜臀| 在线观看免费一区| 精品久久国产字幕高潮| 国产精品久久久久久久蜜臀| 亚洲国产成人精品视频| 久久99国产精品久久99果冻传媒| 成人a区在线观看| 欧美日韩精品一区二区三区四区| 欧美大片免费久久精品三p| 国产精品家庭影院| 午夜国产精品一区| 成人av第一页| 日韩一区二区不卡| 综合色天天鬼久久鬼色| 欧美aⅴ一区二区三区视频| 成人国产精品免费网站| 制服视频三区第一页精品| 欧美激情一区二区三区蜜桃视频| 亚洲国产色一区| 成人免费视频app| 欧美成人video| 亚洲在线成人精品| 国产69精品久久久久777| 欧美精品777| 亚洲日本在线看| 国产成人免费视| 日韩午夜av一区| 婷婷综合在线观看| 欧美在线影院一区二区|