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

📄 ata_includes.h

📁 微机+CF卡+SD卡+USB的开发示例希望大家能用
💻 H
📖 第 1 页 / 共 2 页
字号:
#define		kATADevInfoModelBeg	27		// Model Number Begin
#define		kATADevInfoModelEnd	46		// Model Number End
#define		kATADevInfoMaxCap	57
#define		kATADevInfoPIO		64		// b[0-7] pio modes supported
#define		kATADevInfoUDMA		88		// b5=udma5..b0=udma0



// =====================================================
//	
//	Timing constant 
//
// =====================================================
#define     kATAIPGPrd         	3/50      // 30MHz, 16.666 ns

// ATA PIO0 - PIO4 timing
#define			kATARPIO0Reg1		(600*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101	// cycle time, t2
#define     kATAPIO0Reg1		(600*kATAIPGPrd*0x100)+(165*kATAIPGPrd)+0x0101	
#define     kATAPIO0Reg2  	(165*kATAIPGPrd*0x100)+(365*kATAIPGPrd)+0x0101	
#define     kATAPIO0Reg3   	(30*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define     kATAPIO0Reg4   	(35*kATAIPGPrd*0x100)+0+0x0100

#define     kATARPIO1Reg1  	(383*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101
#define     kATAPIO1Reg1   	(383*kATAIPGPrd*0x100)+(125*kATAIPGPrd)+0x0101
#define     kATAPIO1Reg2   	(125*kATAIPGPrd*0x100)+(208*kATAIPGPrd)+0x0101
#define     kATAPIO1Reg3   	(20*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define     kATAPIO1Reg4   	(35*kATAIPGPrd*0x100)+0+0x0100

#define     kATARPIO2Reg1  	(240*kATAIPGPrd*0x100)+(290*kATAIPGPrd)+0x0101
#define     kATAPIO2Reg1   	(240*kATAIPGPrd*0x100)+(100*kATAIPGPrd)+0x0101
#define     kATAPIO2Reg2   	(100*kATAIPGPrd*0x100)+(110*kATAIPGPrd)+0x0101
#define     kATAPIO2Reg3   	(15*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define     kATAPIO2Reg4   	(35*kATAIPGPrd*0x100)+0+0x0100

#define     kATARPIO3Reg1  	(180*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define     kATAPIO3Reg1   	(180*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define     kATAPIO3Reg2   	(80*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define     kATAPIO3Reg3   	(10*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define     kATAPIO3Reg4   	(35*kATAIPGPrd*0x100)+0+0x0100

#define     kATARPIO4Reg1  	(120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define     kATAPIO4Reg1   	(120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define     kATAPIO4Reg2   	(70*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define     kATAPIO4Reg3   	(10*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define     kATAPIO4Reg4   	(35*kATAIPGPrd*0x100)+0x0100

// Multiword DMA0 - DMA2 timing

#define     kATAMDMA0Reg1  	(480*kATAIPGPrd*0x100)+(215*kATAIPGPrd)+0x0101
#define     kATAMDMA0Reg2 	(215*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define     kATAMDMA0Reg3  	(20*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define     kATAMDMA0Reg4  	(15*kATAIPGPrd*0x100)

#define     kATAMDMA1Reg1 	(150*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define     kATAMDMA1Reg2  	(50*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101
#define     kATAMDMA1Reg3  	(15*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define     kATAMDMA1Reg4  	(10*kATAIPGPrd*0x100)

#define     kATAMDMA2Reg1  	(120*kATAIPGPrd*0x100)+(70*kATAIPGPrd)+0x0101
#define     kATAMDMA2Reg2  	(25*kATAIPGPrd*0x100)+(25*kATAIPGPrd)+0x0101
#define     kATAMDMA2Reg3  	(10*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define     kATAMDMA2Reg4  	(10*kATAIPGPrd*0x100)

// UDMA0 - UDMA4 timing 
//#define     kATAUDMA0Reg1  	(240*kATAIPGPrd*0x100)+(120*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg1  	(240*kATAIPGPrd*0x100)+(150*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg2  	(15*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg3  	(70*kATAIPGPrd*0x100)+(7*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg4  	(230*kATAIPGPrd*0x100)+(150*kATAIPGPrd)
#define     kATAUDMA0Reg5  	(20*kATAIPGPrd*0x100)+(10*kATAIPGPrd)+0x0100
#define     kATAUDMA0Reg6  	(20*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg7  	(50*kATAIPGPrd*0x100)+(75*kATAIPGPrd)+0x0100
#define     kATAUDMA0Reg8  	(160*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define     kATAUDMA0Reg9  	(20*kATAIPGPrd*0x100)+0x0100

//#define     kATAUDMA1Reg1  	(160*kATAIPGPrd*0x100)+(80*kATAIPGPrd)+0x0101
#define     kATAUDMA1Reg1  	0x0005		// xx,			cycle (80)		 
#define     kATAUDMA1Reg2  	0x0000		// xx,	xx	
#define     kATAUDMA1Reg3  	0x0301		// DVS(48),	DVH	(7)
#define     kATAUDMA1Reg4  	0x0000		// xx,	xx
#define     kATAUDMA1Reg5  	0x0300		// MLI (20), xx
#define     kATAUDMA1Reg6  	0x030F		// ENV (20), SR (30)
#define     kATAUDMA1Reg7  	0x0F1F		// SS (50), RFS (75) max
#define     kATAUDMA1Reg8  	0x3F02		// RP (125), ACK (20)
#define     kATAUDMA1Reg9  	0x0200		// ZAH (20)

#define     kATAUDMA2Reg1  	0x0004		// xx,			cycle (60)		 
#define     kATAUDMA2Reg2  	0x0000		// xx,	xx	
#define     kATAUDMA2Reg3  	0x0202		// DVS(31),	DVH	(7)
#define     kATAUDMA2Reg4  	0x0000		// xx,	xx
#define     kATAUDMA2Reg5  	0x0F00		// MLI (20), xx
#define     kATAUDMA2Reg6  	0x0300		// ENV (20), SR (0)
#define     kATAUDMA2Reg7  	0x0402		// SS (50), RFS (70) max
#define     kATAUDMA2Reg8  	0x0702		// RP (100), ACK (20)
#define     kATAUDMA2Reg9  	0x0200		// ZAH (20)

#define     kATAUDMA3Reg1  	0x0003		// xx,			cycle (45)		 
#define     kATAUDMA3Reg2  	0x0000		// xx,	xx
#define     kATAUDMA3Reg3  	0x0202		// DVS(20),	DVH	(7)
#define     kATAUDMA3Reg4  	0x0000		// xx,	xx
#define     kATAUDMA3Reg5  	0x0F00		// MLI, AZ
#define     kATAUDMA3Reg6  	0x0300		// ENV, SR (0)
#define     kATAUDMA3Reg7  	0x0402		// SS (50), RFS (60 max)
#define     kATAUDMA3Reg8  	0x0702		// RP (100), ACK (20)
#define     kATAUDMA3Reg9  	0x0200		// ZAH (20)

//#define     kATAUDMA4Reg1  	(60*kATAIPGPrd*0x100)+(30*kATAIPGPrd)+0x0101	// 2cylcle, cycle
#define     kATAUDMA4Reg1  	0x0002		// xx,			cycle (30)		 
#define     kATAUDMA4Reg2  	0x0101		// DS	(7),	DH	(5)
#define     kATAUDMA4Reg3  	0x0101		// DVS(7),	DVH	(7)
//#define     kATAUDMA4Reg2  	(7*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101		// DS, DH
//#define     kATAUDMA4Reg3  	(7*kATAIPGPrd*0x100)+(7*kATAIPGPrd)+0x0101		// DVS, DVH
//#define     kATAUDMA4Reg4  	(120*kATAIPGPrd*0x100)+(100*kATAIPGPrd)-0x101	// FS, LI
#define     kATAUDMA4Reg4  	(100*kATAIPGPrd*0x100)+(100*kATAIPGPrd)					// FS, LI
#define     kATAUDMA4Reg5  	(20*kATAIPGPrd*0x100)+0x0100									// MLI, AZ
#define     kATAUDMA4Reg6  	(20*kATAIPGPrd*0x100)+0x0101									// ENV, SR
#define     kATAUDMA4Reg7  	(50*kATAIPGPrd*0x100)+(60*kATAIPGPrd)+0x0100	// SS, RFS
#define     kATAUDMA4Reg8  	(100*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101	// RP, ACK
#define     kATAUDMA4Reg9  	(20*kATAIPGPrd*0x100)+0x0100

#define     kATAUDMA5Reg1  	(40*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define     kATAUDMA5Reg2  	(4*kATAIPGPrd*0x100)+(5*kATAIPGPrd)+0x0101
#define     kATAUDMA5Reg3  	(5*kATAIPGPrd*0x100)+(10*kATAIPGPrd)+0x0101
//#define     kATAUDMA5Reg4  	(90*kATAIPGPrd*0x100)+(75*kATAIPGPrd)-0x101
#define     kATAUDMA5Reg4  	(50*kATAIPGPrd*0x100)+(50*kATAIPGPrd)
#define     kATAUDMA5Reg5  	(20*kATAIPGPrd*0x100)+0x0100
#define     kATAUDMA5Reg6  	(20*kATAIPGPrd*0x100)+0x0101
#define     kATAUDMA5Reg7  	(50*kATAIPGPrd*0x100)+(50*kATAIPGPrd)+0x0100
#define     kATAUDMA5Reg8  	(85*kATAIPGPrd*0x100)+(20*kATAIPGPrd)+0x0101
#define     kATAUDMA5Reg9  	(20*kATAIPGPrd*0x100)+0x0100


// ======================================================
//
// 		ATA hardware
//
// ======================================================
#define		kATAResetPin		0
#define		kATAResetPort		PORTT

