BF533对ATA-IDE硬盘操作底层函数的配置
0赞
发表于 4/1/2012 10:28:44 AM
阅读(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;
}
