📄 ideio.c
字号:
#define _LIBRARY_DEFINE
#include <stdio.h>
#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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -