亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbhw.c

?? nxp的LPC2888處理器的示例代碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*----------------------------------------------------------------------------
 *      U S B  -  K e r n e l
 *----------------------------------------------------------------------------
 *      Name:    USBHW.C
 *      Purpose: USB Hardware Layer Module for Philips LPC214x
 *      Version: V1.10
 *----------------------------------------------------------------------------
 *      This software is supplied "AS IS" without any warranties, express,
 *      implied or statutory, including but not limited to the implied
 *      warranties of fitness for purpose, satisfactory quality and
 *      noninfringement. Keil extends you a royalty-free right to reproduce
 *      and distribute executable files created using this software for use
 *      on Philips LPC microcontroller devices only. Nothing else gives you
 *      the right to use this software.
 *
 *      Copyright (c) 2005-2006 Keil Software.
 *---------------------------------------------------------------------------*/

#include "LPC288x.h"                        /* LPC288x definitions */

#include "type.h"

#include "target.h"
#include "timer.h"
#include "usb.h"
#include "usbcfg.h"
#include "usbhw.h"
#include "usbcore.h"
#include "usbuser.h"
#include "timer.h"

extern DWORD USB_EndPointHalt;

volatile DWORD DevStatusFS2HS = FALSE;
volatile DWORD SuspendFlag = FALSE;
#if USB_DMA
volatile DWORD DMACh0EOT = 0;
volatile DWORD DMACh1EOT = 0;
#endif

/*
 *  USB Initialize Function
 *   Called by the User to initialize USB
 *    Return Value:    None
 */

void USB_Init (void) {

  SuspendFlag = FALSE;
  USBClkEn  = 1;			// Documentation error in USB chapter
  							// On master reset, this bit needs to set again.
  USBDevAdr = 0x00;
  USBIntCfg = 0xFC;

//  USBTest |= (0x1<<4);	// For test only, force to full-speed,
							// remove this before certification
  USB_Connect( FALSE );
  USB_Reset();
  USBLock   = 0xAA37;
  USBClkEn  = 1;			// Documentation error in USB chapter
  							// On master reset, this bit needs to set again.
  USB_SetAddress(0);
#if USB_LOW_POWER_EVENT
   /* If the CLKAON is set, the device won't receive a RESUME 
  interrupt. To test USB SUSPEND to set to low-power mode and
  USB RESUME to wake the uC to normal operation, CLKAON needs to
  be disabled. */
  USBMode |= (0x1<<3);		// Set GIE
#else
  /* If the CLKAON is disabled, USBCV Remote Wakeup test will 
  fail. To be investigated. */
  USBMode |= ((0x1<<3)|(0x1<<7));	// Set GIE, CLKAON
#endif
  return;
}
/*
 *  USB Connect Function
 *   Called by the User to Connect/Disconnect USB
 *    Parameters:      con:   Connect/Disconnect
 *    Return Value:    None
 */

void USB_Connect (BOOL con) {

  if (con) {
    USBMode |=  (0x1<<0);
  } else {
    USBMode &= ~(0x1<<0);
  }
}


/*
 *  USB Reset Function
 *   Called automatically on USB Reset
 *    Return Value:    None
 */

void USB_Reset (void) {

  USB_Configuration = 0;
  DevStatusFS2HS = FALSE;

  USBClkEn  = 1;			// Documentation error in USB chapter
  							// On master reset, this bit needs to set again.
  USBEIX = EIX_SEL_EP0SET;	// EP0 set up register
  USBIntClr = 0x000000FF;

  USBEIntClr = 0xFFFF;
  USBEIntE |= 0xFFFF;

#if USB_DMA
  UDMACtrl = 0x01;			// Enable DMA operation
  UDMASoftRes = 0x03;		// Soft reset to both DMA channel

  UDMAIntClr = 0x00000066;	// clear EOT and Error for CH0 and CH1
  while ( UDMAStat & 0x0707 );	// Wait if both channels are not idle.

  UDMAIntEn = 0x44;			/* Due to the nature of the RAM drive,
							polling on the EOT make the code more
							readable and easy to maintain. */  							
//  UDMAIntEn = 0x66;			// Enable both EOT and Error
#endif
#if USB_SOF_EVENT
  USBIntE = 0x000000BB;		/* no PSOF, and DMA, SOF is enabled */
#else
  USBIntE = 0x000000B9;		/* no SOF, PSOF, and DMA */
#endif
#if USB_DMA
  USBIntE |= 0x40;			/* Enable DMA bit */
#endif
}


/*
 *  USB Suspend Function
 *   Called automatically on USB Suspend
 *    Return Value:    None
 */

void USB_Suspend (void) {
  USBMode |= (0x1<<1);	// Set Power off before suspend 
  USBMode |= (0x1<<5);
#if USB_LOW_POWER_EVENT
  start_timer();
  SuspendFlag = TRUE;
#endif
}


/*
 *  USB Resume Function
 *   Called automatically on USB Resume
 *    Return Value:    None
 */

void USB_Resume (void) {
  USBMode &= ~(0x1<<1);	// Clear power off bit after resume 
  USBMode |= (0x1<<6);
  USBMode &= ~(0x1<<6);
 
#if USB_LOW_POWER_EVENT
  stop_timer();
  SuspendFlag = FALSE;
#endif
}


/*
 *  USB Remote Wakeup Function
 *   Called automatically on USB Remote Wakeup
 *    Return Value:    None
 */

void USB_WakeUp (void) {

  if (USB_DeviceStatus & USB_GETSTATUS_REMOTE_WAKEUP) {
    USBMode |= (0x1<<2);
  }
}


/*
 *  USB Remote Wakeup Configuration Function
 *    Parameters:      cfg:   Enable/Disable
 *    Return Value:    None
 */

void USB_WakeUpCfg (BOOL cfg) {
  if ( cfg == TRUE )
  {
	USBMode |= (1<<2);
  }
  else
  {
	USBMode &= ~(1<<2);
  }
}


/*
 *  USB Set Address Function
 *    Parameters:      adr:   USB Address
 *    Return Value:    None
 */

void USB_SetAddress (DWORD adr) {
  USBDevAdr = (0x1<<7)|adr;
}


/*
 *  USB Configure Function
 *    Parameters:      cfg:   Configure/Deconfigure
 *    Return Value:    None
 */

void USB_Configure (BOOL cfg) {
  /* Not needed */
}


/*
 *  Configure USB Endpoint according to Descriptor
 *    Parameters:      pEPD:  Pointer to Endpoint Descriptor
 *    Return Value:    None
 */

void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD) {
  DWORD ep_addr;

  ep_addr = pEPD->bEndpointAddress;
  if (ep_addr & 0x80) {
    ep_addr = ((ep_addr & 0x7F) << 1) | EIX_DIR;
  } else {
    ep_addr =   ep_addr << 1;
  }
  USBEIX = ep_addr;

  USBEType = (pEPD->bmAttributes & 0x001F) | 0x0010;

  USBEMaxSize = pEPD->wMaxPacketSize & 0x03FF;
}


/*
 *  Set Direction for USB Control Endpoint
 *    Parameters:      dir:   Out (dir == 0), In (dir <> 0)
 *    Return Value:    None
 */

void USB_DirCtrlEP (DWORD dir) {
  dir = dir;  /* Not needed */
}


/*
 *  Enable USB Endpoint
 *    Parameters:      EPNum: Endpoint Number
 *                       EPNum.0..3: Address
 *                       EPNum.7:    Dir
 *    Return Value:    None
 */

void USB_EnableEP (DWORD EPNum) {
  if ( EPNum & 0x80 ) {
	USBEIX = ((EPNum&0x7F) << 1)|EIX_DIR;	// IN
  } else {
	USBEIX = (EPNum&0x7F) << 1;			// OUT
  }
  USBEType |= ETYPE_EP_ENAB;
  return;
}


/*
 *  Disable USB Endpoint
 *    Parameters:      EPNum: Endpoint Number
 *                       EPNum.0..3: Address
 *                       EPNum.7:    Dir
 *    Return Value:    None
 */

void USB_DisableEP (DWORD EPNum) {
  if ( EPNum & 0x80 ) {
	USBEIX = ((EPNum&0x7F) << 1)|EIX_DIR;	// IN
  } else {
	USBEIX = (EPNum&0x7F) << 1;			// OUT
  }
  USBEType &= ~ETYPE_EP_ENAB;
  return;
}


/*
 *  Reset USB Endpoint
 *    Parameters:      EPNum: Endpoint Number
 *                       EPNum.0..3: Address
 *                       EPNum.7:    Dir
 *    Return Value:    None
 */

void USB_ResetEP (DWORD EPNum) {
  return;
}


/*
 *  Set Stall for USB Endpoint
 *    Parameters:      EPNum: Endpoint Number
 *                       EPNum.0..3: Address
 *                       EPNum.7:    Dir
 *    Return Value:    None
 */

void USB_SetStallEP (DWORD EPNum) {
  if ( EPNum & 0x80 ) {
	USBEIX = ((EPNum&0x7F) << 1)|EIX_DIR;	// IN
	USBECtrl |= (0x1 << 0);
	USB_EndPointHalt |= ((1 << 16) << (EPNum & 0x0F));
  } else {
	USBEIX = (EPNum&0x7F) << 1;				// OUT
	USBECtrl |= (0x1 << 0);
	USB_EndPointHalt |= (1 << EPNum);
  }
  return;
}


/*
 *  Clear Stall for USB Endpoint
 *    Parameters:      EPNum: Endpoint Number
 *                       EPNum.0..3: Address
 *                       EPNum.7:    Dir
 *    Return Value:    None
 */

void USB_ClrStallEP (DWORD EPNum) {
  if ( EPNum & 0x80 ) {
	USBEIX = ((EPNum&0x7F) << 1)|EIX_DIR;	// IN
	USBECtrl &= ~(0x1 << 0);
	USB_EndPointHalt &= ~((1 << 16) << (EPNum & 0x0F));
  } else {
	USBEIX = (EPNum&0x7F) << 1;				// OUT
	USBECtrl &= ~(0x1 << 0);
	USB_EndPointHalt &=	~(1 << EPNum);
  }
  return;
}

/*
 *  Read USB Setup Data on Endpoint 0

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品亚洲乱码伦伦中文| 欧美午夜宅男影院| 3d成人h动漫网站入口| 国产精品网站在线| 黄网站免费久久| 欧美区视频在线观看| 亚洲欧美视频在线观看| 国产美女精品在线| 日韩欧美国产三级| 日韩精品电影在线观看| 色婷婷av一区二区三区gif| 国产拍欧美日韩视频二区| 老司机精品视频一区二区三区| 在线观看区一区二| 中文字幕日韩av资源站| 国产精品一区免费视频| 精品久久久久久无| 伦理电影国产精品| 欧美高清性hdvideosex| 亚洲一区二区三区四区在线观看| 99久久久久免费精品国产| 国产精品久久综合| 成人免费观看视频| 日本一区二区电影| 国产精品18久久久久久久网站| 日韩欧美一二三四区| 蜜桃av噜噜一区| 日韩欧美一区电影| 久久99久久久久| 精品国产91乱码一区二区三区| 日韩av电影天堂| 91精品国产色综合久久 | 欧美系列亚洲系列| 一区二区三区在线视频观看| 99久久精品国产一区二区三区| 国产精品欧美综合在线| 成人影视亚洲图片在线| 中文字幕欧美日韩一区| 成人在线视频一区| 国产精品国产a| 91婷婷韩国欧美一区二区| 中文字幕亚洲区| 91蝌蚪porny| 一区二区三区精品在线| 欧美日韩中文字幕一区二区| 亚洲电影一级片| 制服丝袜在线91| 美女一区二区久久| 久久欧美一区二区| 成年人国产精品| 综合久久国产九一剧情麻豆| 91激情五月电影| 亚洲成人1区2区| 日韩一区二区三区四区五区六区| 精品一区二区三区影院在线午夜| 久久精品视频免费观看| 9久草视频在线视频精品| 一片黄亚洲嫩模| 欧美丰满少妇xxxbbb| 另类小说视频一区二区| 久久成人免费日本黄色| 国产色产综合产在线视频| gogo大胆日本视频一区| 亚洲国产日韩一区二区| 日韩欧美国产三级| 成人白浆超碰人人人人| 亚洲国产综合在线| 日韩一区二区免费电影| 国产电影精品久久禁18| 亚洲免费av在线| 51午夜精品国产| 国产九色sp调教91| 亚洲裸体在线观看| 欧美一区二区免费视频| 成人免费高清在线| 午夜精品久久久久久久久久| 久久午夜色播影院免费高清| 91浏览器打开| 蜜桃久久精品一区二区| 国产精品传媒视频| 制服丝袜中文字幕一区| 国产99久久久久久免费看农村| 一区二区三区日韩欧美精品 | a4yy欧美一区二区三区| 午夜欧美视频在线观看| 久久久久九九视频| 91福利视频在线| 韩国精品免费视频| 亚洲一区二区3| 精品第一国产综合精品aⅴ| 成人动漫在线一区| 免费观看日韩电影| 亚洲色图清纯唯美| 精品美女在线播放| 色婷婷久久久综合中文字幕| 九一九一国产精品| 一区二区三区欧美亚洲| www欧美成人18+| 欧美无砖砖区免费| 成人精品免费看| 蜜桃av一区二区三区电影| 亚洲色图一区二区| ww久久中文字幕| 欧美久久久久久久久中文字幕| 国产+成+人+亚洲欧洲自线| 丝袜美腿亚洲综合| 亚洲欧美色图小说| 久久久精品黄色| 日韩一级黄色大片| 在线这里只有精品| 成人免费毛片高清视频| 美女一区二区久久| 性做久久久久久免费观看| 中文字幕一区二区三区不卡| www精品美女久久久tv| 欧美嫩在线观看| 一本大道久久a久久综合 | 亚洲自拍偷拍九九九| 欧美激情艳妇裸体舞| 精品精品国产高清a毛片牛牛| 欧美亚洲国产一区二区三区| 成人av在线资源网| 国产高清精品网站| 免费观看在线综合| 天天影视网天天综合色在线播放| 亚洲品质自拍视频网站| 国产精品私房写真福利视频| 精品国产精品网麻豆系列| 538在线一区二区精品国产| 亚洲午夜在线电影| 亚洲女性喷水在线观看一区| 欧美高清在线一区二区| 久久精品视频免费观看| 久久中文娱乐网| 精品国产百合女同互慰| 91精品国产综合久久香蕉的特点| 欧美亚日韩国产aⅴ精品中极品| 91在线国内视频| 成人午夜在线视频| 成人午夜私人影院| 国产·精品毛片| 成人午夜大片免费观看| 国产成人免费av在线| 国产伦精品一区二区三区在线观看| 久久99精品久久久久久国产越南| 日韩avvvv在线播放| 日韩精品1区2区3区| 日韩福利视频导航| 美女视频黄 久久| 久久精品久久精品| 另类人妖一区二区av| 麻豆国产精品官网| 久久精品免费看| 狠狠色丁香婷婷综合| 国产精品中文字幕一区二区三区| 国产一区中文字幕| 国产在线视频精品一区| 国产91精品免费| 99在线精品视频| 色偷偷久久人人79超碰人人澡| 色综合久久久久综合99| 欧美性色aⅴ视频一区日韩精品| 欧美亚洲动漫精品| 6080日韩午夜伦伦午夜伦| 日韩三级中文字幕| 2017欧美狠狠色| 中文字幕免费观看一区| 亚洲色欲色欲www| 亚洲一级二级三级| 日韩激情一二三区| 精品一区二区三区久久| 国产一区二区电影| 99久久久国产精品| 精品视频在线免费看| 91精品国产免费| 久久久噜噜噜久噜久久综合| 中文字幕精品一区| 亚洲精品日日夜夜| 日本人妖一区二区| 国产在线视频不卡二| 成人avav影音| 欧美曰成人黄网| 日韩三级免费观看| 国产欧美日韩精品在线| 亚洲精品乱码久久久久| 日本伊人午夜精品| 国产成人在线视频网站| 91影视在线播放| 欧美一级久久久| 国产精品麻豆久久久| 亚洲在线中文字幕| 九色porny丨国产精品| 成人激情开心网| 欧美日韩成人在线一区| 久久精品无码一区二区三区| 亚洲欧美日韩久久| 麻豆久久一区二区| 99久久精品免费看国产免费软件| 欧美久久久一区| 国产精品私人自拍|