www.pudn.com > 外挂硬盘和FLASH的MP3方案程序下载.rar > IDEIO.C


#define _LIBRARY_DEFINE 
#include  
#include "..\Inc\AT8xC51SND1.h" 
#include "..\Inc\GLOBAL.h" 
#include "..\Inc\COMMON.h" 
#include "..\Inc\MP3.h" 
#include "IDEIO.h" 
 
//IDE设备控制寄存器地址 
#define IDE_ADDR_CTRL_STATUS					IDE_ADDR_BASE + IDE_ADDR_CTRL + IDE_IO_DA2 + IDE_IO_DA1 
#define IDE_ADDR_CTRL_CONTROL					IDE_ADDR_BASE + IDE_ADDR_CTRL + IDE_IO_DA2 + IDE_IO_DA1 
 
//IDE设备命令寄存器地址 
#define IDE_ADDR_CMD_DATA					IDE_ADDR_BASE + IDE_ADDR_CMD 
#define IDE_ADDR_CMD_ERROR					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA0 
#define IDE_ADDR_CMD_SECCNT					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1 
#define IDE_ADDR_CMD_LBA0					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1 + IDE_IO_DA0 
#define IDE_ADDR_CMD_LBA1					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 
#define IDE_ADDR_CMD_LBA2					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA0 
#define IDE_ADDR_CMD_LBA3					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 
#define IDE_ADDR_CMD_STATUS					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 + IDE_IO_DA0 
#define IDE_ADDR_CMD_COMMAND					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 + IDE_IO_DA0 
#define IDE_ADDR_CMD_SECTOR					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1 + IDE_IO_DA0 
#define IDE_ADDR_CMD_CYLMSB					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 
#define IDE_ADDR_CMD_CYLLSB					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA0 
#define IDE_ADDR_CMD_HEAD					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 
 
//IDE设备状态字 
#define IDE_STATUS_BSY						0x80 
#define IDE_STATUS_DRDY						0x40 
#define IDE_STATUS_DF						0x20 
#define IDE_STATUS_DSC						0x10 
#define IDE_STATUS_DRQ						0x08 
#define IDE_STATUS_CORR						0x04 
#define IDE_STATUS_IDX						0x02 
#define IDE_STATUS_ERR						0x01 
 
//IDE设备出错标志 
#define IDE_ERR_UNC						0x40 
#define IDE_ERR_MC						0x20 
#define IDE_ERR_IDNF						0x10 
#define IDE_ERR_MCR						0x08 
#define IDE_ERR_ABRT						0x04 
#define IDE_ERR_TK0NF						0x02 
#define IDE_ERR_AMNF						0x01 
 
//IDE设备控制标志 
#define IDE_CTRL_SRST						0x04 
#define IDE_CTRL_nIEN						0x02 
#define IDE_CTRL_LBA						0x40 
#define IDE_CTRL_DEV						0x10 
 
//IDE设备命令 
#define IDE_CMD_RECAL						0x10 
#define IDE_CMD_READ						0x20 
#define IDE_CMD_WRITE						0x30 
#define IDE_CMD_DEVDIAG						0x90 
#define IDE_CMD_INIT						0x91 
#define IDE_CMD_IDLE_IMMEDIATE					0xE1 
#define IDE_CMD_SLEEP						0xE6 
#define IDE_CMD_STANDBY						0xE0 
#define IDE_CMD_IDENTIFYDEV					0xEC 
 
#define IDE_WAIT						TRUE 
#define IDE_NOWAIT						FALSE 
 
//IDE 读写操作 
#define IDE_READ_LSB(addr,dat)					dat=*((BYTE xdata *)addr) 
#define IDE_READ_MSB(addr)					SET_BIT_6(AUXR),*((BYTE xdata *)addr),CLEAR_BIT_6(AUXR),IDE_PORT_DATMSB 
#define IDE_WRITE_LSB(addr,dat)					*((BYTE xdata *)addr)=dat 
#define IDE_WRITE_MSB(addr,dat)					IDE_PORT_DATMSB=dat,EXT16=1,*((BYTE xdata *)addr|(dat<<8)),EXT16=0 
#define IDE_READ_WORD(addr,lo,hi)				SET_BIT_6(AUXR);lo=*((BYTE xdata *)addr);hi=IDE_PORT_DATMSB;CLEAR_BIT_6(AUXR) 
#define IDE_WRITE_WORD(addr,lo,hi)				SET_BIT_6(AUXR);IDE_PORT_DATMSB=hi;*((BYTE xdata *)addr)=lo;CLEAR_BIT_6(AUXR)