📄 d13hal.c
字号:
/*********************************************************************************************************
** KAIXIN Co.,Ltd.
**
**--------------文件信息-------------------------------------------------------------------------------
** 文件名: D13HAL.c
** 修改日期: 2007-8-8
** 版本: V1.0
** 描述: ISP61A1 设备端驱动程序 硬件抽象层
**
**------------------------------------------------------------------------------------------------------
** 创建: 安 宁
** 创建日期: 2007-8-8
** 版本: V1.0
** 描述: 原始版本
********************************************************************************************************/
#include "config.h"
#include "D13Config.h"
#include "D13CI.h"
#include "D13Driver.h"
#include "NFLASH.h"
/*********************************************************************************************************
** 函数名称 :uint16 USBRD(unsigned char pageadd)
** 函数功能 :ISP1161A1总线读操作
**********************************************************************************************************/
/*********************************
** ADD =0x00 HC DAT
** ADD =0x01 HC CMD
** ADD =0x02 DC DAT
** ADD =0x03 DC CMD
*********************************/
uint16 USBRD(INT8U ADD)
{
INT16U temp;
INT32U addr;
addr=(ADD&0x0000000F)<<24;
FIO2MASK= 0xFFFFFFD4; //管脚屏蔽
FIO3MASK= 0xF8FFFFFF;
FIO4MASK= 0x7FFF0000;
FIO4DIRL= 0x0000; //管脚方向:输入
//构造时序
FIO3PIN =0x00000000; //port3置0
FIO4PINU=0x8000; //cs置1,禁止1161A1
FIO2PIN =0x0000002b; //置RD,ER,DACK1,2为高电平
FIO3PIN =addr;
FIO4PINU=0x8000;
FIO2PIN =0x0000002b;
FIO3PIN =addr;
FIO4PINU=0x0000;
FIO2PIN =0x0000002a;
FIO3PIN =addr;
FIO4PINU=0x0000;
FIO2PIN =0x0000002a;
FIO3PIN =addr;
FIO4PINU=0x0000;
FIO2PIN =0x0000002a;
temp=FIO4PINL;
FIO3PIN =addr;
FIO4PINU=0x0000;
FIO2PIN =0x0000002a;
FIO2PIN =0x0000002b;
FIO4PINU=0x8000;
FIO3PIN =0x00000000;
// FIO4PINU=0x0000; //测试用
FIO2MASK= 0x00000000; //管脚屏蔽 测试用
FIO3MASK= 0x00000000;
FIO4MASK= 0x00000000;
return temp ;
}
/*********************************************************************************************************
** 函数名称 :void BUSWR(unsigned char pageadd)
** 函数功能 :ISP1161A1总线写操作
*********************************************************************************************************/
void USBWR(INT8U ADD,INT16U DAT)
{
INT32U addr;
addr=(ADD&0x0000000F)<<24;
FIO2MASK= 0xFFFFFFD4; //管脚屏蔽
FIO3MASK= 0xF8FFFFFF;
FIO4MASK= 0x7FFF0000;
FIO4DIRL= 0xFFFF; //管脚方向:输出
//构造时序
//FIO3PIN =0x00000000|addr;
FIO4PINU=0x8000;
FIO2PIN =0x0000002b;
FIO3PIN =addr;
FIO4PINU=0x8000;
FIO2PIN =0x0000002b;
FIO4PINL=DAT;
FIO4PINU=0x0000;
FIO2PIN =0x00000029;
FIO3PIN =addr;
FIO4PINL=DAT;
FIO4PINU=0x0000;
FIO2PIN =0x00000029;
FIO3PIN =addr;
FIO4PINL=DAT;
FIO2PIN =0x0000002b;
FIO4PINU=0x8000;
FIO3PIN =addr;
FIO4PINL=DAT;
FIO2PIN =0x0000002b;
FIO4PINU=0x8000;
FIO4PINL=0x0000;
// FIO4PINU=0x0000; //测试用
FIO2MASK= 0x00000000; //管脚屏蔽 测试用
FIO3MASK= 0x00000000;
FIO4MASK= 0x00000000;
}
/************************************************************************************************************
** 函数名称: void Init_D13Port(void) Name: void Init_D13Port(void)
** 功能描述: 初始化D13与LPC2200的连接端口 Function: Initialize the connected ports between D13 and LPC2200
** 输 入: 无 Input: NULL
** 输 出: 无 Output: NULL
*************************************************************************************************************/
void Init_D13Port(void)
{
INT16U i;
for(i = 0;i < 256;i++)
{
BlockMap[i] = 0;
}
//和USB相关的端口:
PINSEL4 = 0x0A900000; //管脚功能选择
PINSEL5 = 0x00000000;
PINSEL6 = 0x00000000;
PINSEL7 = 0x00000000;
PINSEL8 = 0x00000000;
PINSEL9 = 0x0F000000;
// FIO4SET = 0x01000000;
//和FLASH相关的端口
PINSEL3 = 0x00000035;
PINSEL1 &= ~(3<<((FRB_NUM-16) * 2)); //初始化FRB 为GPIO
//和USB相关的端口:
FIO2DIR = 0xFFFFF16B; //管脚方向:输出
FIO3DIR = 0xFFFFFFFF; //管脚方向:输出
FIO4DIRL= 0x0000; //管脚方向:输入
FIO4DIRU= 0xFFFF; //管脚方向:输出
//和FLASH相关的端口:
FIO0DIR &=~(1<<FRB_NUM); //设定FRB 引脚为输入口
FIO1DIRU = 0xFFFF; //设定端口P1.16-1.31为输出口
//SET_FRB();//其实这一步没有用 对输入端口写入1无效
SET_FCE();
CLR_FCLE();
CLR_FALE();
SET_FWE();
SET_FRE();
//CheckBlock();
//*************************//
SET_USBCS();
// DelayNS(500); //测试用
//BeepFunc (); //测试用
CLR_USBCS();
//INIT_INTD13(); //INT 为中断输入口 configure INT is interrupt input
PINSEL0 &= 0xFFFFFCFF;
PINSEL0 |= 0x0300;
//DelayNS(500); //测试用
//BeepFunc (); //测试用
// SET_USBCS();
// DelayNS(500); //测试用
// BeepFunc (); //测试用
//USBRST_GPIO(); //使能 RESET 为通用IO口 enable RESET is GPIO
//SUSP_GPIO(); //使能 SUSPEND 为通用IO口 enable SUSPEND is GPIO
//WKUP_GPIO();
//USBRST_OUT(); //RESET 为输出IO口 configure RESET is output
//SUSP_IN(); //SUSPEND 为输入IO口 configure SUSPEND is input
//WKUP_OUT(); //WAKEUP 为输出IO口 configure WAKEUP is output
}
/*************************************************************************************************************
** 函数名称: void Rst_D13(void) Name: void Rst_D13(void)
** 功能描述: 复位D13 Function: Reset ISP1181B
** 输 入: 无 Input: NULL
** 输 出: 无 Output: NULL
**************************************************************************************************************/
void Rst_D13(void)
{
INT32U i;
CLR_USBRST(); //RESET 置0 clear RESET
for(i = 0;i < 0xffff; i++); //软件延时 software delay
SET_USBRST(); //RESET 置1 set RESET
CLR_WKUP(); //WAKEUP 置0 clear WAKEUP
D13_LockDevice(0xAA37);
//DelayNS(500); //测试用
//BeepFunc (); //测试用
}
/*************************************************************************************************************
** 函数名称: void bus_delay(void) Name: void Rst_D13(void)
** 功能描述: 总线延时 Function: bus delay
** 输 入: 无 Input: NULL
** 输 出: 无 Output: NULL
**************************************************************************************************************/
void delay(void)
{
int i = 1;
while(i != 0){i--;};
}
/*************************************************************************************************************
** 函数名称: void outportc(INT16U cmd) Name: void outportc(INT8U Data)
** 功能描述: 输出命令 Function: output command
** 输 入: INT8U Data: 命令字节 Input: INT8U Data: command byte
** 输 出: 无 Output: NULL
**************************************************************************************************************/
void outportc(INT16U cmd)
{
USBWR(0x03,cmd); //发送命令 send command
}
/************************************************************************************************************
** 函数名称: void outportd(INT8U Data) Name: void outportd(INT8U Data)
** 功能描述: 输出数据 Function: output data
** 输 入: INT8U Data: 数据字节 Input: INT8U Data: data byte
INT16U Data: 数据字 INT16U Data: data word
** 输 出: 无 Output: NULL
************************************************************************************************************/
#if D13_16BIT_EN
void outportd(INT16U Data)
{
USBWR(0x02,Data); //发送数据(16位) send data(16-bit)
}
#else
void outportd(INT8U Data)
{
delay();
USBWR(0x02,Data); //发送数据(8位) send data(8-bit)
}
#endif
/************************************************************************************************************
** 函数名称: INT8U inportd(void) Name: INT8U inportd(void)
** 功能描述: 读入数据 Function: read data
** 输 入: 无 Input: NULL
** 输 出: 读到的数据 Output: the data of read
*************************************************************************************************************/
#if D13_16BIT_EN
INT16U inportd(void)
{
return USBRD(0x02); //读取数据(16位) read data(16-bit)
}
#else
INT8U inportd(void)
{
delay();
return USBRD(0x02); //读取数据(8位) read data(8-bit)
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -