⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ide.c

📁 针对ADSP-BF533的例程
💻 C
字号:
#include "CPLD.h"
#include "GeneralFunc.h"

#define IdeDalayValue   100000

extern void Delay(unsigned int Value);

extern void IdeStandby(void);
extern void IdeIdle(void);
extern unsigned char IdeReadSector(unsigned char SectorNum,
								unsigned short CylinderNum);
extern unsigned char IdeWriteSector(unsigned char SectorNum,
							unsigned short CylinderNum);

extern unsigned short buffers[256];

/************************************************************************/
/*																		*/
/************************************************************************/
void IdeStandby(void)
{
	*pCommand = 0xe0;
}

void IdeIdle(void)
{
	*pCommand = 0x95;
}

unsigned char IdeReadSector(unsigned char SectorNum,
							unsigned short CylinderNum)
{
	unsigned int i=0;
	unsigned int sum1=0,sum2=0;
	unsigned char errorstatus=0;
	unsigned short result=0;
	unsigned char ERRbit=0;
	unsigned char cylinderlow=0,cylinderhigh=0;

	cylinderlow  = (unsigned char)(CylinderNum & 0x00ff);
	cylinderhigh = (unsigned char)((CylinderNum & 0xff00)<<8);
		
IDEREADLAB1:
	
	result = *pStatus;
	if(result == 0x50)
		{
		*pPreComp 		= 0x00;
		*pSectorCount 	= 0x01;
		*pSectorNumber 	= SectorNum;
		*pCylinderLow 	= cylinderlow;
		*pCylinderHigh 	= cylinderhigh;
		*pDriveHead 		= 0xa0+1;
		*pCommand 		= 0x21;//read

IDEREADLAB2:
		result = *pStatus;
		if(result == 0x58)
			{
			for(i=0;i<256;i++)
				{
				buffers[i] = *pDataPort;//read
				}
			result = *pStatus;
			ERRbit = result & 0x01;
			if(ERRbit == 0)//ok
				{return(0);
				}
			else
				{errorstatus = *pErrorReg;
				return(errorstatus);
				}
			}
		else//timeout process
			{Delay(IdeDalayValue);
			sum2++;
			if(sum2<1000)
				{goto IDEREADLAB2;
				}
			else
				{errorstatus = *pErrorReg;
				return(errorstatus);
				}
			}
		}
	else//timeout process
		{Delay(IdeDalayValue);
		sum1++;
		if(sum1<10)
			{goto IDEREADLAB1;
			}
		else
			{errorstatus = *pErrorReg;
			return(errorstatus);
			}
		}	
}


unsigned char IdeWriteSector(unsigned char SectorNum,
							unsigned short CylinderNum)
{
	unsigned int i=0;
	unsigned int sum1=0,sum2=0;
	unsigned char errorstatus=0;
	unsigned char result=0;
	unsigned char ERRbit=0;
	unsigned char cylinderlow=0,cylinderhigh=0;

	cylinderlow  = (unsigned char)(CylinderNum & 0x00ff);
	cylinderhigh = (unsigned char)((CylinderNum & 0xff00)<<8);
		
IDEREADLAB1:
	
	result = *pStatus;
	if(result == 0x50)
		{
		*pPreComp 		= 0x00;
		*pSectorCount 	= 0x01;
		*pSectorNumber 	= SectorNum;
		*pCylinderLow 	= cylinderlow;
		*pCylinderHigh 	= cylinderhigh;
		*pDriveHead 		= 0xa0+1;
		*pCommand 		= 0x31;//write

IDEREADLAB2:
		result = *pStatus;
		if(result == 0x58)
			{
			for(i=0;i<256;i++)
				{
				*pDataPort = buffers[i];//write
				}
			result = *pStatus;
			ERRbit = result & 0x01;
			if(ERRbit == 0)//ok
				{return(0);
				}
			else
				{errorstatus = *pErrorReg;
				return(errorstatus);
				}
			}
		else//timeout process
			{Delay(IdeDalayValue);
			sum2++;
			if(sum2<1000)
				{goto IDEREADLAB2;
				}
			else
				{errorstatus = *pErrorReg;
				return(errorstatus);
				}
			}
		}
	else//timeout process
		{Delay(IdeDalayValue);
		sum1++;
		if(sum1<10)
			{goto IDEREADLAB1;
			}
		else
			{errorstatus = *pErrorReg;
			return(errorstatus);
			}
		}	
}











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -