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

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

?? usbdma.c

?? philips系列產品之USB中的HID測試小程序
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			USBdma.c
** Last modified Date:	2005-8-6
** Last Version:		V1.0
** Descriptions:		LPC2148 USB DMA 控制器相關, 本文件只使能了物理端點 2 ~ 5 的 DMA 功能
**						LPC2148 USB DMA controller, the file only enable the DMA function of physical endpoint 2 ~ 5
**------------------------------------------------------------------------------------------------------
** 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 "USBCI.h"
#include "descriptor.h"

#include "USBDriver.h"
#include "USBdma.h"
#include "string.h"

#if DMA_ENGINE_EN 

/*
***********************************************************************
*		用戶可使用的API函數    API Function
***********************************************************************
*/
	
/************************************************************************************************************
** 函數名稱: USB_DMAInit()								Name	 : USB_DMAInit()
** 功能描述: LPC214x DMA引擎初始化						Function : Initialize DMA engine of LPC214x USB
************************************************************************************************************/
void USB_DMAInit(void)
{
	USB_InitUdcaTable();								/* 初始化UDCA表      Initialize the UDCA table */
		
	USB_InitEndpointDD(2);								/* 初始化各端點的DD  Initialize the DD of each endpoint */
	USB_InitEndpointDD(3);
	USB_InitEndpointDD(4);
	USB_InitEndpointDD(5);
	
														/* Enable System error, New DD Request and End of Transfer Interrupt of DMA */
	USBDMAIntEn = USBDMA_EOT_INT | USBDMA_NDD_INT | USBDMA_ERR_INT;		 /* 使能DMA的系統錯誤中斷, 新DD請求中斷, 傳輸結束中斷 */
	
	USBEpDMAEn = (0x01 << 2) | (0x01 << 3) | (0x01 << 4) | (0x01 << 5);
														/* 使能端點DMA功能   Enable Endpoint DMA */
}


/************************************************************************************************************
** 函數名稱: USB_DMASetTransLength()					Name	 : USB_DMASetTransLength()
** 功能描述: 設置 DMA 傳輸長度							Function : Config DMA transfer length
** 輸	 入: INT8U endp: 物理端點號						Input	 : INT8U endp: physical endpoint
			 INT16U len: 傳輸字節長度				  		  	   INT16U len: transfer byte length
** 輸	 出: 實際 DMA 傳輸長度							Output	 : the actual transfer length	
************************************************************************************************************/
INT32U USB_DMASetTransLength(INT8U endp, INT32U len)
{ 
	DD_DESCRIPTOR *pDD = USB_GetDDPointer(endp);		/* 取得 DD 指針 		   Get the DD pointer of the endpoint */

	USB_InitEndpointDD(endp);							/* 初始化DD      		   Initialize the DD */
	
	if (len > (pDD->control >> 16))						/* 長度超過本端點DMA緩沖區 len is beyond the dma buffer of the endpoint*/
		len = pDD->control >> 16;
	
	pDD->control &= 0x0000FFFF;
	pDD->control |= (len << 16);						/* 將len寫入DD	 		   Write the len into DD */

	return len;											
}


/************************************************************************************************************
** 函數名稱: USB_DMAStart_IN()							Name	 : USB_DMAStart_IN()
** 功能描述: 啟動 IN 端點的 DMA 傳輸					Function : start the DMA transfer of IN endpoint
** 輸	 入: INT8U endp: 物理端點號						Input	 : INT8U endp: physical endpoint
** 輸	 出: 無											Output	 : NULL	
************************************************************************************************************/
void USB_DMAStart_IN(INT8U endp)
{
	USBEPIntEn &= ~(0x01 << endp);						/* 清0 從機端點中斷使能寄存器來啟動 IN 傳輸 */
}														/* clear slave endpoint interrupt enable register to start IN transfer */


/************************************************************************************************************
** 函數名稱: USB_DMAGetBuffer()							Name	 : USB_DMAGetBuffer()
** 功能描述: 得到DMA緩沖區首址							Function : Initialize DMA engine of LPC214x USB
************************************************************************************************************/
INT8U* USB_DMAGetBuffer(INT8U endp)
{
	const INT32U DmaTbl[4] = {DMA_BUFFER_ADDR_EP02, DMA_BUFFER_ADDR_EP03,
							  DMA_BUFFER_ADDR_EP04, DMA_BUFFER_ADDR_EP05};

	return (INT8U *)((INT32U *)DmaTbl[endp - 2]);		/* 返回緩沖區字節指針   return the byte buffer pointer */
}




/*
***********************************************************************
*		DMA 中斷服務程序	 The Interrupt Service of the DMA 
***********************************************************************
*/

/************************************************************************************************************
** 函數名稱: Usb_DMAService()							Name	 : Usb_DMAService()
** 功能描述: DMA 中斷服務程序							Function : USB DMA Interrupt Service Program
************************************************************************************************************/
void USB_DMAService(void)
{
	INT32U dma_st;
		
	dma_st = USBDMAIntSt;								/* 讀DMA中斷狀態寄存器  Read USBDMAIntSt */

	if (dma_st & USBDMA_EOT_INT)										
		USB_DMATransferEnd();							/* 傳輸結束中斷			End of Transfer Interrupt */
		
	if (dma_st & USBDMA_NDD_INT)	
		USB_DMANewDDRequest();							/* 新DD請求中斷			New DD Request Interrupt */
	
	if (dma_st & USBDMA_ERR_INT)
		USB_DMASystemError();							/* 系統錯誤中斷			System Error Interrupt */
}


/************************************************************************************************************
** 函數名稱: USB_DMATransferEnd()						Name	 : USB_DMATransferEnd()
** 功能描述: DMA 傳輸結束中斷處理						Function : Process End of DMA Transfer Interrupt 
************************************************************************************************************/
void USB_DMATransferEnd(void)
{
	INT32U ep_st, endp;
	DD_DESCRIPTOR *pDD;
		
	ep_st = USBEoTIntSt;									/* 讀傳輸結束中斷寄存器       read End of Transfer Interrupt register */
	
	for (endp = 2; endp <= 5; endp++)
	{
		if(ep_st & (0x01 << endp))
		{													/* endp 端點中斷傳輸結束      endp endpoint Interrupt transfer end */
			pDD = USB_GetDDPointer(endp);
			
			if ((pDD->status & 0x1F) == DDS_OVER_RUN)		/* DMA錯誤 				   	  DMA error */
				USBEpDMAEn = (0x01 << endp); 			    /* 重新使能該端點的DMA功能    re-enable Endpoint DMA */ 
			
			if ((pDD->status & 0x1F) == DDS_NORMAL_COMP)	/* DMA正常結束 			  	  DMA normal complete */
			{
				if (endp == 2)	
					bEPPflags.bits.ep1_rxdma = 1;			/* 標志邏輯端點1 DMA接收成功  Flag logic ep0 DMA receiving sucessfully */
				
				if (endp == 4) 
					bEPPflags.bits.ep2_rxdma = 1;			/* 標志邏輯端點2 DMA接收成功  Flag logic ep2 DMA receiving sucessfully */
			}

			USBEoTIntClr |= (0x01 << endp);					/* 清除傳輸結束中斷狀態寄存器 clear end of transfer register */
			
			USB_InitEndpointDD(endp);						/* 重新初始化DD               re-Initialize DD */				
									
			if ((endp % 2) != 0)
				USBEPIntEn |= (0x01 << endp);				/* 重新使能該端點從機中斷 	  re-Enable the endpoint slave Interrupt */

		}				
	}
	
}


/************************************************************************************************************
** 函數名稱: USB_DMASystemError()						Name	 : USB_DMASystemError()
** 功能描述: DMA 系統中斷錯誤處理						Function : Process System Error Interrupt  
************************************************************************************************************/
void USB_DMASystemError(void)
{ 
	INT32U ep_st,endp;

	ep_st = USBSysErrIntSt;							
	
	for (endp = 2; endp < 5; endp++)
	{
		if(ep_st & (0x01 << endp))
		{
			USB_InitEndpointDD(endp);						/* 重新初始化DD               re-Initialize DD */

			USBEpDMAEn = (0x01 << endp);					/* 重新使能該端點的DMA功能    re-enable Endpoint DMA */ 			
			
			USBSysErrIntClr |= (0x01 << endp);				/* 清除系統錯誤中斷			  clear the System error interrupt */
			
			if ((endp % 2) != 0)
				USBEPIntEn |= (0x01 << endp);				/* 重新使能該 IN 端點從機中斷 re-Enable the IN endpoint slave Interrupt */
		}		
	}
}


/************************************************************************************************************
** 函數名稱: USB_DMANewDDRequest()						Name	 : USB_DMANewDDRequest()
** 功能描述: DMA 新 DD 請求中斷處理						Function : Process New DD Request Interrupt   
************************************************************************************************************/
void USB_DMANewDDRequest(void)
{
	INT32U ep_st,endp;

	ep_st = USBNDDRIntSt;
	
	for (endp = 2; endp <= 5; endp++)
	{
		if(ep_st & (0x01 << endp))
		{											
			USB_InitEndpointDD(endp);						/* 重新初始化DD               re-Initialize DD */
				
			USBEpDMAEn = (0x01 << endp);					/* 重新使能該端點的DMA功能    re-enable Endpoint DMA */ 
			
			USBNDDRIntClr = (0x01 << endp);					/* 清除新DD請求中斷			  clear the New DD Request Interrupt */
			
			if ((endp % 2) != 0)
				USBEPIntEn |= (0x01 << endp);				/* 重新使能該端點從機中斷 	  re-Enable the endpoint slave Interrupt */
		}		
	}

}

/*
***********************************************************************
*		本文件用到的子程序	 The Subprogram used by this file 
***********************************************************************
*/
	
/************************************************************************************************************
** 函數名稱: USB_InitUdcaTable()						Name	 : USB_InitUdcaTable()
** 功能描述: 初始化DMA引擎的UDCA寄存器					Function : Initialize the UDCA reigister and UDCA table 
			 和UDCA表											   of DMA engine 
************************************************************************************************************/
void USB_InitUdcaTable(void)
{
	INT32U *pUDCA;
	
	USBUCDAH = USB_RAM_ADDRESS;							/* 初始化UDCA頭寄存器	 Initialize the UDCA register */
	pUDCA = (INT32U *)USBUCDAH;							/* 取出UDCA寄存器值		 Get the value of UDCA register */

	pUDCA[2] = (INT32)DD_ADDRESS_EP02;					/* 建立UDCA表			 Build UDCA table */
	pUDCA[3] = (INT32)DD_ADDRESS_EP03;
	pUDCA[4] = (INT32)DD_ADDRESS_EP04;
	pUDCA[5] = (INT32)DD_ADDRESS_EP05;
}


/************************************************************************************************************
** 函數名稱: USB_InitEndpointDD()						Name	 : USB_InitEndpointDD()
** 功能描述: 初始化端點的DD								Function : Initialize the DD of the endpoint
** 輸	 入: INT8U endp: 物理端點號						Input	 : INT8U endp: physical endpoint
** 輸	 出: 無											Output	 : NULL	
************************************************************************************************************/
void USB_InitEndpointDD(INT8U endp)
{
	DD_DESCRIPTOR *pDD = USB_GetDDPointer(endp);					 /* 取得 DD 指針  	 Get the DD pointer of the endpoint */

	pDD->next_dd_addr = 0;											 /* 清零兩個成員 	 Clear two members */
	pDD->status = 0;

	switch(endp)
	{
		case 0x02: 	pDD->control = (EP1_PACKET_SIZE << 5) + 		 /* 寫端點信息包大小 Write endpoint packet size */
							       (EP02_DMA_BUFFER_LENGTH << 16);	 /* 寫DMA緩沖區大小  Write dma buffer size      */
					pDD->start_addr = DMA_BUFFER_ADDR_EP02;			 /* 寫DMA緩沖區地址  Write dma buffer address   */
					break;
					
		case 0x03:  pDD->control = (EP1_PACKET_SIZE << 5) + 
					               (EP03_DMA_BUFFER_LENGTH << 16);
					pDD->start_addr = DMA_BUFFER_ADDR_EP03;
					break;

		case 0x04:  pDD->control = (EP2_PACKET_SIZE << 5) + 
								   (EP04_DMA_BUFFER_LENGTH << 16);
					pDD->start_addr = DMA_BUFFER_ADDR_EP04;
					break;

		case 0x05: 	pDD->control = (EP2_PACKET_SIZE << 5) + 
								   (EP05_DMA_BUFFER_LENGTH << 16);
					pDD->start_addr = DMA_BUFFER_ADDR_EP05;
					break;
					
		default: 	break;
	}
}


/************************************************************************************************************
** 函數名稱: USB_GetDDPointer()							Name	 : USB_GetDDPointer()
** 功能描述: 獲取端點的DD指針							Function : Get the DD pointer of the endpoint
** 輸	 入: INT8U endp:	  物理端點號				Input	 : INT8U endp: physical endpoint
** 返	 回: DD_DESCRIPTOR *  端點的 DD 描述符指針		Return	 : the DD pointer of the endpoint	
************************************************************************************************************/
DD_DESCRIPTOR *USB_GetDDPointer(INT8U endp)
{
	INT32U dd_addr;
	
	dd_addr = DD_BASE_ADDRESS + DD_SIZE * (endp - 2);	/* 計算地址   	 calculate the address */

	return (DD_DESCRIPTOR *)((INT32U *)dd_addr);		/* 轉換指針類型  change the type of the pointer */
}

#endif
/*******************************************************************************************************
**                            End Of File
********************************************************************************************************/



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲品质自拍视频网站| 成人免费视频免费观看| 粉嫩嫩av羞羞动漫久久久| 91久久精品网| 国产精品国产三级国产有无不卡| 亚洲国产一区二区视频| 成年人国产精品| 日韩午夜三级在线| 一区二区三区中文字幕电影| 高清不卡在线观看av| 精品国产免费久久| 丝瓜av网站精品一区二区| 色94色欧美sute亚洲线路二| 欧美极品xxx| 国内精品在线播放| 欧美一二三区在线观看| 日产国产欧美视频一区精品| 欧美亚洲丝袜传媒另类| 亚洲综合色丁香婷婷六月图片| 风间由美性色一区二区三区| 久久久精品tv| 国产黄色精品网站| 欧美国产一区二区| 国产丶欧美丶日本不卡视频| 国产午夜亚洲精品羞羞网站| 国产精品自拍av| 欧美mv和日韩mv国产网站| 91网站视频在线观看| 国产欧美综合在线观看第十页| 日本sm残虐另类| 欧美日韩第一区日日骚| 中文字幕一区二区三区不卡在线| 欧美三级日韩三级国产三级| 国产自产v一区二区三区c| 一区二区三区在线不卡| 久久久久久久久久久久久久久99| 欧美中文字幕亚洲一区二区va在线| 久久99精品国产.久久久久| 亚洲精选视频在线| 久久综合精品国产一区二区三区 | 成人自拍视频在线| 亚洲国产视频一区二区| 中文字幕乱码一区二区免费| 日韩欧美亚洲一区二区| 色天使久久综合网天天| 国产成人精品一区二区三区网站观看| 亚洲国产成人tv| 亚洲欧美乱综合| 国产午夜精品在线观看| 精品久久国产97色综合| 欧美性xxxxx极品少妇| 成人国产在线观看| 国产中文字幕精品| 日本午夜一本久久久综合| 一区二区三区精品在线| 中文字幕乱码亚洲精品一区| 亚洲精品一区二区在线观看| 欧美精品亚洲二区| 在线观看av不卡| 一本色道久久综合亚洲91| 国产成人在线色| 国产高清不卡一区| 国产乱码精品一区二区三区忘忧草| 免费视频一区二区| 五月天一区二区三区| 一区av在线播放| 亚洲色图.com| 亚洲欧美日韩系列| 亚洲欧美国产高清| 亚洲欧美日韩一区二区三区在线观看| 国产精品成人一区二区艾草 | 91丨porny丨国产入口| 国产91精品一区二区麻豆网站| 国产酒店精品激情| 国产精品18久久久久久vr| 国产激情一区二区三区四区 | 欧美日韩高清一区二区不卡| 欧美午夜精品一区| 欧美三电影在线| 欧美午夜不卡视频| 欧美人体做爰大胆视频| 欧美日韩国产综合久久| 欧美精品一级二级三级| 欧美一级片在线看| 欧美变态凌虐bdsm| 久久先锋影音av| 欧美国产欧美综合| 亚洲免费观看高清| 亚洲图片欧美一区| 日韩高清不卡一区| 韩国欧美国产1区| 成熟亚洲日本毛茸茸凸凹| 91婷婷韩国欧美一区二区| 在线视频你懂得一区二区三区| 欧美人xxxx| 精品国产免费人成在线观看| 国产欧美一区二区精品性| 中文字幕字幕中文在线中不卡视频| 亚洲激情一二三区| 美日韩一区二区| 成人免费高清视频| 91蝌蚪porny成人天涯| 欧美精品v国产精品v日韩精品| 精品精品欲导航| 亚洲免费看黄网站| 蜜臀久久99精品久久久画质超高清| 九九**精品视频免费播放| 99国产精品久久久久久久久久久| 欧美日韩极品在线观看一区| 久久久久国产精品人| 亚洲激情男女视频| 激情五月婷婷综合| 色狠狠综合天天综合综合| 精品国精品国产| 亚洲精品日韩一| 韩国精品一区二区| 欧美亚洲禁片免费| 国产日韩精品一区二区三区| 午夜欧美在线一二页| 国产a级毛片一区| 777a∨成人精品桃花网| 中文字幕欧美一区| 另类小说色综合网站| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 成人av免费在线| 欧美一区二区三区视频在线 | 精品国产麻豆免费人成网站| 亚洲男帅同性gay1069| 麻豆精品久久久| 欧美亚州韩日在线看免费版国语版| 2023国产精品| 日韩高清不卡一区二区三区| 91蝌蚪porny成人天涯| 久久久一区二区| 日本怡春院一区二区| 99久久er热在这里只有精品15| 日韩一级黄色片| 性欧美大战久久久久久久久| 91在线小视频| 国产欧美精品在线观看| 美女视频网站久久| 欧美色精品天天在线观看视频| 国产精品你懂的在线| 国模娜娜一区二区三区| 欧美一区二区三区在线观看视频| 亚洲你懂的在线视频| 北条麻妃一区二区三区| 欧美成人精品1314www| 日韩va欧美va亚洲va久久| 91久久香蕉国产日韩欧美9色| 久久精品日产第一区二区三区高清版| 人人超碰91尤物精品国产| 欧美性视频一区二区三区| 亚洲欧洲日韩女同| 成人av在线资源网| 国产精品久久久久天堂| 成人久久18免费网站麻豆| 国产三级一区二区| 国产精品456露脸| 国产亚洲午夜高清国产拍精品| 国产在线一区二区| 亚洲精品一区二区三区影院| 免费在线一区观看| 日韩欧美国产成人一区二区| 麻豆成人av在线| 久久亚洲精精品中文字幕早川悠里| 奇米影视7777精品一区二区| 日韩美女视频在线| 国精产品一区一区三区mba桃花 | 国产精品久久久久影院亚瑟| 成人午夜视频在线观看| 国产精品久久影院| 91浏览器入口在线观看| 亚洲一区中文日韩| 欧美精品精品一区| 青青草一区二区三区| 欧美大度的电影原声| 国产精品一区二区三区网站| 国产欧美一区二区精品久导航| 成人性生交大片| 亚洲免费电影在线| 欧美电影一区二区| 久久精品免费看| 国产偷国产偷亚洲高清人白洁 | 亚洲激情欧美激情| 欧美丰满少妇xxxxx高潮对白| 麻豆91小视频| 国产精品国产馆在线真实露脸| 一本到一区二区三区| 亚洲1区2区3区4区| 久久久久久黄色| 99久久er热在这里只有精品15| 香蕉影视欧美成人| 2020国产成人综合网| 91色在线porny| 视频精品一区二区| 国产人伦精品一区二区| 欧美午夜精品久久久久久孕妇| 精一区二区三区| 亚洲人成7777|