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

📄 usbdriver.c

📁 LPC2148 USB固件程序,是学习固件不可多的的范例.
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			USBDriver.c
** Last modified Date:	2005-8-6
** Last Version:		V1.0
** Descriptions:		LPC214x USB 应用层
**						LPC214x USB Application
**------------------------------------------------------------------------------------------------------
** Created by:			郑明远 		MingYuan Zheng
** Created date:		2005-8-6
** Version:				V1.0
** Descriptions:		初始版本	The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			
** Modified date:
** Version:				
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/



/****************************************Copyright (c)**************************************************
**                               Guangzhou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			USBISR.c
** Created by:			MingYuan Zheng
** Created date:		2005-1-6
** Last modified Date:	
** Last Version:		V1.0
** Descriptions:		
**												 
*******************************************************************************************************/

#include "config.h"

#include "USBConfig.h"
#include "USBHAL.h"
#include "USBCI.h"
#include "USBdma.h"
#include "Chap_9.h"
#include "Descriptor.h"
#include "USBDriver.h"


/* 定义全局变量 define global variable */
INT8U GenEpBuf[EP1_PACKET_SIZE];						/* 逻辑端点 1 接收缓冲区 receive buffer of logic ep01 */
INT8U EpBuf[EP2_PACKET_SIZE];							/* 逻辑端点 2 接收缓冲区 receive buffer of logic ep02 */

/* define USB event flag variable */
EPPFLAGS bEPPflags;										/* 定义 USB 事件标志变量 */


/***************************************************************************************************************
** 函数名称 : USB_Initialize()							Name	 : USB_Initialize()
** 功能描述 : 初始化USB设备控制器		  			    Function : Initialize the USB device controller 
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 0: 初始化成功  1: 初始化失败				Output	 : 0: Initialize sucessfully    1: Initialize fail
****************************************************************************************************************/
INT8U USB_Initialize(void)
{	
	USB_InitHareware();									/* 初始化硬件         Initialize hardware */

	bEPPflags.value = 0;								/* 置USB事件标志为0   set USB event flags to zero */
	
	if (USB_ReadTestRegister() != 0xA50F)				/* 读测试寄存器       read test register */
		return 1;										/* 初始化失败         initialize fail    */

	USB_USBDevIntConfig();								/* 配置中断 		  configure the USB interrupt */
	USB_ConfigEndpoint();								/* 配置端点			  configure the endpoint */

#if DMA_ENGINE_EN	
	USB_DMAInit();										/* 初始化USB DMA	 initialize the USB DMA */
	USB_SetMode(0x28);
#else
	USB_SetMode(0x00);									/* 成功传输才产生中断generate interrupt only transmit sucessfully */
#endif
			
	reconnect_USB();									/* 重新连接USB 		 reconnect the USB */
 	return 0;									   		/* 初始化USB成功     Initialize USB sucessfully */
}


/***************************************************************************************************************
** 函数名称 : USB_ConfigEndpoint()						Name	 : USB_ConfigEndpoint()
** 功能描述 : 配置所有端点的最大包大小	  			    Function : config the maxpacket size of all endpoint
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void USB_ConfigEndpoint(void)
{
	USB_ConfigMaxPaketSize(0,EP0_PACKET_SIZE);
	USB_ConfigMaxPaketSize(1,EP0_PACKET_SIZE);

	USB_ConfigMaxPaketSize(2,EP1_PACKET_SIZE);
	USB_ConfigMaxPaketSize(3,EP1_PACKET_SIZE);
	
	USB_ConfigMaxPaketSize(4,EP2_PACKET_SIZE);
	USB_ConfigMaxPaketSize(5,EP2_PACKET_SIZE);
}


/***************************************************************************************************************
** 函数名称 : usbserve()								Name	 : usbserve()
** 功能描述 : USB事件处理				  			    Function : USB Events service
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void usbserve(void)
{
	if (bEPPflags.bits.setup_packet)
	{													/* 收到 SETUP 包   receive SETUP packet*/
		DISABLE();					
		bEPPflags.bits.setup_packet = 0;
		control_handler();								/* 控制传输处理    process control transmission */
		ENABLE();
	} // if SETUP packet

	if (bEPPflags.bits.bus_reset)
	{													/* USB总线复位处理 process USB bus reset */
		DISABLE();
		bEPPflags.bits.bus_reset = 0;
		ENABLE();

	} // if USB bus reset

	if (bEPPflags.bits.suspend)
	{													/* USB总线挂起改变处理 process USB bus suspend change */
		DISABLE();
		bEPPflags.bits.suspend= 0;
		ENABLE();
		USB_SuspendChange();
	} // if suspend change
	
	if (bEPPflags.bits.con_change)
	{													/* USB总线连接改变处理 process USB bus connect change */
		DISABLE();
		bEPPflags.bits.con_change = 0;
		ENABLE();
		USB_ConnectChange();
	} // if usb bus connect change
	
}

/***************************************************************************************************************
** 函数名称 : Usb_Exception()							Name	 : Usb_Exception()
** 功能描述 : USB 中断服务程序			  			    Function : USB Interrupt Service Program
** 输	 入 : 无							 			Input	 : NULL
** 输	 出 : 无										Output	 : NULL
****************************************************************************************************************/
void __irq Usb_Exception(void) 
{
	INT32U usb_ints,dev_ints,devstatus;
	
	bEPPflags.bits.in_isr = 1;							/* 标识程序进入中断    flag the program enter interrupt */
	
	/****** USB status interrupt ******/					
	dev_ints = USBDevIntSt;
	if (dev_ints & DEVINT_STATUS_DEVSTAT)			
	{													/* USB 总线复位,或挂起,或连接中断 */
		devstatus = USB_GetDevStatus();
		if ((devstatus & 0x10) != 0)
		{
			USB_BusReset();
			bEPPflags.bits.bus_reset = 1;				/* 标识总线复位        flag USB bus reset */
		}
		
		if ((devstatus & 0x08) != 0)
			bEPPflags.bits.suspend = 1;					/* 标识总线挂起改变    flag the bus suspend change */
			
		if ((devstatus & 0x02) != 0)
			bEPPflags.bits.con_change = 1;				/* 标识总线连接改变    flag the bus connect change */
		
		USBDevIntClr = DevStatusInterrupt;
		goto USB_ISR_EXIT;
	}	
	
	/****** data transmission interrupt ******/
	usb_ints = USBIntSt & 0x7;	
	if (usb_ints != 0)

⌨️ 快捷键说明

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