📄 usbdriver.c
字号:
/****************************************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 + -