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

📄 sysata.h

📁 周立功ARM7试验箱
💻 H
字号:

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

/*    LPC2200和IDE接口连接        	*/
#ifdef ATA_BUS_AT_8bit		/*8位总线*/
#define		ATA_DATA		0x00ff0000	/* LPC2200和IDE接口直接相连,p2.16~p2.23 */
#else						/*16位总线*/
#define		ATA_DATA		0xffff0000	/* LPC2200和IDE接口直接相连,p2.16~p2.31 */
#endif
#define    	IDE_A0    	 	(1<<16)    	/* LPC2200和IDE接口直接相连,p1.16 */
#define    	IDE_A1   	   	(1<<17)    	/* LPC2200和IDE接口直接相连,p1.17 */
#define    	IDE_A2      	(1<<18)    	/* LPC2200和IDE接口直接相连,p1.18 */
#define    	IDE_CS0     	(1<<19)    	/* LPC2200和IDE接口直接相连,p1.19 */
#define    	IDE_CS1     	(1<<20)   	/* LPC2200和IDE接口直接相连,p1.20 */

#define    	IDE_RST    		(1<<21)		/* LPC2200和IDE接口直接相连,p1.21 */
#define    	IDE_WR      	(1<<22)		/* LPC2200和IDE接口直接相连,p1.22 */
#define    	IDE_RD      	(1<<23)		/* LPC2200和IDE接口直接相连,p1.23 */

#define		IDE_INTRQ		(1<<7)		/* LPC2200和IDE接口直接相连,p0.7 */

#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_IdeHardReset(void);						/*硬件复位*/
uint8 	SYS_HaveCard(void);							/*检测CF卡是否存在*/



#endif

⌨️ 快捷键说明

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