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

📄 d12hal.c

📁 在ZLG的LPC211X开发板上没有D12 USB驱动的源程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
** 文   件   名: D12HAL.c
** 最后修改日期: 2004年7月2日
** 描        述: USB驱动程序软件包: PDIUSBD12 设备端驱动程序 设备控制驱动层
** 版	     本: V1.0
**********************************************************************************************************/

#include  "config.h"
#include  "D12Config.h"

/************************************************************
** 函数名称: void Init_D12Port(void)
** 功能描述: 初始化D12与LPC2200的连接端口
** 输   入: 无
** 输   出: 无
************************************************************/
void Init_D12Port(void)
{
   	USBRST_GPIO();			//使能USBRST为通用IO口
  	SUSP_GPIO();			//使能SUSP为通用IO口
  	
  	USBRST_OUT();			//USBRST为输出IO口
  	SUSP_OUT();				//SUSP为输出IO口
  	INIT_INTD12();			//INT_USB为中断输入口
}

/************************************************************
** 函数名称: void Rst_D12(void)
** 功能描述: 复位D12
** 输   入: 无
** 输   出: 无
************************************************************/
void Rst_D12(void)
{
	INT32U i;
	
	CLR_USBRST();					//USBRST置0
	for(i = 0;i < 0x2ffff; i++);	//软件延时
		SET_USBRST();				//USBRST置1
	
	for(i = 0;i < 0xfff; i++);		//软件延时
		CLR_SUSP();					//SUSP置0
}

/************************************************************
** 函数名称: void bus_delay(void)
** 功能描述: 总线延时
** 输   入: 无
** 输   出: 无
************************************************************/
void bus_delay(void)
{
	//INT8U i;
	//i = D12_NOP;			//对总线进行操作
	//i = 0;
	D12_READ_SET();
	D12_WRITE_SET();
	D12_CS_SET();
	//D12_CS_CLR();
	
    
    
	D12_DAT();       		//数据地址
	
}

/************************************************************
** 函数名称: void outportc(INT8U Data)
** 功能描述: 输出命令
** 输   入: INT8U Data:    命令字节
** 输   出: 无
************************************************************/
void outportc(INT8U Data)
{
	INT32U i;
	bus_delay();				//总线延时
	D0_GPIO();
	OUTPUT_DATA();
	
	if( (Data&0x01) != 0) IO0SET = D0;
        		else IO0CLR = D0;
    if( (Data&0x02) != 0) IO0SET = D1;
        		else IO0CLR = D1;  
   	if( (Data&0x04) != 0) IO0SET = D2;
        		else IO0CLR = D2;
    if( (Data&0x08) != 0) IO0SET = D3;
        		else IO0CLR = D3;    
	if( (Data&0x10) != 0) IO0SET = D4;
        		else IO0CLR = D4;
    if( (Data&0x20) != 0) IO0SET = D5;
        		else IO0CLR = D5;  
   	if( (Data&0x40) != 0) IO0SET = D6;
        		else IO0CLR = D6;
    if( (Data&0x80) != 0) IO0SET = D7;
        		else IO0CLR = D7; 
    
    D12_COM();	
    D12_WRITE_CLR();
	D12_CS_CLR();
    i = 0;
	bus_delay();				//总线延时
     //发送命令

	 			
}

/************************************************************
** 函数名称: void outportd(INT8U Data)
** 功能描述: 输出数据
** 输   入: INT8U Data:    数据字节
** 输   出: 无
*************************************************************/
void outportd(INT8U Data)
{
	INT32U i;
	bus_delay();				//总线延时
	D0_GPIO();
	OUTPUT_DATA();
	    	
	if( (Data&0x01) != 0) IO0SET = D0;
        		else IO0CLR = D0;
    if( (Data&0x02) != 0) IO0SET = D1;
        		else IO0CLR = D1;  
   	if( (Data&0x04) != 0) IO0SET = D2;
        		else IO0CLR = D2;
    if( (Data&0x08) != 0) IO0SET = D3;
        		else IO0CLR = D3;    
	if( (Data&0x10) != 0) IO0SET = D4;
        		else IO0CLR = D4;
    if( (Data&0x20) != 0) IO0SET = D5;
        		else IO0CLR = D5;  
   	if( (Data&0x40) != 0) IO0SET = D6;
        		else IO0CLR = D6;
    if( (Data&0x80) != 0) IO0SET = D7;
        		else IO0CLR = D7; 
    
    D12_WRITE_CLR();
    D12_DAT();	   			     
    D12_CS_CLR();
    i = 0;	//软件延时
	bus_delay();				//总线延时
   
}

/************************************************************
** 函数名称: INT8U inportd(void)
** 功能描述: 读入数据
** 输   入: 无
** 输   出: 读到的数据
*************************************************************/
INT8U inportd(void)
{	
	INT32U i;
	INT8U Data;
	D0_GPIO();
	INPUT_DATA();
	//bus_delay();				//总线延时
	//OSTimeDly(OS_TICKS_PER_SEC/10);
    D12_READ_CLR();
	D12_CS_CLR();
	
 	if((IO0PIN&D0) != 0)  Data = Data | 0x01;
				else 	  Data = Data & 0xFE;
	if((IO0PIN&D1) != 0)  Data = Data | 0x02;
				else 	  Data = Data & 0xFD;
	if((IO0PIN&D2) != 0)  Data = Data | 0x04;
				else 	  Data = Data & 0xFB;
	if((IO0PIN&D3) != 0)  Data = Data | 0x08;
				else 	  Data = Data & 0xF7;
	if((IO0PIN&D4) != 0)  Data = Data | 0x10;
				else 	  Data = Data & 0xEF;
	if((IO0PIN&D5) != 0)  Data = Data | 0x20;
				else 	  Data = Data & 0xDF;
	if((IO0PIN&D6) != 0)  Data = Data | 0x40;
				else 	  Data = Data & 0xBF;
	if((IO0PIN&D7) != 0)  Data = Data | 0x80;
				else 	  Data = Data & 0x7F;				
	
	
	i = 0;
	D12_READ_SET();
	D12_CS_SET();
	    	
	return Data;				//读取数据
}

⌨️ 快捷键说明

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