?? sysata.h
字號(hào):
#ifndef _SYSATA_H
#define _SYSATA_H
/****************************************************************************************/
/** 與用戶硬件相關(guān)部分,用戶需要改動(dòng) */
/****************************************************************************************/
#define ATA_RST 1<<24 /* CF卡復(fù)位引腳與LPC2210的P2.24連接 */
#define ATA_CD 1<<25 /* CF卡檢測(cè)引腳與LPC2210的P2.25連接 */
#define ATA_EN 0x83600000 /* 總線分配的地址段0x83600000~0x836fffff */
#define ATA_ALE 1<<20 /* 地址鎖存操制引腳與A20(P3.20)連接 */
#define ATA_RW 1<<19 /* 讀寫信號(hào)出輸使能引腳與A19(P3.19)連接 */
#define ATA_OUT 1<<18 /* 數(shù)據(jù)方向控制引腳與A18(P3.19)連接 */
#define ATA_CS1 1<<5 /* ATA總線的CS1由A5(P3.5)經(jīng)過74574鎖存輸出 */
#define ATA_CS0 1<<4 /* ATA總線的CS0由A4(P3.4)經(jīng)過74574鎖存輸出 */
#define ATA_A2 1<<3 /* ATA總線的A2由A3(P3.3)經(jīng)過74574鎖存輸出 */
#define ATA_A1 1<<2 /* ATA總線的A1由A2(P3.2)經(jīng)過74574鎖存輸出 */
#define ATA_A0 1<<1 /* ATA總線的A0由A1(P3.1)經(jīng)過74574鎖存輸出 */
#define ATA_REG_DATA ATA_CS1 /* 數(shù)據(jù)寄存器地址編碼 */
#define ATA_REG_ERR (ATA_CS1|ATA_A0) /* 讀錯(cuò)誤寄存器址編碼 */
#define ATA_REG_FEATURE (ATA_CS1|ATA_A0) /* 寫功能寄存器址編碼 */
#define ATA_REG_SECCNT (ATA_CS1|ATA_A1) /* 扇區(qū)計(jì)數(shù)器,地址編碼 */
#define ATA_REG_SECTOR (ATA_CS1|ATA_A1|ATA_A0) /* 扇區(qū)號(hào)寄存器址編碼 */
#define ATA_REG_CYLINDER_LOW (ATA_CS1|ATA_A2) /* 柱面低8位寄存器地址編碼 */
#define ATA_REG_CYLINDER_HIGH (ATA_CS1|ATA_A2|ATA_A0) /* 柱面高8位寄存器地址編碼 */
#define ATA_REG_DEVICE_HEAD (ATA_CS1|ATA_A2|ATA_A1) /* 設(shè)備磁頭寄存器地址編碼 */
#define ATA_REG_COMMAND (ATA_CS1|ATA_A2|ATA_A1|ATA_A0) /* 寫命令寄存器地址編碼 */
#define ATA_REG_STATUS (ATA_CS1|ATA_A2|ATA_A1|ATA_A0) /* 讀狀態(tài)寄存器地址編碼 */
#define ATA_REG_CONTROL (ATA_CS0|ATA_A2|ATA_A1) /* 寫控制寄存器地址編碼 */
#define ATA_REG_ASTATUS (ATA_CS0|ATA_A2|ATA_A1) /* 讀輔助狀態(tài)寄存器地址編碼 */
/*************************************************************************************************/
/*驅(qū)動(dòng)與硬件對(duì)ATA設(shè)備寄存器操作接口*/
#define GetData() SYS_PortIn(ATA_REG_DATA) /* 讀數(shù)據(jù)寄存器,與驅(qū)動(dòng)接口 */
#define SetData(x) SYS_PortOut(ATA_REG_DATA,x) /* 寫數(shù)據(jù)寄存器,與驅(qū)動(dòng)接口 */
#define GetERR() (uint8)SYS_PortIn(ATA_REG_ERR) /* 讀錯(cuò)誤寄存器,與驅(qū)動(dòng)接口 */
#define SetFeature(x) SYS_PortOut(ATA_REG_FEATURE,x) /* 寫特征寄存器,與驅(qū)動(dòng)接口 */
#define GetSECCNT() (uint8)SYS_PortIn(ATA_REG_SECCNT) /* 讀扇區(qū)計(jì)數(shù)寄存器,與驅(qū)動(dòng)接口 */
#define SetSECCNT(x) SYS_PortOut(ATA_REG_SECCNT|ATA_A1,x) /* 寫扇區(qū)計(jì)數(shù)寄存器,與驅(qū)動(dòng)接口 */
#define GetSector() (uint8)SYS_PortIn(ATA_REG_SECTOR) /* 讀扇區(qū)寄存器,與驅(qū)動(dòng)接口 */
#define SetSector(x) SYS_PortOut(ATA_REG_SECTOR,x) /* 寫扇區(qū)寄存器,與驅(qū)動(dòng)接口 */
#define GetCylinderLow() (uint8)SYS_PortIn(ATA_REG_CYLINDER_LOW) /* 讀柱面低8位寄存器,與驅(qū)動(dòng)接口 */
#define SetCylinderLow(x) SYS_PortOut(ATA_REG_CYLINDER_LOW,x) /* 寫柱面低8位寄存器,與驅(qū)動(dòng)接口 */
#define GetCylinderHigh() (uint8)SYS_PortIn(ATA_REG_CYLINDER_HIGH)/* 讀柱面高8位寄存器,與驅(qū)動(dòng)接口 */
#define SetCylinderHigh(x) SYS_PortOut(ATA_REG_CYLINDER_HIGH,x) /* 寫柱面高8位寄存器,與驅(qū)動(dòng)接口 */
#define GetDeviceHead() (uint8)SYS_PortIn(ATA_REG_DEVICE_HEAD) /* 讀設(shè)備磁頭寄存器,與驅(qū)動(dòng)接口 */
#define SetDeviceHead(x) SYS_PortOut(ATA_REG_DEVICE_HEAD,x) /* 寫設(shè)備磁頭寄存器,與驅(qū)動(dòng)接口 */
#define GetStatus() (uint8)SYS_PortIn(ATA_REG_STATUS) /* 讀狀態(tài)寄存器,與驅(qū)動(dòng)接口 */
#define SetCommand(x) SYS_PortOut(ATA_REG_COMMAND,x) /* 寫命令寄存器,與驅(qū)動(dòng)接口 */
#define GetAStatus() (uint8)SYS_PortIn(ATA_REG_ASTATUS) /* 讀輔助狀態(tài)寄存器,與驅(qū)動(dòng)接口 */
#define SetControl(x) SYS_PortOut(ATA_REG_CONTROL,x) /* 寫控制寄存器,與驅(qū)動(dòng)接口 */
/*硬件相關(guān)函數(shù)*/
void SYS_BusIni(void); /* ATA總線初始化處理函數(shù) */
uint16 SYS_PortIn(uint32 reg); /* 從ATA設(shè)備指定的寄存器讀出一個(gè)字 */
void SYS_PortOut(uint32 reg,uint16 data); /* 從ATA設(shè)備指定的寄存器寫入一個(gè)字 */
void SYS_WaitInUS(uint32 times); /* 延時(shí)程序 */
void SYS_IdeHardReset(void); /* ATA設(shè)備硬件復(fù)位處理函數(shù) */
uint8 SYS_HaveCard(void); /* 檢測(cè)CF卡是否存在 */
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -