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

📄 ide.h

📁 基于ATmega64单片机以及vs1003的SD卡方案的MP3播放源代码
💻 H
字号:
#ifndef __IDE_H__
#define __IDE_H__

#include<avr/io.h>

#define uint8  unsigned char
#define uint16 unsigned int
#define uint32 unsigned long

#define IDE_RST_DDR  DDRG
#define IDE_RST_PORT PORTG
#define IDE_RST_PIN  PG3
#define IDE_RST_L()  IDE_RST_PORT &= ~(1<<IDE_RST_PIN)
#define IDE_RST_H()  IDE_RST_PORT |=  1<<IDE_RST_PIN

#define IDE_DA0_DDR  DDRD
#define IDE_DA0_PORT PORTD
#define IDE_DA0_PIN  PD0
#define IDE_DA0_L()  IDE_DA0_PORT &= ~(1<<IDE_DA0_PIN)
#define IDE_DA0_H()  IDE_DA0_PORT |=  1<<IDE_DA0_PIN

#define IDE_DA1_DDR  DDRD
#define IDE_DA1_PORT PORTD
#define IDE_DA1_PIN  PD1
#define IDE_DA1_L()  IDE_DA1_PORT &= ~(1<<IDE_DA1_PIN)
#define IDE_DA1_H()  IDE_DA1_PORT |=  1<<IDE_DA1_PIN

#define IDE_DA2_DDR  DDRD
#define IDE_DA2_PORT PORTD
#define IDE_DA2_PIN  PD2
#define IDE_DA2_L()  IDE_DA2_PORT &= ~(1<<IDE_DA2_PIN)
#define IDE_DA2_H()  IDE_DA2_PORT |=  1<<IDE_DA2_PIN

#define IDE_CS0_DDR  DDRD
#define IDE_CS0_PORT PORTD
#define IDE_CS0_PIN  PD3
#define IDE_CS0_L()  IDE_CS0_PORT &= ~(1<<IDE_CS0_PIN)
#define IDE_CS0_H()  IDE_CS0_PORT |=  1<<IDE_CS0_PIN

#define IDE_CS1_DDR  DDRD
#define IDE_CS1_PORT PORTD
#define IDE_CS1_PIN  PD4
#define IDE_CS1_L()  IDE_CS1_PORT &= ~(1<<IDE_CS1_PIN)
#define IDE_CS1_H()  IDE_CS1_PORT |=  1<<IDE_CS1_PIN

#define IDE_DATA_L_DDR  DDRA
#define IDE_DATA_L_PORT PORTA
#define IDE_DATA_L_PIN  PINA

#define IDE_DATA_H_DDR  DDRC
#define IDE_DATA_H_PORT PORTC
#define IDE_DATA_H_PIN  PINC

#define IDE_WR_DDR  DDRG
#define IDE_WR_PORT PORTG
#define IDE_WR_PIN  PG0
#define IDE_WR_L()  IDE_WR_PORT &= ~(1<<IDE_WR_PIN)
#define IDE_WR_H()  IDE_WR_PORT |=  1<<IDE_WR_PIN

#define IDE_RD_DDR  DDRG
#define IDE_RD_PORT PORTG
#define IDE_RD_PIN  PG1
#define IDE_RD_L()  IDE_RD_PORT &= ~(1<<IDE_RD_PIN)
#define IDE_RD_H()  IDE_RD_PORT |=  1<<IDE_RD_PIN



//ATA命令
// CB_ERR ERROR REGISTER BITS 
#define ATA_ER_BBK					0x80    // ATA bad block
#define ATA_ER_UNC					0x40    // ATA uncorrected error
#define ATA_ER_MC					0x20    // ATA media change
#define ATA_ER_IDNF					0x10    // ATA id not found
#define ATA_ER_MCR					0x08    // ATA media change request
#define ATA_ER_ABRT					0x04    // ATA command aborted
#define ATA_ER_NTK0					0x02    // ATA track 0 not found
#define ATA_ER_NDAM					0x01    // ATA address mark not found
// CB_DH bits 7-4 OF THE DEVICE/HEAD REGISTER
#define ATA_DH_DEV0					0xE0    // select device 0 LBA MODE
#define ATA_DH_DEV1					0xF0    // select device 1 LBA MODE

