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

📄 sys_easyhost.c

📁 ARM读写U盘驱动软件包源程序
💻 C
字号:

#include  "config.h"

/** 以下根据硬件连接配置(EasyHOST1160开发板配置) **/
#define	HC_COMMAND_ADDRESS  0x82000002 		// ISP1160与CPU连接的地址(命令)
#define	HC_DATA_ADDRESS  	0x82000000 		// ISP1160与CPU连接的地址(数据)
/*
#define BUS_RD		(1<<12)
#define BUS_WR		(1<<13)
#define BUS_DATAL	(0x7f<<4)
#define BUS_DATAH	0x00ff8000
#define BUS_DATA	(BUS_DATAH|BUS_DATAL)
#define BUS_A1		(1<<25)
#define BUS_CS		(1<<27)
#define ISP1161_INT	(1<<14)

#define HcRESET		(0x80000000)	//与LPC2214的P1.23连接
*/

#define BUS_RD		(1<<1)			// P1.1
#define BUS_WR		(1<<27)			// 与P3.27连接
#define BUS_DATA	0x0000ffff		// P2.0~15
#define BUS_A1		(1<<1)			// P3.1
#define BUS_A2		(1<<2)			// P3.2
#define BUS_CS2		(1<<25)			// P3.25
#define ISP1161_INT	(1<<16)			// P0.16

#define BUS_CS		BUS_CS2			

#define BUS_CS0		1			// P1.0

#define HcRESET		(1<<23)	//与LPC2214的P0.23连接
#define HcWAKEUP	(1<<24)	//与LPC2214的P0.24连接
#define HcSUSPEND	(1<<25)	//与LPC2214的P0.25连接

//*************************************************************************
// 函数名称:Sys_WaitinUS
// 输入参数:time,等待时间
// 输出参数:无
// 功能描述:微秒延时,该延时只是操作系统起动前使用.
//*************************************************************************
void Sys_WaitinUS(unsigned int time)
{
	unsigned int loop;
	for(loop =time*30;loop>0 ;loop--)
	{
		continue;
	}
}

//*************************************************************************
// 函数名称:Sys_WaitinMS
// 输入参数:time,等待时间
// 输出参数:无
// 功能描述:毫秒延时,该延时只是操作系统起动前使用.
//*************************************************************************
void Sys_WaitinMS(unsigned int time)
{
	unsigned int loop;
	for(loop = time ; loop > 0 ;loop--)
	{
		Sys_WaitinUS(1000);	//delay 1ms, CPU dependant, OS independant
	}
}

//*************************************************************************
// 函数名称:disable
// 输入参数:无
// 输出参数:无
// 功能描述:禁止中断
//*************************************************************************
void disable(void)
{
	OS_ENTER_CRITICAL();
}

//*************************************************************************
// 函数名称:disable
// 输入参数:无
// 输出参数:无
// 功能描述:使能中断
//*************************************************************************
void enable(void)  
{
	OS_EXIT_CRITICAL();
}


//*************************************************************************
// 函数名称:outport
// 输入参数:addr,输出的地址
//			 data,输出的数据
// 输出参数:无
// 功能描述:向某地址写数据
//*************************************************************************
void outcommand( unsigned short  data)
{
//	* (volatile unsigned short *) HC_COMMAND_ADDRESS = data;
	IO3CLR = BUS_CS;
	IO3SET  = BUS_A1;					// 地址使能
	IO2DIR |= BUS_DATA;					// 使能数据输出
	
	IO2CLR = BUS_DATA;					// 数据清零
	
	IO2SET = data;

	IO3CLR  = BUS_WR;					// 写信号使能	
	IO3SET  = BUS_WR; 				

	IO3CLR  = BUS_A1;
	IO3SET  = BUS_CS;
}

//*************************************************************************
// 函数名称:outport
// 输入参数:addr,输出的地址
//			 data,输出的数据
// 输出参数:无
// 功能描述:向某地址写数据
//*************************************************************************
void outdata( unsigned short data)
{
//	* (volatile unsigned short *) HC_DATA_ADDRESS	= data;
	IO3CLR = BUS_CS;
	IO3CLR  = BUS_A1;					// 地址使能
	IO2DIR |= BUS_DATA;					// 使能数据输出
	
	IO2CLR = BUS_DATA;					// 数据清零
	
	IO2SET = data;

	IO3CLR  = BUS_WR;					// 写信号使能	
	IO3SET  = BUS_WR; 				

	IO3CLR  = BUS_A1;
	IO3SET  = BUS_CS;
}