// ======================================================
//
// 		ATA error code
//
// ======================================================
#define		kATAPass			0x0000
#define		kATAError			0x0001
#define		kATACRCError		0x0002
#define		kATATimeoutError	0x0003		
#define		kATATimeout			10000	// 10 second for ATA timeout
#define		kATASetPIOError		0x0004
#define		kATASetUDMAError	0x0005

// ======================================================
//
// 		 Compile Option
//
// ======================================================
#define		kATA_Removeable		0		// 1 = removeable 


// ======================================================
//
// 		 Macro
//
// ======================================================
#define		kmATAByteSwap(word) (word >> 8) | (word << 8)


// ======================================================
//
// 		Global Variables internally used by ATA Driver
//
// ======================================================

//
#pragma DATA_SEG DEFAULT

// The Sys Timer Hook Function List
extern pHookFunc	gpATARequestHookTable[];
extern pHookFunc	gpATADataHookTable[];


// ===================================================================
//
//		            Module Specific Macro Functions definitions
//
// ===================================================================



typedef struct {
	muint8 features;
	muint8 count;
	muint8 lba_low;
	muint8 lba_mid;
	muint8 lba_high;
	muint8 device;
	muint8 command;
	muint8 dmamode;
} sATACommand;

// ===================================================================
//
//		            ATA Specific Types definitions
//
// ===================================================================
typedef	muint8	ATAErrorCode;

// *********************************************************************
//
//	                FUNCTIONS PROVIDED BY ATA Processor
//
//                 
//
// *********************************************************************
ATAErrorCode ATA_SCSIInquiry(muint16 *pBuffer);
ATAErrorCode ATA_SCSIReadCapacity(muint8 *pBuffer);
ATAErrorCode ATA_IdentifyDevice(muint16 *pBuffer, muint16 XferLen);


// *********************************************************************
//
//	                FUNCTIONS PROVIDED BY ATA Driver
//
//                 
//
// *********************************************************************
#pragma CODE_SEG	DEFAULT

void 					ATA_Delay(muint16 delay);
volatile			ATAErrorCode ATA_WaitRegBusy(void);
void 					ATA_SetPIOTiming(muint8 pio);
void 					ATA_SetRPIOTiming(muint8 pio);
void 					ATA_SetUDMATiming(muint8 udma);
void 					ATA_SetMDMATiming(muint8 mdma);
ATAErrorCode 	ATA_WaitATABusy(void);
ATAErrorCode	ATA_WaitATABusyDRQ(void);
void 					ATA_PreInit(void);
ATAErrorCode 	ATA_Init(muint8 resetpin, volatile muint8 *resetport);
ATAErrorCode 	ATA_SoftwareReset(void);
ATAErrorCode 	ATA_PacketCommand(muint16 *pCommand);
ATAErrorCode	ATA_Command(sATACommand *ATACommand);
ATAErrorCode 	ATA_LBAATACommand(muint8 block, muint8 ATACmd);
ATAErrorCode 	ATA_LBAATACommand1(muint8 block, muint8 *pLBA, muint8 ATACmd);
ATAErrorCode 	ATA_PIORead(muint16 *pBuffer, muint16 XferWordLen);
ATAErrorCode 	ATA_DummyPIORead(muint16 XferWordLen);
ATAErrorCode	ATA_PIOWriteTwoBlock(muint16 *pBuffer);
ATAErrorCode 	ATA_PIOWrite(muint16 *pBuffer, muint16 XferWordLen);
ATAErrorCode 	ATA_GetSetDeviceInfo(void);
void 					ATA_FillNZero(muint16 XferWordLen);
void 					ATA_UDMARead(muint8 pIQUEBuffer);
void				 ATA_UDMAWrite(muint8 pIQUEBuffer);

// for Testing use only
void Demo_PIOMode(void);
void Demo_UDMAMode(void);

// ==================================================================
//   ATA_Command() -
//
//     ATA Command
//
//
//	Input -		serviceID = the ID of service to be registered.
//
//	Output - 	nil
//
//	Function returns the error code of the result.
//
// 
ATAErrorCode	ATA_RegService(muint8 serviceID);



// ==================================================================
//   MK_RegService() -
//
//     To register the shared Service of Mini-Kernel.
//
//
//	Input -		serviceID = the ID of service to be registered.
//
//	Output - 	nil
//
//	Function returns the error code of the result.
//
// 
ATAErrorCode	ATA_QueryService(muint8 serviceID);




// *********************************************************************
//
//	                FUNCTIONS INTERNALLY USED BY ATA Driver
//
//                  DO NOT CALL TO THESE FUNCTIONS DIRECTLY.
//
// *********************************************************************




// ==================================================================
//   ATA_InitATAData() -
//
//     To initialize the ATA global variables.
// ==================================================================
void	ATA_InitATAData(void);




#endif	_H_ATA_INCLUDES_		// end of my Constants & Macros definition
//
// The end of file ata_Includes.h
// *********************************************************************************

⌨️ 快捷键说明

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