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

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

?? usbdrv.h

?? USBN9603的DEMO程序
?? H
字號:
/*----------------------------------------------------------------------------
 *  Copyright (c) 2001 by National Semiconductor Corporation
 *  National Semiconductor Corporation
 *  2900 Semiconductor Drive
 *  Santa Clara, California 95051
 *
 *  All rights reserved
 *
 *<<<-------------------------------------------------------------------------
 * File Contents:
 *	usb.c - USB related definitions
 *
 *  Project: USB Demo firmware
 *  Author : Yan Nosovitsky
 *  Date   : Jan 2001
 *----------------------------------------------------------------------->>>*/
#ifndef __usbdrv_h__
#define __usbdrv_h__


/*--------------------------------------------------------------------------*/
/*-------------------------------   Macros   -------------------------------*/
/*--------------------------------------------------------------------------*/

/* Flush and disable the USB TX 0/1/2 **************************************/
#define FLUSHTX0 {write_usb(TXC0,FLUSH);}
#define FLUSHTX1 {write_usb(TXC1,FLUSH);}
#define FLUSHTX2 {write_usb(TXC2,FLUSH);}
#define FLUSHTX3 {write_usb(TXC3,FLUSH);}


/* Flush and disable the USB RX 0/1/2 **************************************/
#define FLUSHRX0 {write_usb(RXC0,FLUSH);}
#define FLUSHRX1 {write_usb(RXC1,FLUSH);}
#define FLUSHRX2 {write_usb(RXC2,FLUSH);}

#define ENABLE_RX0 write_usb(RXC0,RX_EN);
#define ENABLE_RX1 write_usb(RXC1,RX_EN);
#define ENABLE_RX2 write_usb(RXC2,RX_EN);

#define ENABLE_TX0 write_usb(TXC0,TX_EN);
#define ENABLE_TX1 write_usb(TXC1,TX_EN);
#define ENABLE_TX2 write_usb(TXC2,TX_EN);

#define FLUSH_TXEP(ep_num)		write_usb(EP_TXC(ep_num), FLUSH)
#define FLUSH_RXEP(ep_num)		write_usb(EP_RXC(ep_num), FLUSH)

#define ENABLE_RX(ep_num)		write_usb(EP_RXC(ep_num), RX_EN)
#define DISABLE_RX(ep_num)		write_usb(EP_RXC(ep_num), read_usb(EP_RXC(ep_num)) & ~RX_EN)
#define ENABLE_TX(ep_num)		write_usb(EP_TXC(ep_num), TX_EN)
#define DISABLE_TX(ep_num)		write_usb(EP_TXC(ep_num), read_usb(EP_TXC(ep_num)) & ~TX_EN)


#define GOTO_STATE(state)		write_usb(NFSR, (state));

#define ATTACH_NODE	 			write_usb(MCNTRL, read_usb(MCNTRL) | NAT);
#define DETACH_NODE 			write_usb(MCNTRL, read_usb(MCNTRL) & ~NAT);

#define ENABLE_NODE_INTS(intr)	write_usb(MAMSK, (intr));
#define DISABLE_NODE_INTS		write_usb(MAMSK, 0);

#define ENABLE_ALT_INTS(intr)	write_usb(ALTMSK, (intr));
#define DISABLE_ALT_INTS(intr)	write_usb(ALTMSK, read_usb(ALTMSK)&~(intr));

#define ENABLE_NAK_INTS(intr)	write_usb(NAKMSK, (intr));
#define DISABLE_NAK_INTS(intr)	write_usb(NAKMSK, read_usb(NAKMSK)&~(intr));

#define ENABLE_TX_INTS(intr)		write_usb(TXMSK, read_usb(TXMSK)|(intr));
#define DISABLE_TX_INTS(intr)		write_usb(TXMSK, read_usb(TXMSK)&~(intr));

#define ENABLE_RX_INTS(intr)		write_usb(RXMSK, read_usb(RXMSK)|(intr));
#define DISABLE_RX_INTS(intr)		write_usb(RXMSK, read_usb(RXMSK)&~(intr));


#define ENABLE_VGE	 		write_usb(MCNTRL, read_usb(MCNTRL) | VGE);

#define SET_EP_ADDRESS(ep, addr)		write_usb((ep), (addr));

#define USB_DEVICE_ADDRESS_ENABLE		write_usb(FAR, read_usb(FAR) | AD_EN);
#define USB_DEVICE_ADDRESS_DISABLE		write_usb(FAR, read_usb(FAR) & ~AD_EN);
#define SET_USB_DEVICE_ADDRESS(addr)	write_usb(FAR, read_usb(FAR) | addr);//((addr) & ~AD_EN));

