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

📄 sysata.c

📁 ZLG的LPC2220完整读取CF卡和硬盘的源程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			sysata.c
** Last modified Date:  2005-05-13
** Last Version:		1.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Created by:			Zhoulishan
** Created date:		2005-05-13
** Version:				1.0
** Descriptions:		MagicARM2200 Driver
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/

#include "config.h"

/*********************************************************************************************************
** 函数名称: SYS_BusIni
** 功能描述: ATA总线初始化
** 输   入: 无
** 输   出: 无
** 全局变量:  
** 调用模块: 
********************************************************************************************************/
void SYS_BusIni(void)
{
	//PINSEL1 &= ~((3<<((21-16)*2))|(3<<((22-16)*2)));
	IO2DIR  |= ATA_RST;			// 配置复位引脚为输出
	IO2DIR  &= ~ATA_CD;			// 配置检测卡引脚为输入
}

/*********************************************************************************************************
** 函数名称: SYS_WaitInUS
** 功能描述: 延时等级约1微秒函数,该函数根据系统时间不同与不同,但不应少到1微秒。
** 输   入: times,延时时间等级
** 输   出: 无
** 全局变量:
** 调用模块: 
********************************************************************************************************/
void SYS_WaitInUS(uint32 times)
{	uint32 c;
	for(;0<times;times--)
		for(c=0;c<4;c++);
}

/*********************************************************************************************************
** 函数名称: ATA_HaveCard
** 功能描述: 判断CF卡是否连接到,CF卡的CD1、CD2引脚与GND直接相接,可以通过该引脚判断CF卡是否存在
**			 (对于IDE硬盘也有也多共地的引脚,也可以像CF卡那样检测但是这点ATA规范中并没有说明)。
**			 如果硬件上没有相关的检测,则应一直返回TRUE。
** 输   入: 无
** 输   出: TRUE,如果有设备存在,不管设备是主或是从,或可以返回TRUE(1);
**			 FALSE,如果设备不存在,即返回FALSE(0)
** 全局变量: 
** 调用模块: 
********************************************************************************************************/
uint8 SYS_HaveCard(void)
{

//#define	DEVICE_IS_ATTACHED 	IO0PIN&ATA_CD		/*硬件设备检测,设备是否存在*/
//	if(DEVICE_IS_ATTACHED)			/*如果DEVICE_IS_ATTACHED为0却有设备存在,为1即没有*/
//		return FALSE;				/*DEVICE_IS_ATTACHED不为0,没有设备存在,返回FALSE*/
//	else
		return TRUE;				/*DEVICE_IS_ATTACHED为0,有设备存在,返回TRUE*/
// 注意:如果只操作IDE硬盘,该函数无效,必须使该函数总返回TRUE。
}


/*********************************************************************************************************
** 函数名称: SYS_PortIn
** 功能描述: 从ATA设备指定的寄存器中读出一个字的数据,有些寄存器只有一个字节数有效。
** 输   入: reg 寄存器名称
** 输   出: 读出的数据
** 全局变量:
** 调用模块: 
********************************************************************************************************/
uint16 SYS_PortIn(uint32 reg)
{
	uint16 res ;

	volatile uint16 *start; 
	volatile uint16 *data; 
	volatile uint16 *end; 

	start = (volatile uint16 *)(ATA_NON|ATA_EN|ATA_ALE|reg);
	data = (volatile uint16 *) (ATA_NON|ATA_EN|ATA_RW|reg);
	end = (volatile uint16 *)  (ATA_NON|ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0);

    *start = 0;
    res = *data;
    *end = 0;
	
	return res;
}


/*********************************************************************************************************
** 函数名称: SYS_PortOut
** 功能描述: 向ATA设备指定的寄存器中写入一个字的数据,有些寄存器只有一个字节数有效。
** 输   入: reg 寄存器名称
** 输   出: 无
** 全局变量:
** 调用模块: 
********************************************************************************************************/
void SYS_PortOut(uint32 reg, uint16 data)
{	
	volatile uint16 *start; 
	volatile uint16 *mydata; 
	volatile uint16 *end; 

	start = (volatile uint16 *) (ATA_NON|ATA_EN|ATA_ALE|ATA_OUT|reg);
	mydata = (volatile uint16 *)(ATA_NON|ATA_EN|ATA_RW|reg);
	end = (volatile uint16 *)   (ATA_NON|ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0);
 
    *start = 0;
    *mydata = data;
    *end = 0;

}



/*********************************************************************************************************
** 函数名称: SYS_IdeHardReset
** 功能描述: ATA设备硬件复位
** 输   入: 无
** 输   出: 无
** 全局变量: 
** 调用模块: SYS_WaitInUS(),等待微秒函数。
********************************************************************************************************/
void SYS_IdeHardReset(void)
{
    IO2CLR = ATA_RST; 					/*复位引脚置低    */
    SYS_WaitInUS(30); 					/*延时大于25微秒  */
  	IO2SET = ATA_RST; 					/*复位引脚置高    */

   	SYS_WaitInUS(5000);  				/*延时大于2毫秒,设备通常在480ms内完成硬件初始化和自诊断*/		
}

⌨️ 快捷键说明

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