//*************************************************************************
// 函数名称:inport
// 输入参数:addr,读取数据的地址
// 输出参数:data,返回的数据
// 功能描述:从指定地址读回一个字
//*************************************************************************
unsigned short indata(void)
{
//	return	*((volatile unsigned short*) HC_DATA_ADDRESS);
	uint16 data16;

	IO3CLR = BUS_CS;
	IO3CLR = BUS_A1;						// 地址使能
	IO2DIR &= ~BUS_DATA;				// 使能数据输入

	IO1CLR = BUS_RD;						// 写信号使能	
	data16 = IO2PIN;
	IO1SET = BUS_RD; 	

	IO3SET = BUS_CS;
	

	return data16&BUS_DATA;
}


//*************************************************************************
// 函数名称:Sys_Hc_RESET
// 输入参数:无
// 输出参数:无
// 功能描述:ISP116x硬件复位
//*************************************************************************
void Sys_Hc_RESET(void)
{
	IO0CLR = HcRESET;
	Sys_WaitinMS(200);
	IO0SET = HcRESET;
	Sys_WaitinMS(2);
}

//*************************************************************************
// 函数名称:Sys_Hc_SetWAKEUP
// 输入参数:无
// 输出参数:无
// 功能描述:唤醒ISP116x
//*************************************************************************
void Sys_Hc_SetWAKEUP(void)
{
	
}

//*************************************************************************
// 函数名称:Sys_Hc_GetSUSPEND
// 输入参数:无
// 输出参数:无
// 功能描述:获取ISP116x挂起状态
//*************************************************************************
uint8 Sys_Hc_GetSUSPEND(void)
{
	return 0;
}

//**************************************************************************
// 函数名称:SYS_ISP1160_IintIni
// 输入参数:无
// 输出参数:无
// 功能描述:LPC2200与ISP1160连接的中断服务函数。
//**************************************************************************
void ISP1160_Exception(void)
{
	isr_USB_Hc();			// 与ISP1160驱动接口的中断处理函数
	
/* 以下与用户硬件相关 */
/* 根据实际连接的中断引脚设置 */
	
	EXTINT = 0x01;			/*EasyHOST1160的ISP1160使用EINT0*/
	VICVectAddr=0;
}



//*************************************************************************
// 函数名称:Sys_DataOutW4HC
// 输入参数:
// 输出参数:
// 功能描述:硬件系统初始化,用户在这里编写与硬件相关的设置。
//*************************************************************************
void Sys_Hc_Ini(void)
{
	/********************************************************/
	/*        EasyHOST1160板ISP1160与LCP2214硬件连接        */
	/* D0~15 -- P2.0~P2.15(D0~15)							*/
	/* INT1  -- P0.16(EINT0)								*/
	/* A0~1  -- P3.1~2(A1~2)								*/
	/* CS	 --	P3.25(nCS2)									*/
	/* WR    -- P3.27(WE)									*/
	/* RD    -- P1.1(OE)									*/
	/* RSET  -- P0.23										*/
	/* WU	 -- P0.24										*/
	/* SUP	 -- P0.25										*/
	/* 以下为使用GPIO控制ISP1160配置						*/
	/********************************************************/
	PINSEL1 &= ~(3|(3<<14)|(3<<16)|(3<<18));	// 设置P0口相关引脚为GPIO
	PINSEL1 |=  0x00000001;						// 设置P0.16中断输入
	
	IO0DIR  &= (HcRESET+HcWAKEUP+HcWAKEUP);		// 选配置P0口所有相关引脚为输入
	IO0DIR  |= HcRESET+HcWAKEUP;				// 再配置输出引脚
	IO0SET  = HcRESET;
	IO0CLR	= HcWAKEUP;
	
	PINSEL2	= 0x00000034;						// 配置P1 P2 P3为GPIO
	
	IO1DIR |= BUS_RD+BUS_CS0; 					// 设置nCS0(板上的RAM片选)、RD为输出
	IO1SET  = BUS_RD+BUS_CS0;					// 初始化这些引脚为高
	
	IO2DIR &= ~BUS_DATA;						// 设置P2口相关引脚输入
	
	IO3DIR |= BUS_WR+BUS_CS+BUS_A1+BUS_A2;		// 设置P3口相关引脚输出
	IO3SET = BUS_WR+BUS_CS;				
	IO3CLR = BUS_A1+BUS_A2;
	
	

/*** 在执行ISP1160硬件复位之前,应初始化硬件配置 ***/
	Sys_Hc_RESET();				// 总线复位
}

⌨️ 快捷键说明

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