📄 sysata.h
字号:
#ifndef _SYSATA_H
#define _SYSATA_H
#include "def.h"
/****************************************************************************************/
/** 与用户硬件相关部分,用户需要改动 */
/****************************************************************************************/
// CF_CARD PIN[26] C\D\(卡插入检测) S3C44B0X[ GPE3 ]
// CF_CARD PIN[42] IORDY(IO准备好) S3C44B0X[ GPE4 ]
// CF_CARD 电源控制使能 S3C44B0X[ GPB5 ]
#define CFCard_Power(a) ( rPDATB = ( rPDATB&(~(1<<5)) ) | ((a&1)<<5) )
#define CFCard_Dected ( (rPDATE>>3) & 0x1 )
#define CFCard_Ready ( (rPDATE>>4) & 0x1 )
//****************************************************************************************
//CF卡的控制逻辑
//assign CF_CS1 = ! ( (!nGCS2) && (!ADDR[23]) && ADDR[22] && ADDR[21] && (!ADDR[20]) ) ;
//assign CF_CS2 = ! ( (!nGCS2) && (!ADDR[23]) && ADDR[22] && (!ADDR[21]) && ADDR[20] ) ;
//****************************************************************************************
/* S3C44B0X和CF Card接口连接 16位总线模式*/
#define IDE_A0 (1<<1) /* EeayARM2200和IDE接口直接相连,p1.16 */
#define IDE_A1 (1<<2) /* EeayARM2200和IDE接口直接相连,p1.17 */
#define IDE_A2 (1<<3) /* EeayARM2200和IDE接口直接相连,p1.18 */
#define IDE_CS0 ( (0x4000000)|(0x6<<20) ) /* EeayARM2200和IDE接口直接相连,p1.19 */
#define IDE_CS1 ( (0x4000000)|(0x5<<20) ) /* EeayARM2200和IDE接口直接相连,p1.20 */
/*GPIO引脚影射寄存器地址*/
#define ATA_REG_DATA IDE_CS0 /*数据寄存器*/
#define ATA_REG_ERR (IDE_CS0 + IDE_A0) /*读错误寄存器*/
#define ATA_REG_FEATURE (IDE_CS0 + IDE_A0) /*写功能寄存器*/
#define ATA_REG_SECCNT (IDE_CS0 + IDE_A1) /*扇区计数器*/
#define ATA_REG_SECTOR (IDE_CS0 + IDE_A1 + IDE_A0) /*扇区号*/
#define ATA_REG_CYLINDER_LOW (IDE_CS0 + IDE_A2) /*柱面低8位*/
#define ATA_REG_CYLINDER_HIGH (IDE_CS0 + IDE_A2 + IDE_A0) /*柱面高8位*/
#define ATA_REG_DEVICE_HEAD (IDE_CS0 + IDE_A2 + IDE_A1) /*选择主从,模式,磁头*/
#define ATA_REG_COMMAND (IDE_CS0 + IDE_A2 + IDE_A1 + IDE_A0)/*写命令寄存器*/
#define ATA_REG_STATUS (IDE_CS0 + IDE_A2 + IDE_A1 + IDE_A0)/*读状态寄存器*/
#define ATA_REG_CONTROL (IDE_CS1 + IDE_A2 + IDE_A1) /*写控制寄存器*/
#define ATA_REG_ASTATUS (IDE_CS1 + IDE_A2 + IDE_A1) /*读辅助状态寄存器*/
/*************************************************************************************************/
/*驱动与硬件对ATA设备寄存器操作接口*/
#define GetData() inportw(ATA_REG_DATA) /*读数据寄存器,与驱动接口*/
#define SetData(x) outportw(x,ATA_REG_DATA) /*写数据寄存器,与驱动接口*/
#define GetERR() inportw(ATA_REG_ERR) /*读错误寄存器,与驱动接口*/
#define SetFeature(x) outportw(x,ATA_REG_FEATURE) /*写特征寄存器,与驱动接口*/
#define GetSECCNT() inportw(ATA_REG_SECCNT) /*读扇区计数寄存器,与驱动接口*/
#define SetSECCNT(x) outportw(x,ATA_REG_SECCNT) /*写扇区计数寄存器,与驱动接口*/
#define GetSector() inportw(ATA_REG_SECTOR) /*读扇区寄存器,与驱动接口*/
#define SetSector(x) outportw(x,ATA_REG_SECTOR) /*写扇区寄存器,与驱动接口*/
#define GetCylinderLow() inportw(ATA_REG_CYLINDER_LOW) /*读柱面低8位寄存器,与驱动接口*/
#define SetCylinderLow(x) outportw(x,ATA_REG_CYLINDER_LOW) /*写柱面低8位寄存器,与驱动接口*/
#define GetCylinderHigh() inportw(ATA_REG_CYLINDER_HIGH) /*读柱面高8位寄存器,与驱动接口*/
#define SetCylinderHigh(x) outportw(x,ATA_REG_CYLINDER_HIGH) /*写柱面高8位寄存器,与驱动接口*/
#define GetDeviceHead() inportw(ATA_REG_DEVICE_HEAD) /*读设备磁头寄存器,与驱动接口*/
#define SetDeviceHead(x) outportw(x,ATA_REG_DEVICE_HEAD) /*写设备磁头寄存器,与驱动接口*/
#define GetStatus() inportw(ATA_REG_STATUS) /*读状态寄存器,与驱动接口*/
#define SetCommand(x) outportw(x,ATA_REG_COMMAND) /*写命令寄存器,与驱动接口*/
#define GetAStatus() inportw(ATA_REG_ASTATUS) /*读辅助状态寄存器,与驱动接口*/
#define SetControl(x) outportw(x,ATA_REG_CONTROL) /*写控制寄存器,与驱动接口*/
/*硬件相关函数*/
void SYS_BusIni(void); /*ATA总线初始化函数*/
void SYS_IdeHardReset(void); /*硬件复位*/
U8 SYS_HaveCard(void); /*检测CF卡是否存在*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -