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

📄 sysata.h

📁 基于ZLGFS的BOOT,可以通过源码学习BOOT的运行流程
💻 H
字号:

#ifndef _SYSATA_H
#define _SYSATA_H

/****************************************************************************************/
/**	与用户硬件相关部分,用户需要改动													*/
/****************************************************************************************/
#define ATA_RST		1<<24						/* CF卡复位引脚与LPC2210的P2.24连接         */
#define ATA_CD		1<<25						/* CF卡检测引脚与LPC2210的P2.25连接         */
#define ATA_EN		0x83600000					/* 总线分配的地址段0x83600000~0x836fffff    */

#define ATA_ALE		1<<20						/* 地址锁存操制引脚与A20(P3.20)连接         */
#define ATA_RW		1<<19						/* 读写信号出输使能引脚与A19(P3.19)连接     */
#define ATA_OUT		1<<18						/* 数据方向控制引脚与A18(P3.19)连接         */
#define ATA_CS1		1<<5						/* ATA总线的CS1由A5(P3.5)经过74574锁存输出  */
#define ATA_CS0		1<<4						/* ATA总线的CS0由A4(P3.4)经过74574锁存输出  */
#define ATA_A2		1<<3						/* ATA总线的A2由A3(P3.3)经过74574锁存输出   */
#define ATA_A1		1<<2						/* ATA总线的A1由A2(P3.2)经过74574锁存输出   */
#define ATA_A0		1<<1						/* ATA总线的A0由A1(P3.1)经过74574锁存输出   */

#define	ATA_REG_DATA          	ATA_CS1							/* 数据寄存器地址编码		*/ 
#define	ATA_REG_ERR           	(ATA_CS1|ATA_A0)				/* 读错误寄存器址编码		*/ 
#define	ATA_REG_FEATURE       	(ATA_CS1|ATA_A0)				/* 写功能寄存器址编码		*/ 
#define	ATA_REG_SECCNT        	(ATA_CS1|ATA_A1)				/* 扇区计数器,地址编码		*/ 
#define	ATA_REG_SECTOR        	(ATA_CS1|ATA_A1|ATA_A0)			/* 扇区号寄存器址编码		*/ 
#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)			/* 设备磁头寄存器地址编码	*/ 
#define	ATA_REG_COMMAND       	(ATA_CS1|ATA_A2|ATA_A1|ATA_A0)	/* 写命令寄存器地址编码		*/ 
#define	ATA_REG_STATUS        	(ATA_CS1|ATA_A2|ATA_A1|ATA_A0)	/* 读状态寄存器地址编码		*/ 
#define	ATA_REG_CONTROL       	(ATA_CS0|ATA_A2|ATA_A1)			/* 写控制寄存器地址编码		*/ 
#define	ATA_REG_ASTATUS       	(ATA_CS0|ATA_A2|ATA_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|ATA_A1,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设备指定的寄存器读出一个字 */ 
void 		SYS_PortOut(uint32 reg,uint16 data);		/* 从ATA设备指定的寄存器写入一个字 */ 
void 		SYS_WaitInUS(uint32 times);					/* 延时程序						   */
void 		SYS_IdeHardReset(void);						/* ATA设备硬件复位处理函数		   */
uint8 		SYS_HaveCard(void);							/* 检测CF卡是否存在				   */

#endif

⌨️ 快捷键说明

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