📄 sysata.h
字号:
#ifndef _SYSATA_H
#define _SYSATA_H
/****************************************************************************************/
/** 与用户硬件相关部分,用户需要改动 */
/****************************************************************************************/
/* EeayARM2200和IDE接口连接 */
#ifdef ATA_BUS_AT_8bit /*8位总线*/
#define ATA_DATA 0x00ff0000 /* EeayARM2200和IDE接口直接相连,p2.16~p2.23 */
#else /*16位总线*/
#define ATA_DATA 0xffff0000 /* EeayARM2200和IDE接口直接相连,p2.16~p2.31 */
#endif
#define IDE_A0 (1<<16) /* EeayARM2200和IDE接口直接相连,p1.16 */
#define IDE_A1 (1<<17) /* EeayARM2200和IDE接口直接相连,p1.17 */
#define IDE_A2 (1<<18) /* EeayARM2200和IDE接口直接相连,p1.18 */
#define IDE_CS0 (1<<19) /* EeayARM2200和IDE接口直接相连,p1.19 */
#define IDE_CS1 (1<<20) /* EeayARM2200和IDE接口直接相连,p1.20 */
#define IDE_DMACK (1<<21) /* EeayARM2200和IDE接口直接相连,p1.21 */
#define IDE_CSEL (1<<23) /* EeayARM2200和IDE接口直接相连,p1.23 */
#define IDE_IOCS16 (1<<24) /* EeayARM2200和IDE接口直接相连,p1.24 */
#define IDE_PDIAG (1<<25) /* EeayARM2200和IDE接口直接相连,p1.25 */
#define IDE_RST (1<<17) /* EeayARM2200和IDE接口直接相连,p0.17 */
#define IDE_DMAREQ (1<<18) /* EeayARM2200和IDE接口直接相连,p0.18 */
#define IDE_WR (1<<19) /* EeayARM2200和IDE接口直接相连,p0.19 */
#define IDE_INTRQ (1<<20) /* EeayARM2200和IDE接口直接相连,p0.20 */
#define IDE_RD (1<<21) /* EeayARM2200和IDE接口直接相连,p0.21 */
/* EeayARM2200 */
/*GPIO方向与*/
//#define OUT_PUT_P0 (IDE_RST + IDE_WR + IDE_RD) /*P0口所有PGIO输出的引脚*/
//#define Read_Write_at_P0 (IDE_WR + IDE_RD) /*P0口读写输出的引脚*/
//#define IN_PUT_P0 (IDE_DMAREQ + IDE_INTRQ) /*P0口所有PGIO输入的引脚*/
//#define MASK_P0 (~(IDE_RST + IDE_WR + IDE_RD)) /**/
//#define OUT_PUT_P1 (IDE_A0 + IDE_A1 +IDE_A2 + IDE_CS0 + IDE_CS1 + IDE_CSEL)
#define Addr_CS_at_P1 (IDE_A0 + IDE_A1 +IDE_A2 + IDE_CS0 + IDE_CS1)
//#define IN_PUT_P1 (IDE_DMACK + IDE_IOCS16 + IDE_PDIAG)
//#define MASK_P1 (~(IDE_A0 + IDE_A1 +IDE_A2 + IDE_CS0 + IDE_CS1 + IDE_CSEL))
//#define OUT_PUT_P2 ATA_DATA
#define MASK_DATA (~ATA_DATA)
/*GPIO引脚影射寄存器地址*/
#define ATA_REG_DATA IDE_CS1 /*数据寄存器*/
#define ATA_REG_ERR (IDE_CS1 + IDE_A0) /*读错误寄存器*/
#define ATA_REG_FEATURE (IDE_CS1 + IDE_A0) /*写功能寄存器*/
#define ATA_REG_SECCNT (IDE_CS1 + IDE_A1) /*扇区计数器*/
#define ATA_REG_SECTOR (IDE_CS1 + IDE_A1 + IDE_A0) /*扇区号*/
#define ATA_REG_CYLINDER_LOW (IDE_CS1 + IDE_A2) /*柱面低8位*/
#define ATA_REG_CYLINDER_HIGH (IDE_CS1 + IDE_A2 + IDE_A0) /*柱面高8位*/
#define ATA_REG_DEVICE_HEAD (IDE_CS1 + IDE_A2 + IDE_A1) /*选择主从,模式,磁头*/
#define ATA_REG_COMMAND (IDE_CS1 + IDE_A2 + IDE_A1 + IDE_A0)/*写命令寄存器*/
#define ATA_REG_STATUS (IDE_CS1 + IDE_A2 + IDE_A1 + IDE_A0)/*读状态寄存器*/
#define ATA_REG_CONTROL (IDE_CS0 + IDE_A2 + IDE_A1) /*写控制寄存器*/
#define ATA_REG_ASTATUS (IDE_CS0 + IDE_A2 + IDE_A1) /*读辅助状态寄存器*/
/*************************************************************************************************/
/*驱动与硬件对ATA设备寄存器操作接口*/
#define GetData() SYS_PortIn(ATA_REG_DATA) /*读数据寄存器,与驱动接口*/
#define SetData(x) SYS_PortOut(ATA_REG_DATA,x) /*写数据寄存器,与驱动接口*/
#define GetERR() SYS_PortIn(ATA_REG_ERR) /*读错误寄存器,与驱动接口*/
#define SetFeature(x) SYS_PortOut(ATA_REG_FEATURE,x) /*写特征寄存器,与驱动接口*/
#define GetSECCNT() SYS_PortIn(ATA_REG_SECCNT) /*读扇区计数寄存器,与驱动接口*/
#define SetSECCNT(x) SYS_PortOut(ATA_REG_SECCNT,x) /*写扇区计数寄存器,与驱动接口*/
#define GetSector() SYS_PortIn(ATA_REG_SECTOR) /*读扇区寄存器,与驱动接口*/
#define SetSector(x) SYS_PortOut(ATA_REG_SECTOR,x) /*写扇区寄存器,与驱动接口*/
#define GetCylinderLow() SYS_PortIn(ATA_REG_CYLINDER_LOW) /*读柱面低8位寄存器,与驱动接口*/
#define SetCylinderLow(x) SYS_PortOut(ATA_REG_CYLINDER_LOW,x) /*写柱面低8位寄存器,与驱动接口*/
#define GetCylinderHigh() SYS_PortIn(ATA_REG_CYLINDER_HIGH) /*读柱面高8位寄存器,与驱动接口*/
#define SetCylinderHigh(x) SYS_PortOut(ATA_REG_CYLINDER_HIGH,x) /*写柱面高8位寄存器,与驱动接口*/
#define GetDeviceHead() SYS_PortIn(ATA_REG_DEVICE_HEAD) /*读设备磁头寄存器,与驱动接口*/
#define SetDeviceHead(x) SYS_PortOut(ATA_REG_DEVICE_HEAD,x) /*写设备磁头寄存器,与驱动接口*/
#define GetStatus() SYS_PortIn(ATA_REG_STATUS) /*读状态寄存器,与驱动接口*/
#define SetCommand(x) SYS_PortOut(ATA_REG_COMMAND,x) /*写命令寄存器,与驱动接口*/
#define GetAStatus() SYS_PortIn(ATA_REG_ASTATUS) /*读辅助状态寄存器,与驱动接口*/
#define SetControl(x) SYS_PortOut(ATA_REG_CONTROL,x) /*写控制寄存器,与驱动接口*/
/*硬件相关函数*/
void SYS_BusIni(void); /*ATA总线初始化函数*/
uint16 SYS_PortIn(uint32 reg); /*从ATA设备指定的寄存器读出一个字(2字节)*/
void SYS_PortOut(uint32 reg,uint16 data); /*从ATA设备指定的寄存器写入一个字*/
void SYS_IdeHardReset(void); /*硬件复位*/
uint8 SYS_HaveCard(void); /*检测CF卡是否存在*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -