📄 ata_if.h
字号:
//*****************************************************************
//
// File Name : 'ata_if.h'
// Title : IDE-ATA interface driver
// Author : Pascal Stang
// Date : 11/22/2000
// Version : 0.1
// Target MCU : ATmega103
// Editor Tabs : 3
//
//*****************************************************************
// constants
#define CTRL 0
#define CMD 1
#define DRIVE0 0
#define STANDBY 0
#define SLEEP 1
#define IDLE 2
// ATA status register bits
#define ATA_SR_BSY 0x80
#define ATA_SR_DRDY 0x40
#define ATA_SR_DF 0x20
#define ATA_SR_DSC 0x10
#define ATA_SR_DRQ 0x08
#define ATA_SR_CORR 0x04
#define ATA_SR_IDX 0x02
#define ATA_SR_ERR 0x01
// ATA error register bits
#define ATA_ER_UNC 0x40
#define ATA_ER_MC 0x20
#define ATA_ER_IDNF 0x10
#define ATA_ER_MCR 0x08
#define ATA_ER_ABRT 0x04
#define ATA_ER_TK0NF 0x02
#define ATA_ER_AMNF 0x01
// ATA registers
#define ATA_REG_BASE 0x8000
#define ATA_REG_DATAL 0x00
#define ATA_REG_ERROR 0x01
#define ATA_REG_SECCOUNT 0x02
#define ATA_REG_STARTSEC 0x03
#define ATA_REG_CYLLO 0x04
#define ATA_REG_CYLHI 0x05
#define ATA_REG_HDDEVSEL 0x06
#define ATA_REG_CMDSTATUS1 0x07
#define ATA_REG_CMDSTATUS2 0x08
#define ATA_REG_ACTSTATUS 0x09
#define ATA_REG_DATAH 0x10
// ATA commands
#define ATA_CMD_READ 0x20
#define ATA_CMD_READNR 0x21
#define ATA_CMD_WRITE 0x30
#define ATA_CMD_WRITENR 0x31
#define ATA_CMD_IDENTIFY 0xEC
#define ATA_CMD_RECALIBRATE 0x10
#define ATA_CMD_SPINDOWN 0xE0
#define ATA_CMD_SPINUP 0xE1
// ATA CHS disk parameters
//#define ATA_DISKPARM_CLYS 1011
//#define ATA_DISKPARM_HEADS 15
//#define ATA_DISKPARM_SECTORS 22
#define ATA_DISKPARM_CLYS 0x03A6
#define ATA_DISKPARM_HEADS 0x10
#define ATA_DISKPARM_SECTORS 0x11
//----------------------------------------------------------------------------
// Typedefs
//----------------------------------------------------------------------------
/*
typedef struct
{
unsigned char Heads;
unsigned int Tracks;
unsigned int SectorsPerTrack;
char Model[41];
} tdefDriveInfo;
*/
// Prototypes
void ataInit(void);
u08 ataReadByte(u08 reg);
void ataWriteByte(u08 reg, u08 data);
void ataShowRegisters(unsigned char DriveNo);
u08 ataSWReset(void);
void ataDiskErr(void);
void ataPrintSector( u08 *Buffer);
void ataReadDataBuffer(u08 *Buffer, u16 numBytes);
void ataWriteDataBuffer(u08 *Buffer, u16 numBytes);
u08 ataStatusWait(u08 mask, u08 waitStatus);
unsigned char ataReadSectors( unsigned char Drive,
unsigned char Head,
unsigned int Track,
unsigned char Sector,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ataWriteSectors( unsigned char Drive,
unsigned char Head,
unsigned int Track,
unsigned char Sector,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ataReadSectorsLBA( unsigned char Drive,
unsigned long lba,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ataWriteSectorsLBA( unsigned char Drive,
unsigned long lba,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ataReadSectorsLBAforCHS( unsigned char Drive,
unsigned long lba,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ataWriteSectorsLBAforCHS( unsigned char Drive,
unsigned long lba,
unsigned int numsectors,
unsigned char *Buffer);
//char SetAddress(unsigned char cs, unsigned char adr);
//unsigned int ReadWORD(unsigned char cs, unsigned char adr);
//unsigned char ReadBYTE(unsigned char cs, unsigned char adr);
//void WriteWORD(unsigned char cs, unsigned char adr, unsigned int dat);
//void WriteBYTE(unsigned char cs, unsigned char adr, unsigned char dat);
//unsigned char IdentifyDrive(unsigned char DriveNo, unsigned char *Buffer, tdefDriveInfo *DriveInfo);
/*
unsigned char ATA_Read_Sectors( unsigned char Drive,
unsigned char Head,
unsigned int Track,
unsigned char Sector,
unsigned int numsectors,
unsigned char *Buffer);
unsigned char ATA_Read_Sectors_LBA( unsigned char Drive,
unsigned long lba,
unsigned int numsectors,
unsigned char *Buffer);
//unsigned char SetMode(unsigned char DriveNo, unsigned char Mode, unsigned char PwrDown);
*/
//unsigned char ATA_Idle(unsigned char Drive);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -