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

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

?? usbdriver.c

?? zlg_usb協議棧是周立功公司開發的一款開放的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:		LPC23xx USB 應用層
**						LPC23xx USB Application Layer
**------------------------------------------------------------------------------------------------------
** 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: 
**
********************************************************************************************************/


#include "config.h"
#include "USBConfig.h"
#include "string.h"

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


/* define USB event flag variable */
EPPFLAGS bEPPflags;										/* 定義 USB 事件標志變量 */

/* Stack of the task that deal with control transfer */
OS_STK  TaskSetupStk[128];								/* Setup包處理任務堆棧  */

/* the pointer of Event that deal SETUP packet */
OS_EVENT *pSetup_Event;									/* Setup包處理任務事件指針 */

/* USB receive or transmit control block of LPC23xx USB each endpoint */
CTRL_USB Ctrl_Usb[NUM_ENDPOINTS];						/* LPC23xx USB 各端點對應的 USB 接收或發送控制塊 */


/***********************************************************************************************************************
** 函數名稱 : USB_Initialize()							Name	 : USB_Initialize()
** 功能描述 : 初始化 USB 設備控制器		  			    Function : Initialize the USB device controller 
** 輸	 入 : 無							 			Input	 : NULL
** 輸	 出 : 0: 初始化成功  >0: 初始化失敗(錯誤碼)		Output	 : 0: Initialize sucessfully    >0: Initialize fail(error code)
***********************************************************************************************************************/
INT8U USB_Initialize(void)
{	
	int i; 

	OS_ENTER_CRITICAL();
	USB_InitHardware();									/* 初始化硬件         	 Initialize the hardware */
	bEPPflags.value = 0;								/* 置USB事件標志為0   	 set USB event flags to zero */
	
	if (USB_ReadTestRegister() != 0xA50F)				/* 讀測試寄存器       	 read test register */
	{
		OS_EXIT_CRITICAL(); 
		return USB_ERR_READ_TESTREG;					/* 初始化失敗         	 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
	
	pSetup_Event = OSSemCreate(0);				  		/* SETUP包處理任務信號量 the semaphore of the task processing SETUP packet */
 	if (pSetup_Event == NULL)					
 	{
	 	OS_EXIT_CRITICAL(); 
 	 	return USB_ERR_CREATE_SEM;						/* 創建失敗,返回錯誤碼   return error code when create fail */
	}

	for(i = 0; i < NUM_ENDPOINTS; i++)
	{
		Ctrl_Usb[i].bEpReady = 0;
		Ctrl_Usb[i].bTaskWaiting = 0;
		Ctrl_Usb[i].Ep_Sem = OSSemCreate(0);
		if (Ctrl_Usb[i].Ep_Sem == NULL)
		{
			OS_EXIT_CRITICAL(); 
			return USB_ERR_CREATE_SEM;					/* 創建信號量失敗		 create semaphore fail */
		}				
	}
	
	USB_Reconnect();			
	reconnect_USB();									/* 重新連接USB 			 reconnect the USB */
 	OS_EXIT_CRITICAL();
 	
 	return USB_NO_ERR;							   		/* 初始化USB成功    	 Initialize USB sucessfully */
}


/***********************************************************************************************************************
** 函數名稱: void TaskSetup(void *pdata)			Name:	    void TaskSetup(void *pdata)
** 功能描述: 控制傳輸處理							Function:   deal with control transfer
** 輸	 入: void *pdata  任務參數					Input:		void *pdata:   parameter of the task
** 輸	 出: 無										Output:	    NULL
** 注	 意: 該任務的優先級應高于其它任務,才能在	Note:		the prior of the task must be higher than other,so 
			 任何情況下傳輸SETUP包								it will be sucessful when tranfering SETUP packet										 
************************************************************************************************************************/
void  TaskSetup(void *pdata)
{
#if OS_CRITICAL_METHOD == 3      			/* Allocate storage for CPU status register */
	OS_CPU_SR  cpu_sr;
#endif
	INT8U err;
	
	pdata = pdata;                			/* Prevent compiler warning */
	for (;;)
	{
		OSSemPend(pSetup_Event,0,&err);		/* 等待Setup包		 wait for SETUP packet */
		if (err == OS_NO_ERR){				/* 接收到Setup包 	 have received SETUP packet */
			OS_ENTER_CRITICAL();			/* 關中斷			 disable all interrupt */
			control_handler();				/* 進行控制傳輸處理	 deal with control transfer */
			OS_EXIT_CRITICAL();			    /* 開中斷			 enable all interrupt */
		}
	}
}


/*******************************************************************************************************************************
** 函數名稱: INT8U ReadPort1()									Name:		 INT8U ReadPort1()	
** 功能描述: 從端口 1 接收len個字節								Function:	 receive len Bytes from Port1
** 輸   入: INT32U  len: 要接收的字節數						Input:		 INT32U  len:   	numbers will be receive
						 (取值范圍為0x00000001 ~ 0xFFFFFFFF)			    			    	(range: 0x00000001 ~ 0xFFFFFFFF)	
			 INT8U   recbuff:   接收緩沖區指針								 INT8U   recbuff:   receive buffer
			 INT16U  timeout:   超時等待時間, 等于0表示無限等待 			 INT16U  timeout:   timeout	of receiving,0 indicates limitless waiting		 
** 輸   出: 0: 接收成功	 > 0: 接收失敗(錯誤碼)				Output:		 0:	sucessfully		>0 fail (error code)
*******************************************************************************************************************************/
INT8U ReadPort1(INT32U len, INT8U *recbuff, INT16U timeout)
{

#if DMA_ENGINE_EN
	return (USB_ReadPortDMA(2, &Ctrl_Usb[0], len, recbuff, timeout));		/* DMA方式 */
#else
	return (USB_ReadPort(2, 16, 1, &Ctrl_Usb[0], len, recbuff, timeout));	/* 非DMA方式 */
#endif

}	//從物理端點 2 接收數據


/*******************************************************************************************************************************
** 函數名稱: INT8U ReadPort2()									Name:		 INT8U ReadPort2()	
** 功能描述: 從端口 2 接收len個字節								Function:	 receive len Bytes from Port2
** 輸   入: INT32U  len: 要接收的字節數						Input:		 INT32U  len:   	numbers will be receive
						 (取值范圍為0x00000001 ~ 0xFFFFFFFF)			    			    	(range: 0x00000001 ~ 0xFFFFFFFF)	
			 INT8U   recbuff:   接收緩沖區指針								 INT8U   sendbuff:  receive buffer
			 INT16U  timeout:   超時等待時間, 等于0表示無限等待 			 INT16U  timeout:   timeout	of receiving,0 indicates limitless waiting		 
** 輸   出: 0: 接收成功	 > 0: 接收失敗(錯誤碼)				Output:		 0:	sucessfully		>0 fail (error code)
*******************************************************************************************************************************/
INT8U ReadPort2(INT32U len, INT8U *recbuff, INT16U timeout)
{

#if DMA_ENGINE_EN
	return (USB_ReadPortDMA(4, &Ctrl_Usb[2], len, recbuff, timeout));		/* DMA方式 */
#else
	return (USB_ReadPort(4, 64, 2, &Ctrl_Usb[2], len, recbuff, timeout));	/* 非DMA方式 */
#endif

}	//從物理端點 4 接收數據


/*******************************************************************************************************************************
** 函數名稱: INT8U WritePort1()									Name:		 INT8U WritePort1()	
** 功能描述: 用端口 1 發送len個字節								Function:	 Send len Bytes via Port1
** 輸   入: INT32U  len: 發送的字節數							Input:		 INT32U  len:   	numbers will be send
						  (取值范圍為0x00000001 ~ 0xFFFFFFFF)			    			    	(range: 0x00000001 ~ 0xFFFFFFFF)	
			 INT8U   sendbuff:  發送緩沖區指針								 INT8U   sendbuff:  send buffer
			 INT16U  timeout:   超時等待時間, 等于0表示無限等待 			 INT16U  timeout:   timeout	of transmitting,0 indicates limitless waiting		 
** 輸   出: 0: 發送成功	 > 0: 發送失敗(錯誤碼)				Output:		 0:	sucessfully		>0 fail (error code)
*******************************************************************************************************************************/
INT8U WritePort1(INT32U len, INT8U *sendbuff, INT16U timeout)
{

#if DMA_ENGINE_EN
	return (USB_WritePortDMA(3, &Ctrl_Usb[1], sendbuff, len, timeout));		/* DMA方式 */
#else
	return (USB_WritePort(3, 64, 2, &Ctrl_Usb[1], sendbuff, len, timeout));	/* 非DMA方式 */
#endif

}	/* 通過物理端點 3 發送數據 */


/*******************************************************************************************************************************
** 函數名稱: INT8U WritePort2()									Name:		 INT8U WritePort2()	
** 功能描述: 用端口 2 發送len個字節								Function:	 Send len Bytes via Port2
** 輸   入: INT32U  len: 發送的字節數							Input:		 INT32U  len:   	numbers will be send
						  (取值范圍為0x00000001 ~ 0xFFFFFFFF)			    			    	(range: 0x00000001 ~ 0xFFFFFFFF)	
			 INT8U   sendbuff:  發送緩沖區指針								 INT8U   sendbuff:  send buffer
			 INT16U  timeout:   超時等待時間, 等于0表示無限等待 			 INT16U  timeout:   timeout	of transmitting,0 indicates limitless waiting		 
** 輸   出: 0: 發送成功	 > 0: 發送失敗(錯誤碼)				Output:		 0:	sucessfully		>0 fail (error code)
*******************************************************************************************************************************/
INT8U WritePort2(INT32U len,INT8U *sendbuff,INT16U timeout)
{

#if DMA_ENGINE_EN
	return (USB_WritePortDMA(5, &Ctrl_Usb[3], sendbuff, len, timeout));		 /* DMA方式 */	
#else
	return (USB_WritePort(5, 64, 2, &Ctrl_Usb[3], sendbuff, len, timeout));	 /* 非DMA方式 */	
#endif

}	/* 通過物理端點 5 發送數據 */



/***********************************************************************************************************************
** 函數名稱: USB_RW_Param()										Name:		USB_RW_Param()	
** 功能描述: 填寫USB接收或發送控制塊有關參數					Function:	fill the CTRL_USB structure
** 輸	 入: CTRL_USB *pUsb   : USB接收或發送控制塊指針			Input:		CTRL_USB *pUsb: the CTRL_USB structure
			 INT8U *buff	  : 接收或發送緩沖區指針						INT8U *recbuff: the reception/transmittion buffer
** 輸	 出: 0   調用成功    > 0 調用失敗(錯誤碼)				Output:	 	0:  sucessfully	 >0: fail (it is error code)
***********************************************************************************************************************/
INT8U USB_RW_Param(CTRL_USB *pUsb, INT8U *pbuff)
{
	if (bEPPflags.bits.configuration == 0)						
		return USB_ERR_NO_CONFIG;							/* USB總線未配置完成	the USB bus is not confirgurated */

	if (pbuff == NULL)
		return USB_ERR_BUFF_INVALID;						/* 緩沖區指針無效錯誤	the pointer of buff is invalid   */
	
	if (pUsb->bEpUsed == 1)
		return USB_ERR_ENDP_OCCUPY;							/* 端點已被其它任務占用 the endpoint have been used */  
		
	pUsb->bEpUsed = 1;										/* 本任務占用該端點     the task use the endpoint */
					
	return USB_NO_ERR;
}


/***********************************************************************************************************************
** 函數名稱: USB_WaitEpReady()									Name:		USB_WaitEpReady()	
** 功能描述: 等待端點就緒										Function:	Waiting for the endpoint is ready
** 輸	 入: CTRL_USB *pUsb : USB接收或發送控制塊指針			Input:		CTRL_USB *pUsb: the CTRL_USB structure
			 INT16U timeout	: 超時時間										INT8U *recbuff: timeout
** 輸	 出: 0   調用成功    > 0 調用失敗(錯誤碼)				Output:	 	0:  sucessfully	 >0: fail (it is error code)
***********************************************************************************************************************/
#if (!DMA_ENGINE_EN)
INT8U USB_WaitEpReady(CTRL_USB *pUsb, INT16U timeout)
{
	INT8U err;

	OS_ENTER_CRITICAL();
	if (pUsb->bEpReady == 1)									   
	{													   /* 端點已就緒   	                the endpoint is ready */
		pUsb->bEpReady = 0;
		OS_EXIT_CRITICAL();	
		err = USB_NO_ERR;								   /* 無須等待						need not waiting */
	}
	else
	{
		pUsb->bTaskWaiting = 1;							   /* 置位,表示任務進入等待的狀態   set the bit, indicate the task enter the waiting status */
		OSSemPend(pUsb->Ep_Sem, timeout, &err); 		   /* 等待端點就緒(進入等待狀態)   	wait for endpoint is ready */
		OS_EXIT_CRITICAL();
	}
	
	return err;
}
#endif


/*************************************************************************************************************************
** 函數名稱: USB_ReadPort()									  Name:		  USB_ReadPort()
** 功能描述: 讀端點(非DMA方式)								  Function:	  read data from endpoint(Not DMA)
** 輸   入: INT8U	   endp:  物理端點索引號 	  			  Input:	  INT8U	    endp: the physical endpoint number
			 INT32U eppsize:  端點緩沖區大小							  INT32U eppsize: the size of endpoint buffer
  		     INT8U buffnums:  該端點的緩沖區個數						  INT8U buffnums: numbers of endpoint buffer
			 CTRL_USB *pUsb:  接收/發送數據控制塊                         CTRL_USB *pUsb: the control block of receiving/sending 
			 INT32U     len:  接收字節個數								  INT32U     len: the numbers(Bytes) that will be received
			 INT8U *recbuff:  接收緩沖區								  INT8U *recbuff: the reception buffer
			 INT16U	timeout:  超時等待時間, 等于0表示無限等待             INT16U timeout: timeout of receiving,0 indicates limitless waiting
** 輸	 出: 0:	讀成功       > 0 讀失敗(錯誤碼)				  Output:	  0:  sucessfully	 >0: fail (it is error code)
**************************************************************************************************************************/
#if (!DMA_ENGINE_EN)
INT8U USB_ReadPort(INT8U endp, INT32U eppsize, INT8U buffnums, CTRL_USB *pUsb, INT32U len, INT8U *recbuff, INT16U timeout)
{
	INT8U err,i;
	INT32U reccnt = 0, tmp;	
	
	OS_ENTER_CRITICAL();
	err = USB_RW_Param(pUsb, recbuff);						   /* 檢查參數正確性  				  check the parameter */
	if (err != USB_NO_ERR)
	{
		OS_EXIT_CRITICAL();
		OSTimeDly(1);
		return err;											   /* 返回錯誤碼     				  return error code   */
	}
	OS_EXIT_CRITICAL();	
	
	while(1)
	{	
		err = USB_WaitEpReady(pUsb, timeout);				   /* 等待端點收到數據				  waiting for the endpoint receiving data */	

		/********** 下面從端點緩沖區中讀取數據 *********/
		if (err == OS_NO_ERR)
		{
			OS_ENTER_CRITICAL();
			for(i = 0; i < buffnums; i++)
    		{
    			if ((USB_SelectEndpoint(endp) & 0x60) == 0)
					break;									   /* 緩沖區為空 					  endpoint buffer is empty */
								

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品亚洲一区二区三区浴池 | 中文字幕一区二区三区在线观看| 日韩欧美激情在线| 国产精品久久久久国产精品日日| 午夜电影网一区| 成人av电影在线| 精品国产一二三区| 亚洲国产一区二区在线播放| 不卡免费追剧大全电视剧网站| 欧美高清你懂得| 亚洲天堂成人在线观看| 国产成人精品亚洲777人妖 | 亚洲一区二区欧美| 成人小视频免费观看| 日韩久久精品一区| 青青国产91久久久久久| 在线观看av一区二区| 国产精品国产三级国产aⅴ原创| 国模娜娜一区二区三区| 制服丝袜亚洲色图| 亚洲444eee在线观看| 日本精品视频一区二区三区| 国产精品久久久久久久裸模| 国产成人av电影在线播放| 精品少妇一区二区三区日产乱码 | 亚洲国产精品99久久久久久久久| 久久激情综合网| 91精品麻豆日日躁夜夜躁| 亚洲va在线va天堂| 欧美性大战久久久久久久| 一区二区高清视频在线观看| 91浏览器入口在线观看| 国产精品高潮久久久久无| 日产国产高清一区二区三区| 99精品热视频| 一区在线观看免费| 91蜜桃在线免费视频| 综合久久国产九一剧情麻豆| 91精品中文字幕一区二区三区| 亚洲v中文字幕| 91麻豆精品国产自产在线| 男人的j进女人的j一区| 日韩精品专区在线| 国产一区美女在线| 中文字幕av一区二区三区| 成人av在线资源| 一区二区三国产精华液| 欧美午夜精品久久久久久孕妇| 日韩在线观看一区二区| 日韩午夜在线播放| 国产成人免费在线观看不卡| 国产精品嫩草影院com| 色悠久久久久综合欧美99| 丝袜a∨在线一区二区三区不卡| 日韩欧美美女一区二区三区| 国产成人午夜视频| 亚洲最快最全在线视频| 91精品国产美女浴室洗澡无遮挡| 久久99热国产| 最近日韩中文字幕| 91精品国产91久久久久久最新毛片| 经典三级一区二区| 日韩理论片在线| 欧美一区二区三区白人| 国产激情精品久久久第一区二区| 亚洲天堂成人网| 日韩写真欧美这视频| av影院午夜一区| 日韩精品一区第一页| 国产三级一区二区| 欧美午夜一区二区三区 | 国产在线一区观看| 亚洲品质自拍视频| 欧美精品一区二区三| 色哟哟国产精品| 在线免费观看一区| 麻豆精品视频在线观看视频| 日韩伦理av电影| 久久久精品免费观看| 欧美日韩国产a| av在线不卡电影| 国产一区二区网址| 天堂久久久久va久久久久| 国产女主播一区| 日韩视频中午一区| 在线免费观看日本欧美| 成人性视频免费网站| 免费成人在线网站| 亚洲成年人网站在线观看| 国产精品免费免费| 久久亚洲私人国产精品va媚药| 欧美日韩视频第一区| 成人免费三级在线| 国产一区中文字幕| 另类小说图片综合网| 亚洲国产成人av网| 亚洲男帅同性gay1069| 国产清纯白嫩初高生在线观看91 | xfplay精品久久| 在线播放91灌醉迷j高跟美女 | 久久精品国产久精国产| 亚洲精品视频自拍| 国产精品电影一区二区| 久久久久久久av麻豆果冻| 欧美不卡123| 欧美一区二区三区男人的天堂 | 国产成人鲁色资源国产91色综| 日韩电影在线看| 日韩精品免费视频人成| 爽好多水快深点欧美视频| 亚洲最大成人网4388xx| 一区二区三区加勒比av| 亚洲乱码中文字幕| 樱桃视频在线观看一区| 亚洲精品老司机| 亚洲精品国产无天堂网2021| 亚洲男人的天堂一区二区| 亚洲另类在线一区| 国产欧美综合在线观看第十页| 精品一区免费av| 久久精品国产网站| 另类的小说在线视频另类成人小视频在线 | 亚洲国产精品久久久男人的天堂| 一区二区三区四区不卡视频| 一区二区在线看| 无吗不卡中文字幕| 蜜桃久久精品一区二区| 精品中文av资源站在线观看| 国产乱码精品一区二区三区av | 日本丰满少妇一区二区三区| 日本高清不卡视频| 欧美夫妻性生活| 日韩三级av在线播放| 精品成人私密视频| 亚洲欧洲精品成人久久奇米网| 中文字幕一区二区三区精华液 | 99这里只有久久精品视频| 色综合色综合色综合 | 日韩欧美卡一卡二| 久久久久久免费网| 亚洲三级在线看| 丝袜美腿一区二区三区| 国产一区中文字幕| 色综合一个色综合亚洲| 91精品国产综合久久国产大片| 欧美mv日韩mv国产网站app| 国产精品成人在线观看| 午夜精品视频一区| 国产传媒一区在线| 欧美三区在线视频| 亚洲精品一区二区三区影院 | 99精品欧美一区二区三区小说| 91福利国产成人精品照片| 日韩女优电影在线观看| 国产精品久久久久久福利一牛影视 | 成人av午夜影院| 国产一区欧美日韩| 91美女蜜桃在线| 日韩欧美专区在线| 亚洲色图欧洲色图婷婷| 美国毛片一区二区三区| 97se亚洲国产综合自在线 | 成人动漫精品一区二区| 欧美丝袜丝交足nylons图片| 久久久精品免费网站| 午夜成人免费视频| 成人国产精品免费| 精品日韩欧美在线| 亚洲一区在线电影| 成人av先锋影音| 久久久久久久免费视频了| 亚洲电影第三页| 91麻豆6部合集magnet| 久久久久久久久99精品| 日本不卡免费在线视频| 色婷婷国产精品| 国产精品乱码一区二区三区软件| 美女一区二区视频| www.爱久久.com| 日韩欧美一区二区免费| 亚洲影视在线观看| 6080yy午夜一二三区久久| 亚洲免费av观看| bt欧美亚洲午夜电影天堂| 亚洲精品一线二线三线| 日韩经典中文字幕一区| 欧美羞羞免费网站| 又紧又大又爽精品一区二区| 成人高清视频在线| 日本一区二区三区免费乱视频| 久久99精品久久久久久国产越南| 欧美丰满美乳xxx高潮www| 亚洲综合成人网| 欧美性受xxxx| 亚洲高清中文字幕| 欧美精品自拍偷拍动漫精品| 亚洲综合色视频| 欧美日韩精品一区二区三区蜜桃| 亚洲自拍偷拍欧美| 欧美亚洲国产一区二区三区va |