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

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

?? usbisr.c

?? 開發環境ADS 通過編寫一段程序使PC機與實驗箱的從USB相連接。連接的時候
?? C
字號:
/************************************************************************
 *File	: Usbisr.c															*
 *By 	: hugang, hgx2000@mail.china.com								*
 ************************************************************************/ 

#include "armusb.h"
#include "..\inc\44blib.h"
#include <string.h>
/**************************************************************************
 *Public static data
 **************************************************************************/
extern ARMUSBFLAGS bUSBFlags;
/* Control endpoint TX/RX buffers */
extern CONTROL_XFER ControlData;
/* ISR static vars */
extern unsigned char Ep1Buf[EP1_PACKET_SIZE];
extern unsigned char Ep2Buf[EP2_PACKET_SIZE];
extern unsigned char Ep1Len, Ep2Len;

/************************************************************************************************
 *USB中斷服務程序																				*
 *區分中斷源,并執行相應的程序																	*
 ************************************************************************************************/
void fn_usb_isr()
{
	unsigned int i_st;
	
	bUSBFlags.bits.bIn_ISR = 1;
	i_st = UsbReadInterruptRegister();

	if(i_st != 0) {

		DEBUGF(USB_ISR_DEBUG,("isr = %x\n", i_st));
		
		if(i_st & USB_D12_INT_BUSRESET) {
			bus_reset();
			bUSBFlags.bits.bBus_Reset = 1;
		}
		else {
			if(i_st & USB_D12_INT_EOT) 				dma_eot();
			if(i_st & USB_D12_INT_SUSPENDCHANGE) 	bUSBFlags.bits.bSuspend = 1;
			if(i_st & USB_D12_INT_ENDP0IN) 			ep0_txdone();
			if(i_st & USB_D12_INT_ENDP0OUT) 		ep0_rxdone();
			if(i_st & USB_D12_INT_ENDP1IN) 			ep1_txdone();
			if(i_st & USB_D12_INT_ENDP1OUT) 		ep1_rxdone();
			if(i_st & USB_D12_INT_ENDP2IN) 			main_txdone();
			if(i_st & USB_D12_INT_ENDP2OUT) 		main_rxdone();
		}
	}
	
	bUSBFlags.bits.bIn_ISR = 0;
}

void bus_reset(void)
{
	
}

/************************************************************************************************
 *端點0接收中斷處理程序																			*
 *提取setup包																					*
 *接收主機發往設備的數據																		*
 *程序首先判斷是否為setup包,如果是則讀取設備請求,并進一步判斷設備請求的方向,					*
 *和設備請求是否帶有數據,及數據的長度															*
 ************************************************************************************************/
void ep0_rxdone(void)
{
	unsigned char ep_last;
	unsigned char i;

	ep_last = UsbReadLastTransactionStatus(0); 					// 清端點0中斷標志
	DEBUGF(USB_EP0_DEBUG,("LastEP0RxStatus = %x\n",ep_last));
	
	if (ep_last & USB_D12_SETUPPACKET) 
	{																// 判斷是否為setup包
		ControlData.wLength = 0;
		ControlData.wCount = 0;
		if( UsbReadEndpoint(0, (unsigned char *)(&(ControlData.DeviceRequest)),
			sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST) ) 
		{															// setup包出錯,返回
			UsbSetEndpointStatus(0, 1);							
			UsbSetEndpointStatus(1, 1);
			bUSBFlags.bits.bControl_State = USB_IDLE;
			return;
		}
																
		UsbAcknowledgeEndpoint(0);								// 端點應答,釋放端點
		UsbAcknowledgeEndpoint(1);
		
		ControlData.wLength = ControlData.DeviceRequest.wLength;	// 設備請求的數據長度
		ControlData.wCount = 0;
	
		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) 
		{															// 設備->主機
			bUSBFlags.bits.bSetup_Packet = 1;
			bUSBFlags.bits.bControl_State = USB_TRANSMIT; 			// 設置為發送狀態		
		} 
		else 
		{															// 主機->設備
			if (ControlData.DeviceRequest.wLength == 0) 
			{														// 無數據的設備請求
				bUSBFlags.bits.bSetup_Packet = 1;
				bUSBFlags.bits.bControl_State = USB_IDLE; 			
			} 
			else 
			{														// 有數據的設備請求
				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) 
				{													// 設備請求出錯
					bUSBFlags.bits.bControl_State = USB_IDLE;
					UsbSetEndpointStatus(0, 1);
					UsbSetEndpointStatus(1, 1);
				} 
				else 
				{
					bUSBFlags.bits.bControl_State = USB_RECEIVE; 	// 設置為接收狀態
				}
			}
		}
	}
	else if (bUSBFlags.bits.bControl_State == USB_RECEIVE) 
	{																// 處于接收狀態
		i = UsbReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE);
		ControlData.wCount += i;									// 數據計數指針增加
		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) 
		{															// 設備請求的數據接收完畢
			bUSBFlags.bits.bSetup_Packet = 1;
			bUSBFlags.bits.bControl_State = USB_IDLE;
		}
	}
	else 
	{
		bUSBFlags.bits.bControl_State = USB_IDLE;
	}
}

/************************************************************************************************
 *端點0發送中斷處理程序																			*
 *將設備請求所需數據發給主機																	*
 ************************************************************************************************/
void ep0_txdone(void)
{
	unsigned char ep_last;
	short i = ControlData.wLength - ControlData.wCount;				// 計算剩下的數據的長度

	ep_last = UsbReadLastTransactionStatus(1); 							// 清端點0中斷標志
	DEBUGF(USB_EP0_DEBUG,("LastEP0TxStatus = %x\n",ep_last));
	
	if (bUSBFlags.bits.bControl_State != USB_TRANSMIT) return;		// 非發送狀態,返回
	
	if( i >= EP0_PACKET_SIZE) 
	{																// 剩下數據大于16B,先發送前16B				
		UsbWriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
		ControlData.wCount += EP0_PACKET_SIZE;
		bUSBFlags.bits.bControl_State = USB_TRANSMIT;
	}
	else if( i != 0) 
	{																// 發送剩下的數據
		UsbWriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
		ControlData.wCount += i;
		bUSBFlags.bits.bControl_State = USB_IDLE;
	}
	else if (i == 0){
		UsbWriteEndpoint(1, 0, 0); 							// 發送零數據包
		bUSBFlags.bits.bControl_State = USB_IDLE;					// 發送結束
	}
}


void dma_eot(void)
{
	if(bUSBFlags.bits.bDMA_State == DMA_PENDING)
		bUSBFlags.bits.bSetup_DMA = 1;
	else
		bUSBFlags.bits.bDMA_State = DMA_IDLE;
}

/************************************************************************************************
 *端點1接收中斷處理程序																			*
 *																								*
 ************************************************************************************************/
void ep1_rxdone(void)
{
	unsigned char ep_last;
	static unsigned char i;
	DEBUGF(USB_EP1_DEBUG, ("\nep1_rxdone %d\n",i));
	i++;

	ep_last = UsbReadLastTransactionStatus(2); 						// 清端點1中斷標志
	DEBUGF(USB_EP1_DEBUG,("LastEP1RxStation = %x\n",ep_last));

	if (ep_last & USB_D12_SUCCESS) 
	{
		memset(Ep1Buf, 0, sizeof(Ep1Buf));	
		Ep1Len = UsbReadEndpoint(2, Ep1Buf, sizeof(Ep1Buf));		// 讀取數據
	}
	
	bUSBFlags.bits.bEP1_RxDone = 1;									// 標志接收到數據
}

/************************************************************************************************
 *端點1發送中斷處理程序																			*
 *																								*
 ************************************************************************************************/
void ep1_txdone(void)
{
	unsigned char ep_last;

	DEBUGF(USB_EP1_DEBUG, ("\nep1_txdone\n"));

	ep_last = UsbReadLastTransactionStatus(3); 								// 請端點1中斷標志
	DEBUGF(USB_EP1_DEBUG,("LastEP1TxStation = %x\n",ep_last));
}

/************************************************************************************************
 *主端點(端點2)接收中斷處理程序																	*
 *																								*
 ************************************************************************************************/
void main_rxdone(void)
{
	static unsigned char i;
	unsigned char ep_last;
	
	DEBUGF(USB_EP2_DEBUG, ("\nep2_rxdone %d\n",i));
	i++;

	ep_last = UsbReadLastTransactionStatus(4); /* Clear interrupt flag */
	DEBUGF(USB_EP2_DEBUG,("LastEP2RxStation = %x\n",ep_last));

	if (ep_last & USB_D12_SUCCESS) 
	{
		memset(Ep2Buf, 0, sizeof(Ep2Buf));
		Ep2Len = UsbReadEndpoint(4, Ep2Buf, sizeof(Ep2Buf));		// 讀取數據
	}

	bUSBFlags.bits.bEP2_RxDone = 1;					// 標志接收到數據
}

/************************************************************************************************
 *主端點(端點2)發送中斷處理程序																	*
 *																								*
 ************************************************************************************************/
void main_txdone(void)
{
	unsigned char ep_last;
	
	DEBUGF(USB_EP2_DEBUG, ("\nep2_txdone\n"));
	
	ep_last = UsbReadLastTransactionStatus(5); /* Clear interrupt flag */
	DEBUGF(USB_EP2_DEBUG,("LastEP2TxStation = %x\n",ep_last));

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91浏览器在线视频| 日韩一区欧美一区| 国内精品久久久久影院一蜜桃| 欧美日韩免费在线视频| 人禽交欧美网站| 国产免费观看久久| 56国语精品自产拍在线观看| 国产99久久久久| 天天色 色综合| 亚洲色图色小说| 一区二区成人在线| 老色鬼精品视频在线观看播放| 精品少妇一区二区三区| 狠狠色伊人亚洲综合成人| 国产精品看片你懂得| 91精品综合久久久久久| 成人av中文字幕| 美女视频免费一区| 亚洲成人动漫精品| 国产精品三级电影| 3d动漫精品啪啪一区二区竹菊| 91亚洲国产成人精品一区二三| 亚洲综合视频在线| 亚洲综合成人在线视频| 国产精品五月天| 国产精品久久影院| 久久精品这里都是精品| 久久精品免视看| 国产亚洲综合性久久久影院| 久久这里只精品最新地址| 欧美大片在线观看| 久久久久综合网| 国产精品乱码妇女bbbb| 最新日韩av在线| 国产精品三级视频| 亚洲黄色小视频| 丝袜美腿一区二区三区| 美女一区二区三区在线观看| 蜜臀av亚洲一区中文字幕| 精品一区二区三区免费视频| 激情综合网天天干| 99r精品视频| 91麻豆精品91久久久久同性| 日韩欧美一级片| 国产欧美日韩三级| 亚洲成a天堂v人片| 精品一二三四区| 91精品91久久久中77777| 欧美三级电影在线观看| 日韩精品资源二区在线| 国产精品午夜免费| 免费欧美在线视频| 91美女视频网站| 久久精品视频一区二区三区| 亚洲综合无码一区二区| 国产麻豆成人精品| 7777精品伊人久久久大香线蕉经典版下载 | 美女看a上一区| 成人av在线影院| 国产亚洲一本大道中文在线| 亚洲国产cao| 在线观看不卡一区| 国产精品久久久久久久久图文区 | 中文字幕成人在线观看| 日本亚洲最大的色成网站www| 成人18视频日本| 国产精品久久久久久久久果冻传媒| 日本在线播放一区二区三区| 色天天综合色天天久久| 亚洲日本青草视频在线怡红院 | 久久久久久久久免费| 美女视频网站黄色亚洲| 26uuu另类欧美| 国产成人啪免费观看软件| 久久美女艺术照精彩视频福利播放| 日韩电影一区二区三区四区| 欧美丰满少妇xxxxx高潮对白| 婷婷综合五月天| 日韩欧美国产小视频| 国产一区二区三区免费| 国产精品青草综合久久久久99| 国产99久久久国产精品潘金网站| 国产精品麻豆一区二区| 成人高清伦理免费影院在线观看| 中文字幕免费观看一区| 972aa.com艺术欧美| 亚洲成人av资源| 国产丝袜在线精品| 欧美日韩午夜在线| 国产一区 二区 三区一级| 亚洲日本护士毛茸茸| 日韩欧美国产一二三区| 成人激情黄色小说| 日本不卡不码高清免费观看| 在线视频中文字幕一区二区| 久久精品久久综合| 91精品国产综合久久蜜臀| 99久久国产综合精品女不卡| 紧缚奴在线一区二区三区| 一区二区三区免费| 欧美激情一区不卡| 精品国产91九色蝌蚪| 51精品秘密在线观看| 99re66热这里只有精品3直播| 国产精品一区二区视频| 蜜桃精品视频在线| 亚洲午夜精品在线| 偷拍与自拍一区| 午夜日韩在线电影| 亚洲自拍偷拍麻豆| 日韩精品一区第一页| 午夜精品福利视频网站| 亚洲资源在线观看| 视频一区国产视频| 秋霞国产午夜精品免费视频| 日韩国产欧美一区二区三区| 日本成人在线一区| 国产福利一区二区| 国产激情偷乱视频一区二区三区| 国产麻豆9l精品三级站| 成人中文字幕合集| 欧美最猛性xxxxx直播| 91精品蜜臀在线一区尤物| 欧美精品一区二区三区一线天视频 | √…a在线天堂一区| 亚洲午夜精品网| 国产成人无遮挡在线视频| 99精品欧美一区二区三区综合在线| 91免费在线播放| 91精品欧美综合在线观看最新| 久久老女人爱爱| 亚洲一区二区精品视频| 久久国产精品72免费观看| 91在线一区二区| 欧美大片免费久久精品三p| 亚洲另类在线一区| 狠狠狠色丁香婷婷综合久久五月| 色综合久久综合网97色综合| 欧美一区二区三区四区视频| 精品国产a毛片| 亚洲大片在线观看| 成人免费的视频| 久久网站最新地址| 午夜激情一区二区| 欧美日韩黄视频| 亚洲午夜成aⅴ人片| 色综合一区二区| 亚洲精选视频免费看| 国产a视频精品免费观看| 日韩免费高清av| 精品中文字幕一区二区小辣椒 | 精品美女被调教视频大全网站| 一区二区三区不卡视频在线观看| 成人app网站| 亚洲精品国产精品乱码不99| 91在线免费看| 亚洲一区二区三区四区在线免费观看 | zzijzzij亚洲日本少妇熟睡| 国产欧美日韩不卡免费| 成人av网址在线观看| 亚洲美女屁股眼交| 欧洲av在线精品| 久久电影网站中文字幕| 久久综合色综合88| 国产剧情一区二区三区| 国产精品不卡一区二区三区| 色综合天天综合网国产成人综合天| 亚洲免费观看高清在线观看| 欧美视频在线不卡| 麻豆精品视频在线观看| 国产精品美女久久久久久| 在线观看国产一区二区| 麻豆成人综合网| 亚洲欧美激情插 | 欧美视频完全免费看| 国产一区二区在线观看免费| 亚洲私人影院在线观看| 欧美一区在线视频| 99精品视频一区二区三区| 激情偷乱视频一区二区三区| 亚洲精品高清在线| 国产精品久久久久一区二区三区共| 欧美亚洲国产一区在线观看网站| 国产精品一区一区| 久久机这里只有精品| 日韩精品一级中文字幕精品视频免费观看| 国产三级久久久| 欧美精品一区二区三区视频| 91麻豆精品国产91| 欧美男人的天堂一二区| 国产又粗又猛又爽又黄91精品| 亚洲激情av在线| 亚洲精品一二三| 亚洲一区国产视频| 一区二区三区中文免费| 亚洲午夜精品在线| 亚洲成人在线观看视频| 亚洲一区二区3| 麻豆久久久久久久| 国产裸体歌舞团一区二区|