📄 sys_easyhost.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 + -