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

📄 d13hal.c

📁 处理器采用的是LPC2378
💻 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 + -