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)