#define ENABLE_DEFAULT_ADDRESS	write_usb(EPC0, read_usb(EPC0) | DEF);
#define CLEAR_DEFAULT_ADDRESS	write_usb(EPC0, read_usb(EPC0) & ~DEF);

#define SET_DEVICE_STATE(dev, st)	(dev.state = st)
#define DEVICE_STATE(dev)		dev.state
#define SET_DEVICE_ADDRESS(dev, addr)	(dev.address = addr)
#define DEVICE_ADDRESS(dev)		dev.address

#define EP_FIFO_WRITE(ep_num, data)	write_usb(EP_TXD(ep_num), (data))
#define EP_FIFO_READ(ep_num)		read_usb(EP_RXD(ep_num))


#define CLEAR_STALL_EP0			write_usb(EPC0, read_usb(EPC0) & ~STALL)
#define IS_EP0_STALLED  		((read_usb(EPC0) & STALL) == STALL)

/* The macro may be used only for ENDPOINT_1 .. ENDPOINT_6 endpoints,
 * It's assumpted that diff between two EPC# and EPC#+1 is 4 bytes */
#define EPC_ADDR(ep_num)		EPC1 + (((ep_num) - ENDPOINT_1) << 2)
#define STALL_EP(ep_num) 		write_usb(EPC_ADDR(ep_num), read_usb(EPC_ADDR(ep_num)) | STALL)
#define CLEAR_STALL_EP(ep_num)  	write_usb(EPC_ADDR(ep_num), read_usb(EPC_ADDR(ep_num)) & ~STALL)
#define IS_EP_STALLED(ep_num)   	((read_usb(EPC_ADDR(ep_num)) & STALL) == STALL)

#define IS_EP_ISO(ep_num)			((read_usb(EPC_ADDR(ep_num)) & ISO) == ISO)
#define IS_EP_IN(ep_num)			(ep_num%2)
#define ENABLE_EP(ep_num)   		write_usb(EPC_ADDR(ep_num), read_usb(EPC_ADDR(ep_num)) | EP_EN)
#define DISABLE_EP(ep_num)   		write_usb(EPC_ADDR(ep_num), read_usb(EPC_ADDR(ep_num)) & ~EP_EN)

#define EP_TXSTATUS(ep_num)		read_usb(EP_TXS(ep_num))
#define EP_RXSTATUS(ep_num)		read_usb(EP_RXS(ep_num))

#define ALT_EVENTS			read_usb(ALTEV)
#define DMA_EVENTS			read_usb(DMAEV)
#define NAK_EVENTS			read_usb(NAKEV)
#define TX_EVENTS			read_usb(TXEV)
#define RX_EVENTS			read_usb(RXEV)

#define IS_REQ_INDEX_NOT_ZERO(req)  (REQ_INDEX(req).as_bytes.msb != 0x0 &&  REQ_INDEX(req).as_bytes.lsb != 0x0)   
#define IS_REQ_VALUE_NOT_ZERO(req)  (REQ_VALUE(req).as_bytes.msb != 0x0 &&  REQ_VALUE(req).as_bytes.lsb != 0x0)   

#define IS_TX_ENABLE(ep_num)	(read_usb(EP_TXC(ep_num) & TX_EN))
#define IS_RX_ENABLE(ep_num)	(read_usb(EP_RXC(ep_num) & RX_EN))

#define REFILL_FIFO(ep_num)	write_usb(EP_TXC(ep_num), read_usb(EP_TXC(ep_num) | RFF))	
#define	SET_LAST(ep_num) write_usb(EP_TXC(ep_num), read_usb(EP_TXC(ep_num) | LAST))
/*=======================================================================*/

#define TXEP_ADDR(ep_num)		usbn9604_tx_endpoint_addr[(ep_num)]
#define RXEP_ADDR(ep_num)		usbn9604_rx_endpoint_addr[(ep_num)]

#define EP_TXD(ep_num)			TXEP_ADDR(ep_num)
/* It's assumpted that TXS# is TXD#+1 */
#define EP_TXS(ep_num)			TXEP_ADDR(ep_num) + 1
/* It's assumpted that TXC# is TXD#+2 */
#define EP_TXC(ep_num)			TXEP_ADDR(ep_num) + 2

#define EP_RXD(ep_num)			RXEP_ADDR(ep_num)
/* It's assumpted that RXS# is RXD#+1 */
#define EP_RXS(ep_num)			RXEP_ADDR(ep_num) + 1
/* It's assumpted that RXC# is RXD#+2 */
#define EP_RXC(ep_num)			RXEP_ADDR(ep_num) + 2

								//20 MHz
								//4 cycles takes single for loop 
								//10s waiting threshold
#define WAITING_THRESHOLD		50000000

#define TX_EP_COUNTER(ep_num)	(read_usb(EP_TXS(ep_num)) & 0x1F)//20)
#define RX_EP_COUNTER(ep_num)	(read_usb(EP_RXS(ep_num)) & 0xF) //10)

#define NUM_OF_ENDPOINTS	7

#define EP0_FIFO_SIZE		8
#define RX_BULK_EP_FIFO_SIZE		64
#define TX_BULK_EP_FIFO_SIZE		64

#define RX_ISO_EP_FIFO_SIZE			64
#define TX_ISO_EP_FIFO_SIZE			64

#define RX_INTR_EP_FIFO_SIZE		1
#define TX_INTR_EP_FIFO_SIZE		1

#define BZERO(buf) memset(&(buf), 0, sizeof(buf))



/*============================================================================
 *					Definitons
 *============================================================================*/
typedef enum {
    ENDPOINT_0,
    ENDPOINT_1,
    ENDPOINT_2,
    ENDPOINT_3,
    ENDPOINT_4,
    ENDPOINT_5,
    ENDPOINT_6,
    ENDPOINT_LAST
} endpoint_t;

typedef struct {
	byte *data;
	unsigned int bytes_counter;//counter of data bytes currently stored in the buffer
}control_buffer_t;

typedef enum {
		EMPTY, 
		FULL, 
		WAIT_FOR_ACK
}FIFO_status_t;

typedef struct {
	FIFO_status_t FIFO_status;
	byte toggle_bit;
}endpoint_status_t;

/*--------------------------------------------------------------------------*/
/*------------------------------- External Interface -----------------------*/
/*--------------------------------------------------------------------------*/
byte USB_Receive_Data (byte* data_ptr,endpoint_t ep_num);
byte USB_Transmit_Data (int data_size, BYTE* data_ptr, endpoint_t ep_num); 
void USB_init_dma(endpoint_t endPoint);
void USB_start_dma(int DCOUNT);


/*====================================================================
 *							Prototypes
 *====================================================================*/
void usb_node_handler(void);
void usb_drq_handler(void);
void reset_usb(void);
void usb_device_reset(void);	

void clear_control_buffer(control_buffer_t* control_buff);
void fill_control_fifo();
__inline__ void USBN9604_tx_event_handler(void);
void USBN9604_alt_event_handler(void);
__inline__ void USBN9604_rx_event_handler(void);
void USB_device_req_handler(void);

void usbn9604_tx_enable(int ep_num);
void usbn9604_tx_retransmit_enable(int ep_num);
void endpoint_status_init();
void send_control_data(byte *data_ptr, int data_size);
void zero_length_data_response(endpoint_t ep_num);
__inline__ void STALL_EP0();




#endif __usbdrv_h__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
4hu四虎永久在线影院成人| 欧美视频一区二区三区| 毛片av一区二区| 亚洲风情在线资源站| 香蕉久久夜色精品国产使用方法| 亚洲视频香蕉人妖| 一区二区三区四区不卡在线 | 成人免费一区二区三区在线观看| 国产区在线观看成人精品| 国产欧美中文在线| 国产精品久久久爽爽爽麻豆色哟哟 | 懂色av一区二区夜夜嗨| 激情综合色播激情啊| 风间由美一区二区av101| 成人性生交大片免费看中文| 99精品视频在线播放观看| 91蜜桃网址入口| 欧美色手机在线观看| 日韩丝袜美女视频| 久久久久久久久一| 亚洲欧洲成人自拍| 亚洲电影一区二区| 毛片一区二区三区| 成人美女在线观看| 欧美性感一区二区三区| 精品欧美乱码久久久久久1区2区| 国产亚洲欧美一级| 亚洲最新在线观看| 久久99久国产精品黄毛片色诱| 国产精品一卡二| 色av成人天堂桃色av| 日韩免费高清av| 国产精品国产自产拍高清av| 亚洲一区二区三区影院| 久久国产麻豆精品| 91视视频在线直接观看在线看网页在线看 | 久久久三级国产网站| 亚洲免费观看高清完整版在线观看熊| 石原莉奈在线亚洲二区| 成熟亚洲日本毛茸茸凸凹| 欧美在线你懂得| 国产精品视频一二三区| 日韩成人伦理电影在线观看| www.亚洲人| 精品久久久久久久人人人人传媒 | 婷婷久久综合九色综合绿巨人| 国产一区在线看| 欧美高清视频一二三区| 国产精品另类一区| 狠狠色丁香婷婷综合久久片| 欧美性色aⅴ视频一区日韩精品| 国产网站一区二区| 日韩精品欧美精品| 欧美性猛片xxxx免费看久爱| 国产精品国产精品国产专区不蜜| 激情亚洲综合在线| 日韩美女天天操| 奇米影视一区二区三区小说| 色八戒一区二区三区| 国产精品乱码一区二区三区软件| 激情五月激情综合网| 欧美日韩国产123区| 亚洲精品乱码久久久久久久久| 国产jizzjizz一区二区| 久久精品人人做人人综合| 免费在线观看一区| 91精品欧美久久久久久动漫| 亚洲国产一区二区视频| 91一区二区三区在线播放| 国产精品嫩草99a| 成人午夜私人影院| 国产精品电影院| 成人福利电影精品一区二区在线观看| 久久免费精品国产久精品久久久久| 日韩精品电影在线观看| 欧美精品三级日韩久久| 日韩国产精品久久| 91精品国产免费| 免费高清视频精品| 精品久久久久久久久久久久久久久| 美女mm1313爽爽久久久蜜臀| 日韩欧美亚洲一区二区| 美国毛片一区二区| 国产精品美女久久久久久2018 | 91小视频在线| 亚洲人成在线观看一区二区| 91久久久免费一区二区| 亚洲一区二区视频在线| 欧美精品九九99久久| 免费看日韩精品| 久久久久久日产精品| 成人av免费在线观看| 一区二区在线观看免费视频播放| 欧美日韩中文另类| 热久久免费视频| 久久精品无码一区二区三区| 波多野结衣欧美| 亚洲第一久久影院| 久久日一线二线三线suv| 成人av在线一区二区| 午夜在线成人av| 国产夜色精品一区二区av| 一本大道av伊人久久综合| 蜜臀久久99精品久久久画质超高清 | 777午夜精品视频在线播放| 久久成人久久爱| 亚洲欧洲av一区二区三区久久| 欧美日韩精品三区| 国产精品456| 亚洲国产精品人人做人人爽| 欧美精品一区二区三区四区 | 欧美日韩高清影院| 高清不卡一二三区| 香蕉乱码成人久久天堂爱免费| 国产日韩欧美a| 欧美区在线观看| 成人avav影音| 捆绑紧缚一区二区三区视频| 亚洲欧美日韩成人高清在线一区| 欧美一级二级三级蜜桃| 色国产精品一区在线观看| 国模冰冰炮一区二区| 午夜成人免费电影| 中文字幕一区二区三区四区| 日韩欧美中文字幕精品| 91女人视频在线观看| 国产91精品入口| 激情文学综合丁香| 奇米在线7777在线精品| 亚洲国产成人tv| 成人免费在线观看入口| 久久久久国产精品麻豆ai换脸| 欧美精品99久久久**| 91久久精品午夜一区二区| 懂色av一区二区三区免费看| 黄网站免费久久| 轻轻草成人在线| 性做久久久久久久久| 亚洲一区二区三区在线| 最新不卡av在线| 中文无字幕一区二区三区| 精品国产伦一区二区三区观看体验 | 中文字幕一区二区在线播放| 久久天天做天天爱综合色| 日韩亚洲电影在线| 欧美日韩国产一区二区三区地区| 91影院在线观看| 色综合天天天天做夜夜夜夜做| 成人免费毛片app| 99久久精品国产毛片| 成人小视频在线| 99re热这里只有精品视频| 99久久婷婷国产精品综合| 成人黄色a**站在线观看| 顶级嫩模精品视频在线看| 国产激情偷乱视频一区二区三区 | 99国产精品久| 91在线观看一区二区| 99re视频精品| 欧美亚洲免费在线一区| 欧美丝袜自拍制服另类| 69久久99精品久久久久婷婷| 欧美一卡二卡三卡| 久久久久久影视| 国产精品蜜臀在线观看| 亚洲免费视频成人| 午夜激情久久久| 久久99国内精品| 懂色av中文一区二区三区| 91美女视频网站| 欧美日韩国产影片| www激情久久| 亚洲天堂网中文字| 亚洲电影在线播放| 久久电影网电视剧免费观看| 国产成人午夜精品影院观看视频| 成人性生交大片免费看在线播放| 在线观看不卡一区| 日韩精品中午字幕| 成人免费在线视频| 奇米888四色在线精品| 粉嫩欧美一区二区三区高清影视| 91色视频在线| 精品粉嫩超白一线天av| 亚洲婷婷在线视频| 美女诱惑一区二区| 成人爱爱电影网址| 这里只有精品免费| 亚洲三级在线播放| 精久久久久久久久久久| 色综合久久中文综合久久牛| 日韩视频在线观看一区二区| 综合久久久久综合| 久久电影网站中文字幕| 欧美亚洲愉拍一区二区| 久久久久国产精品麻豆| 日韩精品欧美精品| 91电影在线观看| 久久精品免费在线观看| 免费在线看一区|