?? 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 + -