小磷光一

BF533对ATA-IDE硬盘操作底层函数的配置

0
阅读(2352)

 

文件定义了对ATA-IDE硬盘操作的底层函数
**********************************************************************************
* 名称:Wait_Ready 
* 功能:等待硬盘是否准备可以操作
* 入口参数:无
* 出口参数:硬盘准备好返回0,如果硬盘出错返回错误码
***********************************************************************************/
uint8_t  Wait_Ready(void)
{
   uint8_t statbyte;
   uint8_t flag = 0;
   while (!flag)
   {
 	  statbyte = *pStatus ;// Read Status Register
 	 // printf("%x\n",statbyte);
 	  if (statbyte & IDE_ERROR)
 	  {
 	  		statbyte=*pErrorReg;						//检查硬盘工作是否有错误
 	  		printf("ATA-IDE Disk is ERROR !\n\r");
 	  		return  statbyte;							//如果有,读错误寄存器,并返回错误码
 	  }
	  if (statbyte & IDE_DRDY) 
	  		flag = 1;     								// 检查硬盘是否ready
   }
   printf("ATA-IDE Disk is Ready !\n\r");
   return 0;										
}
/**********************************************************************************
* 名称: Wait_ReadyBusy 
* 功能:等待硬盘是否应精不忙而且准备好可以操作
* 入口参数:无
* 出口参数:硬盘准备好返回0,如果硬盘出错返回错误码
***********************************************************************************/
uint8_t Wait_ReadyBusy(void)
{
   uint8_t statbyte;
   uint8_t flag = 0; 
   while (!flag)
   {
 	  statbyte = *pStatus; 	     // Read Status Register
 	  if (statbyte & IDE_ERROR)
 	  {
 	  		statbyte=*pErrorReg;
 	  		return  statbyte;
 	  }
	  if (((statbyte & IDE_DRDY)!=0 )&&((statbyte & IDE_BUSY)==0)) 
	  		flag = 1;     // Ready bit is in pos 6
   }
   return 0;
}
/**********************************************************************************
* 名称:Wait_DRQ
* 功能:等待数据传输是否准备好
* 入口参数:无
* 出口参数:硬盘准备好返回0,如果硬盘出错返回错误码
***********************************************************************************/
uint8_t Wait_DRQ(void)
{
   uint8_t statbyte;
   uint8_t flag = 0; 
   while (!flag)
   {
 	  statbyte = *pStatus; 	     // Read Status Register
 	  if (statbyte & IDE_ERROR)
 	  {
 	  		statbyte=*pErrorReg;
 	  		return  statbyte;
 	  }
	  if (statbyte & IDE_DRQ) 
	  		flag = 1;     // Ready bit is in pos 6
   }
  return 0x00;
}
/**********************************************************************************
* 名称:CheckforError
* 功能:检查是否有错误
* 入口参数:无
* 出口参数:没有错误返回0,如果硬盘出错返回错误码
***********************************************************************************/
uint8_t CheckforError(void)
{
 	  uint8_t statbyte;
	  statbyte = *pStatus;	// Read Status Register
  	  if (statbyte & 0x01) 
  	  {
  	  		statbyte= *pErrorReg;
  	  		return statbyte; // Is LSB (error bit) is set then return 1
  	  }
	  else 
	  		return 0x00;
}