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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbdrv.c

?? USBN9603的DEMO程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*----------------------------------------------------------------------------
 *  Copyright (c) 2001 by National Semiconductor Corporation
 *  National Semiconductor Corporation
 *
 *  All rights reserved
 *
 *<<<-------------------------------------------------------------------------
 * File Contents:
 *	usb.c - USB related functions
 *
 *  Project: USB Demo firmware
 *  Author : Yan Nosovitsky
 *  Date   : Oct 2001
 *----------------------------------------------------------------------->>>*/

#include "..\include\all.h"



#define BPTG \
__asm__("push $1,r0"); \
__asm__("movw $0,r0"); \
__asm__("lpr sp,carl"); \
__asm__("lpr r0,carh"); \
__asm__("movw $0xc1,r0"); \
__asm__("lpr r0,dcr"); \
__asm__("pop $1, r0"); 

/*=====================================================================
 *					USB Driver Definitions
 *=====================================================================*/
extern Device_buffers_t device_buffers;

endpoint_t DMA_ep;

endpoint_status_t tx0_ep_stat;
endpoint_status_t tx1_ep_stat, tx2_ep_stat;
endpoint_status_t rx1_ep_stat, rx2_ep_stat;
endpoint_status_t tx3_ep_stat;

endpoint_status_t *endpoint_stat[] =
{
	&tx0_ep_stat,	
	&tx1_ep_stat,
	&rx1_ep_stat,
	&tx2_ep_stat,
	&rx2_ep_stat,
	&tx3_ep_stat, 
	NULL  
};



void endpoint_status_init() {

	int i;

	for(i=0;i<NUM_OF_ENDPOINTS;i++) {
		if (endpoint_stat[i] != NULL) {
			endpoint_stat[i]->FIFO_status = EMPTY;
			if (i==0)
				/*----------------
				* control endpoint
				*-----------------*/
				endpoint_stat[i]->toggle_bit = 0x01;
			else 
				/*----------------------
				* tx & rx data endpoints
				*-----------------------*/
				endpoint_stat[i]->toggle_bit = 0x00;
		}
	}
}

const int usbn9604_tx_endpoint_addr[] =
{
	TXD0,	/* Endpoint 0 */
	TXD1,	/* Endpoint 1 */
	0xFF,
	TXD2,	/* Endpoint 3 */
	0xFF,
	TXD3,	/* Endpoint 5 */
	0xFF
};

const int usbn9604_rx_endpoint_addr[] =
{
	RXD0,	/* Endpoint 0 */
	0xFF,
	RXD1,	/* Endpoint 2 */
	0xFF,
	RXD2,	/* Endpoint 4 */
	0xFF,
	RXD3	/* Endpoint 6 */
};

const int fifo_sizes[] = 
{
	EP0_FIFO_SIZE,			/* control tx0, rx0 */
	TX_BULK_EP_FIFO_SIZE, 	/* bulk tx */
	RX_BULK_EP_FIFO_SIZE, 	/* bulk rx */
	TX_ISO_EP_FIFO_SIZE,  	/* ISO tx  */
	RX_ISO_EP_FIFO_SIZE,  	/* ISO rx  */
	TX_INTR_EP_FIFO_SIZE, 	/* interrupt tx */
	RX_INTR_EP_FIFO_SIZE  	/* interrupt rx */
};

const int endpoint_to_fifo[] =
{
	TX_FIFO0, /* endpoint0 TX/RX FIFO0 */
	TX_FIFO1, /* endpoint1 */
	RX_FIFO1, /* endpoint2 */
	TX_FIFO2, /* endpoint3 */
	RX_FIFO2, /* endpoint4 */
	TX_FIFO3, /* endpoint5 */
	RX_FIFO3  /* endpoint6 */
};
/*=============================================================================
 *						Data Buffer Definitions
 *=============================================================================*/

control_buffer_t control_send_buffer;
control_buffer_t control_receive_buffer;

byte request_buffer[EP0_FIFO_SIZE];

void clear_control_buffer(control_buffer_t* control_buff) {

	control_buff->data = NULL;
	control_buff->bytes_counter = 0;
}
/*=====================================================================
 *					USB Driver Implementations
 *=====================================================================*/
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void usb_node_handler()
*
*	Parameters
*		None
*
*	Returns
*		None
*
*	Description
*		 USB interrupt handler.
----------------------------------------------------------------------------------------------*/

#pragma interrupt(usb_node_handler)

void usb_node_handler(void){
	byte usbn_event;
	PCDOUT &= 0x0;
	_disable_();	
	
	/*-------------------
	* Clear the interrupt 
	*-------------------*/
	ICU_clear_int(USB_NODE_INT);

	while(usbn_event = read_usb(MAEV))
	{
		if (usbn_event & RX_EV)
			USBN9604_rx_event_handler();
		if (usbn_event & ALT) 
			USBN9604_alt_event_handler();
		if (usbn_event & TX_EV) 	
			USBN9604_tx_event_handler();
		if (usbn_event & NAK) 
		{
			if (read_usb(NAKEV) & 0x10)
			{/*----------
			  * NAK OUT
			  *---------*/
				FLUSHTX0;
				FLUSHRX0;
				/*------------------
				* re enable receving
				*-------------------*/
				DISABLE_TX(ENDPOINT_0);
				ENABLE_RX(ENDPOINT_0);
			}
		}
	}
	_enable_(); 
}

/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USBN9602_tx_event_handler()
*
*	Parameters
*		None
*
*	Returns
*		None
*
*	Description
*		TX event handler
----------------------------------------------------------------------------------------------*/

__inline__ void USBN9604_tx_event_handler(void)
{
	volatile byte tx_event = TX_EVENTS;
	byte evnt_mask = 1;
	byte txstat;

	while(tx_event) 
	{
		switch(tx_event & evnt_mask) 
		{
			case TX_FIFO0: 
				/*-----------
				* endpoint 0
				* zero tx endpoint
				*-----------*/
				txstat = EP_TXSTATUS(ENDPOINT_0);
				if (txstat & ACK_STAT)
				{
				  /*--------------------------------------
				  * previous data packet from current 
				  * ep was received successfully by host
				  *-------------------------------------*/
					endpoint_stat[ENDPOINT_0]->FIFO_status = EMPTY;
					if (control_send_buffer.bytes_counter > 0) 
					{
						/*-------------------------------------
						* there is additional data to be sent
						*------------------------------------*/
						fill_control_fifo();
						usbn9604_tx_enable(ENDPOINT_0);
					}
					else if (device_buffers.zero_data == 1) 
					{
						/*-------------------
						* zero data required
						*-------------------*/
						device_buffers.zero_data = 0;
						FLUSH_TXEP(ENDPOINT_0);
						usbn9604_tx_enable(ENDPOINT_0);
					}
					else 
					{
						FLUSH_TXEP(ENDPOINT_0);
						ENABLE_RX(ENDPOINT_0);	
					}
				}
				else 
					/*-------------------
					* there is no ACK
					* Re-enable receiving 
					*--------------------*/
					ENABLE_RX(ENDPOINT_0);	
				break;
			case TX_FIFO1: 
				/*----------------
				* endpoint 1
				* bulk tx endpoint
				*----------------*/
				txstat = EP_TXSTATUS(ENDPOINT_1);
				if (txstat & ACK_STAT)
				{	
					/*-----------------------------------------------------------------------
					 * previous data packet from current ep was received successfully by host
					 *-----------------------------------------------------------------------*/
					FLUSHTX1;
					send_event(EVT_USB_BULK_TX);
				}
				else  
					/*------------------------------------
					* there is no ACK
					* retransmit the previous data packet
					*------------------------------------*/
					usbn9604_tx_retransmit_enable(ENDPOINT_1); 	
				break;
			case TX_FIFO2: 
				/*-----------------------
				* endpoint 3
				* isochronous tx endpoint
				*-----------------------*/
				txstat = EP_TXSTATUS(ENDPOINT_3);
	//			PCDOUT &= ~0x2;
	//			PCDOUT |=  0x2;
				if (txstat & ACK_STAT)
				{	
					/*-----------------------------------------
					* Data was sent in response to an IN token
					*-----------------------------------------*/
					FLUSHTX2;
					send_event(EVT_USB_ISO_TX);
				}
				else 
				{
					/*------------------------
					* ISO frame was discarded
					* Do nothing
					*------------------------*/
				}
				break;
			case TX_FIFO3:
				/*-----------------------
				* endpoint 5
				* interrupt tx endpoint
				*-----------------------*/
				txstat = EP_TXSTATUS(ENDPOINT_5);
				if (txstat & ACK_STAT)
				{	
					/*-----------------------------------------------------------------------
					 * previous data packet from current ep was received successfully by host
					 *-----------------------------------------------------------------------*/
					 FLUSHTX3;
				}
				else 
					/*------------------------------------
					* there is no ACK
					* retransmit the previous data packet
					*------------------------------------*/
					usbn9604_tx_retransmit_enable(ENDPOINT_5);
				break;		
			case TX_UDRN0:
			case TX_UDRN1:
			case TX_UDRN2:
			case TX_UDRN3:
				break;
			default:
				/*-------------------------------
				*  No event with this event mask 
				*-------------------------------*/
				break;
		}
		tx_event &= ~evnt_mask;
		evnt_mask = evnt_mask << 1;
	}
}


/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USBN9604_alt_event_handler()
*
*	Parameters
*		None
*
*	Returns
*		None
*
*	Description
*		ALT event handler
----------------------------------------------------------------------------------------------*/

void USBN9604_alt_event_handler(void)
{
	volatile byte alt_event = ALT_EVENTS;
	volatile byte dma_event = 0;
	byte evnt_mask = 1;
	byte tmp = 0;
	extern void USB_dev_reset(void);

	while(alt_event) 
	{
		switch(alt_event & evnt_mask) 
		{
			case ALT_DMA: 
				/*------------
				*  DMA events 
				*------------*/
				dma_event = DMA_EVENTS ;
				/*--------------------------------
				* clear all dma events to be sure
				*--------------------------------*/
				write_usb(DMAEV,0x00);		
				switch (dma_event&0xf){
					case DMA_DSIZ:
						/*----------------------------------------------------------
						* Only for DMA receive operation 
						* It indicates that a packet has been received which is less
						* then the full length of the FIFO. This normally indicates 
						* the end of transfer.
						* ---------------------------------------------------------*/
						/*------------------
						*  update toggle bit
						*-------------------*/
						if (DMA_NTGL&dma_event)
							endpoint_stat[DMA_ep]->toggle_bit = 1;
						else
							endpoint_stat[DMA_ep]->toggle_bit = 0;

						/*------------------------
						* Insert your code here
						*------------------------*/
						break;
					case DMA_DCNT:      	  
						/*-------------------------------------
						* DMA count (DMA Count) regiser is 0
						* ADMA is stopped
						*------------------------------------*/
						/*-----------------
						* update toggle bit
						*------------------*/
						tmp = read_usb(DMACNTRL);
						if (DMA_NTGL&dma_event)
						{
							tmp |= DMA_DTGL;
							endpoint_stat[DMA_ep]->toggle_bit = 1;
						}
						else
						{
							tmp &= ~DMA_DTGL;
							endpoint_stat[DMA_ep]->toggle_bit = 0;
						}
						/*----------------------------
						* re-enable USB DMA operation 
						------------------------------*/
						write_usb(DMACNTRL,tmp);	
						USB_start_dma(9 /* may be any number from 0 to 255 */);
						/*------------------------
						* Insert your code here
						*------------------------*/
						break;
					case DMA_DERR:
						break;
					case DMA_DSHLT:
						break;
						}	
				break;
			case ALT_RESET:
				CLEAR_STALL_EP0;
				GOTO_STATE(RST_ST);
				/*--------------------
				* set default address
				*--------------------*/
				write_usb(FAR,AD_EN+0);
				/*----------------
				* enable EP0 only 
				*----------------*/        
				write_usb(EPC0, 0x00);         
				/*---------------
				* Go Reset state
				*---------------*/
				reset_usb();
				usb_device_reset();

				/*--------------
				* Go operational 
				*---------------*/
				GOTO_STATE(OPR_ST);

				break;
			case ALT_SD3:
			case ALT_SD5:
				/*------------------
				* Enable Resume int 
				*------------------*/
				ENABLE_ALT_INTS(ALT_SD3|ALT_RESET|ALT_RESUME|ALT_DMA);	
				/*-------------------
				* enter suspend state 
				*------------------*/
				GOTO_STATE(SUS_ST);			  	
				break;
			case ALT_RESUME:
				/*------------------
				* Disabe Resume int 
				*------------------*/
				ENABLE_ALT_INTS(ALT_SD3|ALT_RESET|ALT_DMA);		
				/*----------------
				* Enable receving 
				*---------------*/
				GOTO_STATE(OPR_ST);			  	
				/*-----------------
				* Operational state
				*-----------------*/
				ENABLE_RX(ENDPOINT_0);
				break;
			case ALT_EOP:
				break;
			default:
				/*------------------------------
				* No event with this event mask 
				*------------------------------*/
				break;
		}
		alt_event &= ~evnt_mask;
		evnt_mask = evnt_mask << 1;
	}
}
 byte ep2diag = 0;
 byte mac2 = 0;
/*----------------------------------------------------------------------------------------------
*	Prototype
*		void USBN9604_rx_event_handler()
*
*	Parameters
*		None
*
*	Returns
*		None
*
*	Description
*		RX event handler
----------------------------------------------------------------------------------------------*/


__inline__ void USBN9604_rx_event_handler(void)
{
	volatile byte rx_event = RX_EVENTS;
	byte evnt_mask = 1;
	volatile byte rxstat;
    byte Toggle;
	byte  i;
	int request_length;
	endpoint_t ep_num = ENDPOINT_0;

	while(rx_event) 
	{
	switch(rx_event & evnt_mask) 
	{
		case RX_FIFO0: 
			/*-----------
			* endpoint 0
			*-----------*/
			ep_num = ENDPOINT_0;
			clear_control_buffer(&control_receive_buffer);
			/*-----------------------
			* Is this a setup packet? 
			*-----------------------*/
			rxstat = EP_RXSTATUS(ENDPOINT_0);
			if (rxstat & SETUP_R) 
			{
				/*----------------------
				* Clear STALL condition 
				*----------------------*/

				endpoint_stat[0]->toggle_bit = 0x01;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人av在线| 欧美日韩免费观看一区二区三区| 91看片淫黄大片一级在线观看| 欧美群妇大交群中文字幕| 亚洲国产精品成人综合色在线婷婷| 亚洲国产日韩综合久久精品| 国产成人aaa| 日韩三级伦理片妻子的秘密按摩| 一区二区三区在线播| 国产精品影视在线观看| 欧美久久久久久久久久| 亚洲另类春色校园小说| 成人一区在线看| 欧美精品一区二区在线观看| 日本成人在线网站| 欧美日韩三级一区二区| 亚洲男人都懂的| 99国产精品久久久久| 亚洲国产精品成人综合色在线婷婷| 美女www一区二区| 欧美一区二区女人| 五月激情综合网| 欧美午夜精品一区| 香蕉久久夜色精品国产使用方法| 99国产精品国产精品毛片| 综合网在线视频| 色综合久久中文综合久久97| 国产精品二三区| av在线一区二区| 亚洲欧洲制服丝袜| 色狠狠一区二区三区香蕉| 亚洲精品成人天堂一二三| 91福利在线观看| 亚洲自拍偷拍综合| 884aa四虎影成人精品一区| 亚洲成人av一区二区三区| 欧美三级午夜理伦三级中视频| 亚洲一区二三区| 91麻豆精品国产自产在线| 日产国产欧美视频一区精品| 欧美一级在线免费| 国产精品中文字幕日韩精品| 欧美激情一二三区| av激情成人网| 一区二区免费在线播放| 欧美日韩卡一卡二| 久久精品国产亚洲高清剧情介绍 | 亚洲亚洲人成综合网络| 欧美丝袜丝交足nylons| 青青草成人在线观看| 久久综合九色综合97_久久久| 国产91精品一区二区麻豆亚洲| 国产精品青草久久| 一本色道**综合亚洲精品蜜桃冫| 香蕉久久一区二区不卡无毒影院| 日韩一区二区电影| 高清成人免费视频| 亚洲一区二区av电影| 久久综合九色综合久久久精品综合| 成人午夜视频网站| 亚洲自拍都市欧美小说| 久久综合狠狠综合久久激情 | 在线播放一区二区三区| 美女视频一区在线观看| 国产精品丝袜在线| 欧美乱妇20p| 处破女av一区二区| 日韩一区欧美二区| 国产日韩精品视频一区| 欧美人与性动xxxx| 成人av网站免费观看| 性做久久久久久久免费看| 国产欧美日本一区视频| 欧美日韩精品三区| 国产成人精品三级麻豆| 亚洲成人综合在线| 国产精品国产三级国产有无不卡| 欧美精品1区2区| 色综合久久久久| 国产成人综合精品三级| 美女一区二区在线观看| 一区二区免费视频| 中文字幕av一区二区三区高| 欧美日韩国产一区二区三区地区| 丁香天五香天堂综合| 捆绑调教一区二区三区| 亚洲成av人片观看| 亚洲综合丝袜美腿| 国产精品久久久久久久久搜平片 | 午夜不卡av在线| 中文字幕一区二区三区色视频| 精品久久久久久久人人人人传媒 | 免费成人av资源网| 亚洲一区二区av在线| 亚洲视频在线一区| 中文字幕高清不卡| 久久蜜桃av一区精品变态类天堂| 欧美精品日日鲁夜夜添| 色一情一乱一乱一91av| 99视频热这里只有精品免费| 国产精品亚洲专一区二区三区| 欧美aaa在线| 日韩电影在线一区| 日韩激情视频网站| 首页亚洲欧美制服丝腿| 亚洲国产精品久久不卡毛片| 亚洲人精品午夜| 亚洲日本va在线观看| 国产精品久久久久影院| 国产精品免费av| 亚洲国产精品传媒在线观看| 国产网红主播福利一区二区| 国产亚洲精品资源在线26u| 精品国产成人系列| 久久综合狠狠综合久久综合88 | 欧美一二三区精品| 欧美一区三区二区| 69久久夜色精品国产69蝌蚪网| 欧美午夜精品久久久| 欧美日韩一二三区| 91精品国产一区二区三区| 欧美成人精品1314www| 日韩精品一区二区三区中文精品| 欧美一级欧美三级| 日韩亚洲欧美高清| 国产亚洲精品7777| 亚洲特级片在线| 午夜精品在线看| 国内成+人亚洲+欧美+综合在线| 狠狠色伊人亚洲综合成人| 国产激情偷乱视频一区二区三区 | 日本福利一区二区| 欧美另类久久久品| 久久亚洲精品国产精品紫薇 | 日韩三级视频在线看| 国产婷婷一区二区| 亚洲精品欧美激情| 美女视频黄久久| 不卡视频在线观看| 欧美日产国产精品| 久久精品视频一区二区三区| 亚洲精品高清视频在线观看| 日本vs亚洲vs韩国一区三区二区| 国产精品白丝av| 91麻豆123| 欧美岛国在线观看| 亚洲黄色录像片| 激情综合色综合久久| 色婷婷亚洲综合| 亚洲精品在线网站| 亚洲午夜影视影院在线观看| 久久99蜜桃精品| 91麻豆免费看片| 日韩欧美专区在线| 亚洲品质自拍视频| 国产伦精品一区二区三区免费| caoporm超碰国产精品| 日韩欧美国产精品一区| 亚洲三级电影全部在线观看高清| 日一区二区三区| 波多野结衣一区二区三区| 欧美一区二区视频免费观看| 亚洲欧美综合色| 激情综合网av| 欧美日韩一区三区四区| 国产精品丝袜在线| 韩国一区二区在线观看| 色国产综合视频| 欧美国产综合一区二区| 久久精品国产精品亚洲红杏| 在线精品国精品国产尤物884a| 久久久久久亚洲综合| 婷婷久久综合九色综合伊人色| 成人av第一页| 国产欧美中文在线| 国内外精品视频| 欧美日本一区二区三区四区| 亚洲欧美色一区| 东方aⅴ免费观看久久av| 欧美成人一区二区三区片免费| 亚洲成人三级小说| 色噜噜久久综合| 亚洲免费在线观看视频| 国产成人av福利| 国产日产欧产精品推荐色| 激情五月婷婷综合网| 欧美成人激情免费网| 日韩精品视频网| 91麻豆精品国产91久久久久久久久| 一区二区三区中文免费| av激情综合网| 中文字幕字幕中文在线中不卡视频| 国产精品系列在线播放| 久久免费美女视频| 国产一区久久久| 日本一区二区三区久久久久久久久不 | a亚洲天堂av| 国产精品久久久久永久免费观看| 国产成人在线免费观看| 欧美激情综合网|