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

📄 sysata.h

📁 ZLG/CF驱动接口函数实验,包括宏定义,函数原形及总线初始化函数,开关中断函数,读寄存器函数,写寄存器函数等
💻 H
字号:

#ifndef _SYSATA_H
#define _SYSATA_H

/****************************************************************************************/
/**	与用户硬件相关部分,用户需要改动													*/
/****************************************************************************************/

#define		ATA_DATA		0xffff0000	/* EeayARM2200和IDE接口直接相连,p2.16~p2.31 */

#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		Addr_CS_at_P1 			(IDE_A0 + IDE_A1 +IDE_A2 + IDE_CS0 + IDE_CS1)
#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()			(uint8)SYS_PortIn(ATA_REG_ERR)				/*读错误寄存器,与驱动接口*/
#define		SetFeature(x)		SYS_PortOut(ATA_REG_FEATURE,x)		/*写特征寄存器,与驱动接口*/

#define		GetSECCNT()			(uint8)SYS_PortIn(ATA_REG_SECCNT)			/*读扇区计数寄存器,与驱动接口*/
#define		SetSECCNT(x)		SYS_PortOut(ATA_REG_SECCNT,x)		/*写扇区计数寄存器,与驱动接口*/

#define		GetSector()			(uint8)SYS_PortIn(ATA_REG_SECTOR)			/*读扇区寄存器,与驱动接口*/
#define		SetSector(x)		SYS_PortOut(ATA_REG_SECTOR,x)		/*写扇区寄存器,与驱动接口*/

#define		GetCylinderLow()	(uint8)SYS_PortIn(ATA_REG_CYLINDER_LOW)	/*读柱面低8位寄存器,与驱动接口*/
#define		SetCylinderLow(x)	SYS_PortOut(ATA_REG_CYLINDER_LOW,x)	/*写柱面低8位寄存器,与驱动接口*/

#define		GetCylinderHigh()	(uint8)SYS_PortIn(ATA_REG_CYLINDER_HIGH)	/*读柱面高8位寄存器,与驱动接口*/
#define		SetCylinderHigh(x)	SYS_PortOut(ATA_REG_CYLINDER_HIGH,x)/*写柱面高8位寄存器,与驱动接口*/

#define		GetDeviceHead()		(uint8)SYS_PortIn(ATA_REG_DEVICE_HEAD)		/*读设备磁头寄存器,与驱动接口*/
#define		SetDeviceHead(x)	SYS_PortOut(ATA_REG_DEVICE_HEAD,x)	/*写设备磁头寄存器,与驱动接口*/

#define		GetStatus()			(uint8)SYS_PortIn(ATA_REG_STATUS)			/*读状态寄存器,与驱动接口*/
#define		SetCommand(x)		SYS_PortOut(ATA_REG_COMMAND,x)		/*写命令寄存器,与驱动接口*/

#define		GetAStatus()		(uint8)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_WaitInUS(uint32 times);								/*延时程序*/
void 		SYS_IdeHardReset(void);									/*硬件复位*/
uint8 		SYS_HaveCard(void);										/*检测CF卡是否存在*/

#endif

⌨️ 快捷键说明

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