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

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

?? usbdrv.c

?? USBtest,USB測試程序,可以一看
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "..\include\all.h"

//#include "..\loopback\parser.h"
//#include "..\loopback\command_api.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_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,	//rx0, tx0
	&tx1_ep_stat,
	&rx1_ep_stat,
	&tx2_ep_stat,
	&rx2_ep_stat,
	&tx3_ep_stat, //IN interrupt
	NULL  //interrupt

};

volatile byte direct_send_active;
volatile byte wating_rx_data;

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 tx1
	RX_BULK_EP_FIFO_SIZE, //bulk rx1
	TX_BULK_EP_FIFO_SIZE, //bulk tx2
	RX_BULK_EP_FIFO_SIZE, //bulk rx2
	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
 *=====================================================================*/
/*---------------------------------------------------------------------
 *              USBN9602_tx_event_handler()
 *
 *  TX event handler
 *
 *  Input:  None
 *  Output: None
 *---------------------------------------------------------------------*/

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

	byte writeCount = 0;
	byte byteToWrite = 0;

	while(tx_event) {
	switch(tx_event & evnt_mask) {
		case TX_FIFO0: //endpoint 0
		//bulk tx endpoint
		ep_num = ENDPOINT_0;
		goto tx_evnt;
		case TX_FIFO1: //endpoint 1
		//bulk tx endpoint
		ep_num = ENDPOINT_1;
		goto tx_evnt;
		case TX_FIFO3: //endpoint 5
		//interrupt tx endpoint
		ep_num = ENDPOINT_5;

		tx_evnt:
		// Read the Transmit Status Register. 
		txstat = EP_TXSTATUS(ep_num);

		if (txstat & ACK_STAT) {
			//previous data packet from current ep was received successfully by host
			endpoint_stat[ep_num]->FIFO_status = EMPTY;
			switch(ep_num) {
			case ENDPOINT_0:

				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);	// Re-enable receiving 
				}
				break;
			case ENDPOINT_1:
				//keep sending data 
				FLUSHTX1;
				direct_send_active = 0;
				send_event(EVT_USB_BULK_TX);	
				break;
			default:
				break;
			}
		}
		else { //there is no ACK
			switch(ep_num) {
			case ENDPOINT_0:
				ENABLE_RX(ENDPOINT_0);	// Re-enable receiving 
				break;
			case ENDPOINT_1:
				//retransmit the previous data packet
				usbn9604_tx_retransmit_enable(ep_num); 
				break;
			case ENDPOINT_3:
				//not in use
				break;
			case ENDPOINT_5:
				break;
			default:
				break;
			}
		}
		break;
		case TX_FIFO2: //endpoint 3 not in use
		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;
	}
}


/*---------------------------------------------------------------------
 *              USBN9604_alt_event_handler()
 *
 *  ALT event handler
 *
 *  Input:  None
 *  Output: None
 *---------------------------------------------------------------------*/
void USBN9604_alt_event_handler(void)
{
	volatile byte alt_event = ALT_EVENTS;
	byte evnt_mask = 1;
	extern void USB_dev_reset(void);

	while(alt_event) {
	switch(alt_event & evnt_mask) {
		case ALT_RESET:
			CLEAR_STALL_EP0;
			GOTO_STATE(RST_ST);
			write_usb(FAR,AD_EN+0);         /*set default address     */
			write_usb(EPC0, 0x00);          /*enable EP0 only         */
			// Go Reset state 

			reset_usb();
			uja_device_reset();

			// Go operational 
			GOTO_STATE(OPR_ST);

			break;
		case ALT_SD3:
		case ALT_SD5:
			ENABLE_ALT_INTS(ALT_SD3|ALT_RESET|ALT_RESUME);	/* Enable Resume int */
			/* enter suspend state */
			GOTO_STATE(SUS_ST);			  	
			break;
		case ALT_RESUME:
			ENABLE_ALT_INTS(ALT_SD3|ALT_RESET);		/* Disabe Resume int */
			/* 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;
   }
}

/*---------------------------------------------------------------------
 *              USBN9604_rx_event_handler()
 *
 *  RX event handler
 *
 *  Input:  None
 *  Output: pointer to received data
 *---------------------------------------------------------------------*/
__inline__ void USBN9604_rx_event_handler(void)
{
	volatile byte rx_event = RX_EVENTS;
	byte evnt_mask = 1;
	volatile byte rxstat;
	byte Toggle, i;
	endpoint_t ep_num;
	int request_length;

	byte readCount = 0;
	byte byteToRead = 0;
	byte byteToWrite = 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_status_init();
			endpoint_stat[0]->toggle_bit = 0x01;

			CLEAR_STALL_EP0;
			request_length = min(fifo_sizes[ep_num], RX_EP_COUNTER(ep_num));
			/* Receive request from hub */
			for(i=0; i<request_length; i++) 
				request_buffer[i] = EP_FIFO_READ(ENDPOINT_0);

			control_receive_buffer.data = (byte *)request_buffer;
			control_receive_buffer.bytes_counter = request_length;

			FLUSH_TXEP(ENDPOINT_0);	
			FLUSH_RXEP(ENDPOINT_0);
			USB_device_req_handler();

		}
		/* OUT packet of Status stage in control read/write sequence */
		else {
			/* Re-enable receiving */
			FLUSHTX0;
			FLUSHRX0;
			ENABLE_RX(ENDPOINT_0);
			clear_control_buffer(&control_send_buffer);
		}
		break;
		case RX_FIFO1: //endpoint 2 bulk OUT
		ep_num = ENDPOINT_2;
//		goto rx_evnt;


//		rx_evnt:

		rxstat = EP_RXSTATUS(ep_num);
		if (rxstat & RX_ERR) {/*receive media error*/
			FLUSH_RXEP(ep_num);
			break;
		}
		Toggle = endpoint_stat[ep_num]->toggle_bit;
		Toggle <<= 5;
		if ((rxstat & RX_LAST) && ((rxstat & RX_TOGL) == Toggle))
		{	//received data is correct	
			wating_rx_data = 1;
			endpoint_stat[ep_num]->toggle_bit = endpoint_stat[ep_num]->toggle_bit ? 0 : 1;
			send_event(EVT_USB_BULK_RX);
		}
		else {
			//response to the toggle bit error
			//response to the receive error		
			FLUSH_RXEP(ep_num);
			ENABLE_RX(ep_num);
		}
			break;		
		case RX_FIFO2: //endpoint 4 
		case RX_FIFO3: //endpoint 6 interrupt OUT 
		case RX_OVRN0:
		case RX_OVRN1:
		case RX_OVRN2:
		case RX_OVRN3:
		break;
		default:
		/* No event with this event mask */
		break;
	}
	rx_event &= ~evnt_mask;
	evnt_mask = evnt_mask << 1;
	}
}

/*=====================================================================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美猛男男办公室激情| 亚洲chinese男男1069| 欧美一区日本一区韩国一区| 91小视频免费看| 91麻豆精品在线观看| 91麻豆国产福利在线观看| 成人黄色免费短视频| 972aa.com艺术欧美| 色婷婷综合视频在线观看| 91麻豆国产在线观看| 欧美在线免费播放| 欧美一二三区在线| 久久久久免费观看| 成人欧美一区二区三区黑人麻豆| 亚洲欧洲在线观看av| 亚洲一区在线电影| 奇米亚洲午夜久久精品| 国产一区二区三区美女| 波多野结衣中文一区| 欧美午夜精品理论片a级按摩| 欧美日韩精品一区视频| 精品福利一区二区三区免费视频| 久久先锋影音av| 亚洲女厕所小便bbb| 蜜桃av一区二区| 国产成人免费av在线| 欧美色图在线观看| 亚洲精品一区二区三区蜜桃下载| 国产精品二区一区二区aⅴ污介绍| 亚洲一区二区三区三| 久久精品av麻豆的观看方式| 99精品视频在线播放观看| 337p亚洲精品色噜噜狠狠| 国产嫩草影院久久久久| 亚洲不卡在线观看| 高清国产午夜精品久久久久久| 欧美调教femdomvk| 久久九九全国免费| 亚洲第四色夜色| 成人午夜视频在线观看| 欧美精品 日韩| 最新不卡av在线| 精品亚洲porn| 欧美蜜桃一区二区三区| 亚洲视频一二区| 黄网站免费久久| 777午夜精品免费视频| 亚洲欧洲韩国日本视频| 激情丁香综合五月| 欧美精品在欧美一区二区少妇| 国产精品私人影院| 麻豆视频观看网址久久| 欧美人狂配大交3d怪物一区| 亚洲少妇屁股交4| 粉嫩在线一区二区三区视频| 欧美成人vps| 日韩高清不卡一区| 欧美日精品一区视频| 洋洋av久久久久久久一区| 99国产欧美另类久久久精品| 久久久国际精品| 久久99久国产精品黄毛片色诱| 777色狠狠一区二区三区| 亚洲电影一级片| 欧洲视频一区二区| 一区二区免费在线播放| 色综合久久久久久久| 综合分类小说区另类春色亚洲小说欧美| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩大陆在线| 午夜精品一区二区三区免费视频| 欧美色网站导航| 污片在线观看一区二区| 日韩视频在线你懂得| 毛片av一区二区三区| 日韩一区二区视频| 久久精品国产精品亚洲综合| 精品国产sm最大网站免费看| 狠狠色狠狠色综合| 久久亚洲一区二区三区明星换脸| 韩国欧美一区二区| 国产女同互慰高潮91漫画| 9人人澡人人爽人人精品| 亚洲欧美一区二区三区极速播放| 一本大道久久a久久综合| 性久久久久久久| 日韩欧美二区三区| 国产精品一区专区| 亚洲同性同志一二三专区| 欧美色偷偷大香| 美女视频黄 久久| 久久久精品一品道一区| 91欧美激情一区二区三区成人| 亚洲一区电影777| 欧美大肚乱孕交hd孕妇| 高清不卡在线观看| 亚洲国产色一区| 精品播放一区二区| 色综合一区二区| 日本人妖一区二区| 国产嫩草影院久久久久| 欧美午夜免费电影| 激情五月播播久久久精品| 国产精品久久久一区麻豆最新章节| 91丨九色丨黑人外教| 美女视频一区二区三区| 国产精品久久久久久一区二区三区| 欧美无人高清视频在线观看| 国产原创一区二区| 一个色综合av| 久久精品夜夜夜夜久久| 欧美日韩一区二区在线观看视频 | 亚洲自拍偷拍av| 精品乱人伦小说| 在线精品观看国产| 国产成人av影院| 石原莉奈一区二区三区在线观看| 国产午夜精品一区二区| 在线成人小视频| 91在线高清观看| 国产麻豆精品在线观看| 爽好多水快深点欧美视频| 日本一区二区免费在线观看视频| 欧美乱妇23p| av午夜精品一区二区三区| 理论片日本一区| 五月天视频一区| 一区二区三区久久久| 国产精品午夜久久| 精品久久五月天| 欧美精品v国产精品v日韩精品| 99国产精品久久久久久久久久| 国产在线不卡视频| 麻豆视频观看网址久久| 丝袜亚洲精品中文字幕一区| 亚洲免费观看高清| 国产精品高潮呻吟久久| 国产片一区二区| 久久婷婷国产综合国色天香| 欧美一区二区成人6969| 欧美美女一区二区三区| 在线观看国产日韩| 色婷婷国产精品| 91久久人澡人人添人人爽欧美| 成人av资源在线| 9久草视频在线视频精品| 99riav一区二区三区| 成人av网站免费观看| 成人天堂资源www在线| 成av人片一区二区| 成人av在线电影| 97se亚洲国产综合在线| 色婷婷av久久久久久久| 欧洲另类一二三四区| 精品视频在线视频| 欧美猛男超大videosgay| 91精品国产综合久久久久久漫画 | 在线观看国产一区二区| 色老汉一区二区三区| 色爱区综合激月婷婷| 欧美日韩视频在线一区二区| 欧美日韩久久一区| 在线播放中文一区| 欧美成人综合网站| 欧美激情一区二区三区不卡| 亚洲人成精品久久久久| 视频在线观看一区| 久久不见久久见免费视频1| 国产精品99久久不卡二区| 成人av片在线观看| 欧美视频第二页| 精品日韩99亚洲| 综合久久给合久久狠狠狠97色| 香蕉久久夜色精品国产使用方法| 蜜桃精品视频在线观看| 不卡av在线网| 欧美人动与zoxxxx乱| 久久精品视频网| 亚洲自拍欧美精品| 麻豆国产欧美日韩综合精品二区| 国产精品亚洲午夜一区二区三区| 白白色亚洲国产精品| 欧美午夜理伦三级在线观看| 精品国产自在久精品国产| 亚洲视频中文字幕| 免费观看久久久4p| 99精品黄色片免费大全| 日韩女优av电影| 亚洲黄一区二区三区| 久久黄色级2电影| 91福利视频在线| 亚洲精品在线观看网站| 亚洲一二三级电影| 国产毛片精品国产一区二区三区| 在线免费亚洲电影| 欧美极品少妇xxxxⅹ高跟鞋| 午夜久久电影网| 91年精品国产| 中文字幕免费不卡在线| 麻豆精品在线视频|