//ATA commands (from ATA-3),
#define CMD_CFA_ERASE_SECTORS            0xC0
#define CMD_CFA_REQUEST_EXT_ERR_CODE     0x03
#define CMD_CFA_TRANSLATE_SECTOR         0x87
#define CMD_CFA_WRITE_MULTIPLE_WO_ERASE  0xCD
#define CMD_CFA_WRITE_SECTORS_WO_ERASE   0x38
#define CMD_CHECK_POWER_MODE1            0xE5
#define CMD_CHECK_POWER_MODE2            0x98
#define CMD_DEVICE_RESET                 0x08
#define CMD_EXECUTE_DEVICE_DIAGNOSTIC    0x90
#define CMD_FLUSH_CACHE                  0xE7
#define CMD_FORMAT_TRACK                 0x50
#define CMD_IDENTIFY_DEVICE              0xEC
#define CMD_IDENTIFY_DEVICE_PACKET       0xA1
#define CMD_IDENTIFY_PACKET_DEVICE       0xA1
#define CMD_IDLE1                        0xE3
#define CMD_IDLE2                        0x97
#define CMD_IDLE_IMMEDIATE1              0xE1
#define CMD_IDLE_IMMEDIATE2              0x95
#define CMD_INITIALIZE_DRIVE_PARAMETERS  0x91
#define CMD_INITIALIZE_DEVICE_PARAMETERS 0x91
#define CMD_NOP                          0x00
#define CMD_PACKET                       0xA0
#define CMD_READ_BUFFER                  0xE4
#define CMD_READ_DMA                     0xC8
#define CMD_READ_DMA_QUEUED              0xC7
#define CMD_READ_MULTIPLE                0xC4
#define CMD_READ_SECTORS                 0x20
#define CMD_READ_VERIFY_SECTORS          0x40
#define CMD_RECALIBRATE                  0x10
#define CMD_SEEK                         0x70
#define CMD_SET_FEATURES                 0xEF
#define CMD_SET_MULTIPLE_MODE            0xC6
#define CMD_SLEEP1                       0xE6
#define CMD_SLEEP2                       0x99
#define CMD_STANDBY1                     0xE2
#define CMD_STANDBY2                     0x96
#define CMD_STANDBY_IMMEDIATE1           0xE0
#define CMD_STANDBY_IMMEDIATE2           0x94
#define CMD_WRITE_BUFFER                 0xE8
#define CMD_WRITE_DMA                    0xCA
#define CMD_WRITE_DMA_QUEUED             0xCC
#define CMD_WRITE_MULTIPLE               0xC5
#define CMD_WRITE_SECTORS                0x30
#define CMD_WRITE_VERIFY                 0x3C

//******************************************************************************
//硬盘状态寄存器地址定义
#define IDE_Data 							0x0
#define IDE_Err_Features 					0x1
#define IDE_SecCount 						0x2
#define IDE_SecNumber 						0x3
#define IDE_CylinderL 						0x4
#define IDE_CylinderH 						0x5
#define IDE_Device_Head 					0x6
#define IDE_Status_Command				    0x7
//******************************************************************************

/*************************************************************
* D7   D6   D5   D4   D3   D2    D1   D0                     *
 BSY  DRDY DWF  DSC  DRQ  CORR  IDX  ERR                     *
*															 *
BSY: 驱动器忙;                                             *
DRDY:驱动器准备好;                                         *
DWF: 驱动器写失败;                                         *
DSC:  寻道结束;                                             *
DRQ: 请求服务,驱动器希望通过数据寄存器与CPU交换一字节数据	 *
CORR:当可以纠正的读错误发生时,该位置1,数据传输将继续进行  *
IDX: 收到综引信号;                                         *
ERR: 命令执行出错。                                         *
*************************************************************/
#define BSY  7
#define DRDY 6
#define DWF  5
#define DSC  4
#define DRQ  3
#define CORR 2
#define IDX  1
#define ERR  0

extern uint8 IDE_Init();
extern uint8 IDE_ReadOneSector(uint32 LBA,uint8 *buffer);
extern uint8 IDE_WriteOneSector(uint32 LBA,uint8 *buffer);




extern uint8 IDE_WaitBSY();
extern uint8 IDE_WaitDRQ();
extern void IDE_RegConvert(uint8 reg);
extern uint8 IDE_ReadREG(uint8 addr);
extern void IDE_WriteREG(uint8 addr, uint8 val);


#endif

⌨️ 快捷键说明

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