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

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

?? usbhcd.c.bak

?? RDC R2886 USB Ehci ohc測試源碼,paradigm c++上運行測試
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
// USB Host Controller OHCI test pattern file
// 08/25/2003    Jeff

#include <systypes.h>					/* Paradigm C++ standard types */
#include <stdio.h>
#include <dos.h>
#include <alloc.h>
#include <embedded.h>
#include <string.h>
#include <conio.h>
#include "..\Include\USBHost.h"

#define EHCI_PORT_INIT	(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E|PORT_POWER)

extern ehci_registers __far *ehci_regs;
extern ehci_qh __far *ehci_Ep0;

extern ehci_qtd __far *ehci_Ctl_TD1;
extern ehci_qtd __far *ehci_Ctl_TD2;
extern ehci_qtd __far *ehci_Ctl_TD3;

extern setup_format __far *Ctl_Setup;
extern char __far *Ctl_Data;

extern std_dev_des __far *dev_des;
extern std_cfg_des __far *cfg_des;
extern std_if_des  __far *if_des;
extern std_edp_des __far *edp_des1;
extern std_edp_des __far *edp_des2;
extern std_edp_des __far *edp_des3;
extern char LANGID[4];
extern char String1[256];
extern char String2[256];
extern char String3[256];

extern std_dev_des __far *UDisk_dev_des;
extern std_cfg_des __far *UDisk_cfg_des;
extern std_if_des  __far *UDisk_if_des;
extern std_edp_des __far *UDisk_edp_des1;
extern std_edp_des __far *UDisk_edp_des2;
extern std_edp_des __far *UDisk_edp_des3;
extern char UDisk_LANGID[4];
extern char UDisk_String2[34];
extern char UDisk_String3[34];

extern int Do_TD_Complete;
extern u8 g_PortAttach;

/* +++++++++++++++++++++ USBHost.c +++++++++++++++++++++++++ */
BOOL Init_USB(void);

/* +++++++++++++++++++++ USBLib.c +++++++++++++++++++++++++ */
unsigned int UpperAddr (void far *p);
unsigned int LowerAddr (void far *p);
void DWordWrite(void far *p, u32 data);
void DWordWriteHL(void far *p, u16 dataH, u16 dataL);
u32 DWordRead(void far *p);
void mdelay(u16 ms);

/* +++++++++++++++++++++ USBUART.c +++++++++++++++++++++++++ */
void UART_Device_Descriptor(std_dev_des __far *p);
void UART_Configuration_Descriptor(std_cfg_des __far *p);
void UART_Interface_Descriptor(std_if_des __far *p);
void UART_Endpoint_Descriptor(std_edp_des __far *p, int num);
void UART_String_Descriptor(char *p, int string_num, int size);
char* Num_ASCII_W(char *p, int Data, BOOL AddPoint);
void UART_SendData(char* buf, int size);

extern int ControlCnt;

BOOL DoTest_Mode(int num)
{
	u32 temp;
	
	temp = ehci_regs->port_status[0];
	
	DWordWrite(&ehci_regs->command, 0x00080000L);
	do{} while((ehci_regs->status & STS_HALT) == 0);
	
	temp &= 0xFF00FFFFL;
	if(num == 1)
		temp |= PORT_Test_J;
	else if(num == 2)
		temp |= PORT_Test_K;
	else if(num == 3)
		temp |= PORT_Test_SE0_NAK;
	else if(num == 4)
		temp |= PORT_Test_Packet;
	else if(num == 5)
		temp |= PORT_Test_FORCE_ENABLE;
		
	DWordWrite(&ehci_regs->port_status[0], temp);
	
	if((ehci_regs->port_status[0] & PORT_Test_FORCE_ENABLE) == PORT_Test_FORCE_ENABLE)
		DWordWrite(&ehci_regs->command, (0x00080000L | CMD_RUN));

	return TRUE;
}

BOOL EndTest_Mode()
{
	u32 temp;
	
	temp = ehci_regs->port_status[0];
	
	//Complete
	temp &= 0xFF00FFFFL;
	DWordWrite(&ehci_regs->port_status[0], temp);

	DWordWrite(&ehci_regs->command, 0x00080000L);
	do{} while((ehci_regs->status & STS_HALT) == 0);

	Init_USB();
	
	return TRUE;
}

void InitEndPoint0(void)
{
	char __far *Host_memory_ptr;

	//Allocate QH format structure
	Host_memory_ptr = (char *)malloc(sizeof(ehci_qh)+32);	//sizeof QH + 32
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0x1F) & ~0x1F);

	ehci_Ep0 = (ehci_qh *) Host_memory_ptr;
	
	ehci_Ep0->hw_next = (UpperAddr(ehci_Ep0)<<16)|LowerAddr(ehci_Ep0)|QH_Typ_QH;
	ehci_Ep0->hw_info1 = QH_RL|0x00400000L|QH_HEAD|QH_DTC_TD|QH_EPS|QH_EndPt_0|0x00;	//MaxPckLen ..| device address
	ehci_Ep0->hw_info2 = QH_Mult;
	ehci_Ep0->hw_current = 0;
	ehci_Ep0->hw_qtd_next = 0x01;
	ehci_Ep0->hw_alt_next = 0x01;
	ehci_Ep0->hw_token = QH_IOC;
	ehci_Ep0->hw_buf[0] = 0;
	ehci_Ep0->hw_buf[1] = 0;
	ehci_Ep0->hw_buf[2] = 0;
	ehci_Ep0->hw_buf[3] = 0;
	ehci_Ep0->hw_buf[4] = 0;
	
	DWordWriteHL(&ehci_regs->async_next, UpperAddr(ehci_Ep0), LowerAddr(ehci_Ep0));
}

void InitControl3TD(void)
{
	char __far *Host_memory_ptr;
	
	//Allocate TD format structure
	Host_memory_ptr = (char *)malloc(sizeof(ehci_qtd)+32);	//sizeof ehci_qtd + 32
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0x1F) & ~0x1F);
	ehci_Ctl_TD1 = (ehci_qtd *) Host_memory_ptr;
	
	//Allocate TD format structure
	Host_memory_ptr = (char *)malloc(sizeof(ehci_qtd)+32);	//sizeof ehci_qtd + 32
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0x1F) & ~0x1F);
	ehci_Ctl_TD2 = (ehci_qtd *) Host_memory_ptr;

	//Allocate TD format structure
	Host_memory_ptr = (char *)malloc(sizeof(ehci_qtd)+32);	//sizeof ehci_qtd + 32
	Host_memory_ptr = (char *) (((unsigned long)Host_memory_ptr + 0x1F) & ~0x1F);
	ehci_Ctl_TD3 = (ehci_qtd *) Host_memory_ptr;
	
	Host_memory_ptr = (char *)malloc(sizeof(setup_format));
	Ctl_Setup = (setup_format *) Host_memory_ptr;

}

BOOL Do_Get_Device_Descriptor(void)
{
	int i;
	char *p, *q;
	
	//Setup Stage
	Ctl_Setup->bmRequestType = 0x80;
	Ctl_Setup->bRequest = 0x06;
	Ctl_Setup->wValue = 0x0100;
	Ctl_Setup->wIndex = 0x0000;
	Ctl_Setup->wLength = 0x0040;
	
	ehci_Ctl_TD1->hw_next = 0x01;
	ehci_Ctl_TD1->hw_alt_next = 0x01;
	ehci_Ctl_TD1->hw_buf[0] = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ehci_Ctl_TD1->hw_token = 0x80000L|QTD_CERR_3|QTD_PID_SETUP|QTD_STS_ACTIVE;

	//Data Stage
	Ctl_Data = (char *)dev_des;
		
	ehci_Ctl_TD2->hw_next = 0x01;
	ehci_Ctl_TD2->hw_alt_next = 0x01;
	ehci_Ctl_TD2->hw_buf[0] = (UpperAddr(Ctl_Data) << 16) + LowerAddr(Ctl_Data);
	ehci_Ctl_TD2->hw_token = QTD_TOGGLE|0x400000L|QTD_CERR_3|QTD_PID_IN|QTD_STS_ACTIVE;

	ehci_Ctl_TD1->hw_next = (UpperAddr(ehci_Ctl_TD2) << 16) + LowerAddr(ehci_Ctl_TD2);

	//Status Stage
	ehci_Ctl_TD3->hw_next = 0x01;
	ehci_Ctl_TD3->hw_alt_next = 0x01;
	ehci_Ctl_TD3->hw_buf[0] = 0;
	ehci_Ctl_TD3->hw_token = QTD_TOGGLE|QTD_IOC|QTD_CERR_3|QTD_PID_OUT|QTD_STS_ACTIVE;
	
	ehci_Ctl_TD2->hw_next = (UpperAddr(ehci_Ctl_TD3) << 16) + LowerAddr(ehci_Ctl_TD3);
	
	//Write TD to QH, valid TD
	ehci_Ep0->hw_qtd_next = (UpperAddr(ehci_Ctl_TD1) << 16) + LowerAddr(ehci_Ctl_TD1);
	
	//Enable USB asynchronous Schedule
	Do_TD_Complete = 0;
	DWordWrite(&ehci_regs->command, (0x00080000L | CMD_ASE | CMD_RUN));
	
	//Wait TD complete
	do{} while(Do_TD_Complete == 0);
	
	//Check TD status
	if(((ehci_Ctl_TD1->hw_token & 0x7E) != 0) ||
		((ehci_Ctl_TD2->hw_token & 0x7E) != 0) || ((ehci_Ctl_TD3->hw_token & 0x7E) != 0))
		return FALSE;

	//Check device descriptor data
	/*p = (char *) dev_des;
	q = (char *) UDisk_dev_des;
	for(i=0;i<18;i++)
		if(*p++ != *q++)
			return FALSE;*/
			
	return TRUE;
}

BOOL InitEDTD()
{
	InitEndPoint0();
	InitControl3TD();

	return TRUE;
}

BOOL SetAddress(int Address)
{
	//Setup Stage
	Ctl_Setup->bmRequestType = 0x00;
	Ctl_Setup->bRequest = 0x05;
	Ctl_Setup->wValue = Address;
	Ctl_Setup->wIndex = 0x0000;
	Ctl_Setup->wLength = 0x0000;
	
	ehci_Ctl_TD1->hw_next = 0x01;
	ehci_Ctl_TD1->hw_alt_next = 0x01;
	ehci_Ctl_TD1->hw_buf[0] = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ehci_Ctl_TD1->hw_token = 0x80000L|QTD_CERR_3|QTD_PID_SETUP|QTD_STS_ACTIVE;
	
	//Status Stage
	ehci_Ctl_TD3->hw_next = 0x01;
	ehci_Ctl_TD3->hw_alt_next = 0x01;
	ehci_Ctl_TD3->hw_buf[0] = 0;
	ehci_Ctl_TD3->hw_token = QTD_TOGGLE|QTD_IOC|QTD_CERR_3|QTD_PID_IN|QTD_STS_ACTIVE;
	
	ehci_Ctl_TD1->hw_next = (UpperAddr(ehci_Ctl_TD3) << 16) + LowerAddr(ehci_Ctl_TD3);
	
	Do_TD_Complete = 0;
	ehci_Ep0->hw_qtd_next = (UpperAddr(ehci_Ctl_TD1) << 16) + LowerAddr(ehci_Ctl_TD1);

	do{} while(Do_TD_Complete == 0);

//Sten
	if(((ehci_Ctl_TD1->hw_token & 0x7E) != 0) || ((ehci_Ctl_TD3->hw_token & 0x7E) != 0))
		return FALSE;

	ehci_Ep0->hw_info1 = QH_RL|0x00400000L|QH_HEAD|QH_DTC_TD|QH_EPS|QH_EndPt_0|QH_DAddr;	//MaxPckLen ..| device address
	
	return TRUE;
}

BOOL InitControlTransfer()
{
	//Set Ep0's address to 0
	ehci_Ep0->hw_info1 = QH_RL|0x00400000L|QH_HEAD|QH_DTC_TD|QH_EPS|QH_EndPt_0|0x00;	//MaxPckLen ..| device address

	if(Do_Get_Device_Descriptor() == FALSE)
		return FALSE;

	//Port reset +++++++++++++
	g_PortAttach = 0;
	DWordWrite(&ehci_regs->port_status[0], (EHCI_PORT_INIT|PORT_RESET));
	mdelay(50);
	DWordWrite(&ehci_regs->port_status[0], (EHCI_PORT_INIT));

	//Wait reset complete			
	do{} while((ehci_regs->port_status[0] & PORT_RESET) == PORT_RESET);
	if((ehci_regs->port_status[0] & (PORT_CONNECT|PORT_PE)) == (PORT_CONNECT|PORT_PE))
		g_PortAttach = 1;
	else
		return FALSE;
	
	//Set a Address to device
	if(SetAddress(1) == FALSE)
		return FALSE;
	
	return TRUE;
}

/*-------------------------------------------------------------------------*
 * Control Transfer
 *-------------------------------------------------------------------------*/
BOOL Get_Device_Descriptor(u32 size)
{
	int i;
	char *p, *q;
	u32 temp;
	
	dev_des->bLength = 0;

	//Setup Stage
	Ctl_Setup->bmRequestType = 0x80;
	Ctl_Setup->bRequest = 0x06;
	Ctl_Setup->wValue = 0x0100;
	Ctl_Setup->wIndex = 0x0000;
	Ctl_Setup->wLength = (u16)size;
	
	ehci_Ctl_TD1->hw_next = 0x01;
	ehci_Ctl_TD1->hw_alt_next = 0x01;
	ehci_Ctl_TD1->hw_buf[0] = (UpperAddr(Ctl_Setup) << 16) + LowerAddr(Ctl_Setup);
	ehci_Ctl_TD1->hw_token = 0x80000L|QTD_CERR_3|QTD_PID_SETUP|QTD_STS_ACTIVE;

	//Data Stage
	Ctl_Data = (char *)dev_des;

	ehci_Ctl_TD2->hw_next = 0x01;
	ehci_Ctl_TD2->hw_alt_next = 0x01;
	ehci_Ctl_TD2->hw_buf[0] = (UpperAddr(Ctl_Data) << 16) + LowerAddr(Ctl_Data);
	temp = size << 16;
	ehci_Ctl_TD2->hw_token = QTD_TOGGLE|temp|QTD_CERR_3|QTD_PID_IN|QTD_STS_ACTIVE;

	ehci_Ctl_TD1->hw_next = (UpperAddr(ehci_Ctl_TD2) << 16) + LowerAddr(ehci_Ctl_TD2);

	//Status Stage
	ehci_Ctl_TD3->hw_next = 0x01;
	ehci_Ctl_TD3->hw_alt_next = 0x01;
	ehci_Ctl_TD3->hw_buf[0] = 0;
	ehci_Ctl_TD3->hw_token = QTD_TOGGLE|QTD_IOC|QTD_CERR_3|QTD_PID_OUT|QTD_STS_ACTIVE;
	
	ehci_Ctl_TD2->hw_next = (UpperAddr(ehci_Ctl_TD3) << 16) + LowerAddr(ehci_Ctl_TD3);
	
	//Write TD to QH, valid TD
	Do_TD_Complete = 0;
	ehci_Ep0->hw_qtd_next = (UpperAddr(ehci_Ctl_TD1) << 16) + LowerAddr(ehci_Ctl_TD1);

	do{} while(Do_TD_Complete == 0);

//Sten
	if(((ehci_Ctl_TD1->hw_token & 0x7E) != 0) ||
		((ehci_Ctl_TD2->hw_token & 0x7E) != 0) || ((ehci_Ctl_TD3->hw_token & 0x7E) != 0))
		return FALSE;

	/*p = (char *) dev_des;
	q = (char *) UDisk_dev_des;
	for(i=0;i<sizeof(std_dev_des);i++)
		if(*p++ != *q++)
			return FALSE; */

	return TRUE;
}

BOOL Get_Configuration_Desc(int Length)
{
	int i;
	u32 temp;	
	char *p, *q;
	
	cfg_des->bLength = 0;
	
	//Setup Stage

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆高清视频| 欧美日韩五月天| 99视频热这里只有精品免费| 欧美一三区三区四区免费在线看 | 日韩欧美123| 亚洲尤物在线视频观看| 国产sm精品调教视频网站| 91精品一区二区三区在线观看| 国产精品福利电影一区二区三区四区| 麻豆精品久久久| 欧美群妇大交群中文字幕| 亚洲精品大片www| 成年人网站91| 国产精品嫩草影院av蜜臀| 黄色日韩网站视频| 日韩欧美的一区| 高清久久久久久| 亚洲成人av在线电影| 色吧成人激情小说| 亚洲激情图片一区| 日韩一区二区三区在线观看| 日韩精品一级二级 | 中文字幕视频一区| 成人免费视频caoporn| 国产亚洲婷婷免费| 成人午夜激情影院| 亚洲国产成人av网| 91精品国产一区二区三区蜜臀| 国内一区二区视频| 一区二区三区精品在线观看| 91黄视频在线| 国产伦精品一区二区三区免费 | 日韩vs国产vs欧美| 91精品国产综合久久福利软件| 国产在线精品免费| 亚洲高清免费在线| 国产精品国产三级国产a| 4438x亚洲最大成人网| 成人h精品动漫一区二区三区| 亚洲成人一区二区在线观看| 国产精品色呦呦| 精品少妇一区二区| 国产91精品露脸国语对白| 亚洲.国产.中文慕字在线| 国产精品久久久久久久久果冻传媒| 在线成人av网站| 国产一区二区精品久久| 午夜一区二区三区视频| 欧美一区二区三区四区视频| 91影院在线免费观看| 国产精品996| 一区二区三区中文在线| 国产无一区二区| 精品免费视频一区二区| 911精品产国品一二三产区| 色综合天天综合在线视频| 视频精品一区二区| 亚洲精品国产视频| 亚洲三级免费观看| 欧美一级搡bbbb搡bbbb| 欧美曰成人黄网| 日韩国产精品久久久久久亚洲| 亚洲欧美另类图片小说| 欧美成人伊人久久综合网| 精品视频全国免费看| 日本韩国视频一区二区| 99视频在线观看一区三区| 成人h动漫精品一区二区| 成人v精品蜜桃久久一区| 高清视频一区二区| www.亚洲在线| 99久久免费精品| 国产一区在线精品| 久久福利资源站| 亚洲成av人片一区二区梦乃| 亚洲与欧洲av电影| 亚洲大片在线观看| 亚洲va欧美va天堂v国产综合| 亚洲一区二区精品3399| 视频一区国产视频| 欧美a级一区二区| 一区二区三区中文免费| 精品视频在线看| 日韩av电影天堂| 午夜国产精品影院在线观看| 尤物在线观看一区| 亚洲午夜久久久| 日本亚洲电影天堂| 久久不见久久见免费视频7 | 亚洲成国产人片在线观看| 亚洲一二三四在线观看| 丝袜美腿一区二区三区| 久久精品久久精品| 成人污视频在线观看| 91视频免费观看| 欧美日韩一区二区三区不卡| 99国产精品久久久久久久久久久| 99久久免费视频.com| 欧美日韩精品一区二区| 日韩精品一区在线| 国产精品久线观看视频| 亚洲成av人片一区二区梦乃| 久久精品国产亚洲5555| 不卡影院免费观看| 欧美日韩激情在线| 久久久久久麻豆| 欧洲精品视频在线观看| 欧美精品v日韩精品v韩国精品v| 精品国一区二区三区| 日韩一级在线观看| 国产精品婷婷午夜在线观看| 亚洲成人激情社区| 国产成人av网站| 成人白浆超碰人人人人| 4hu四虎永久在线影院成人| 国产亚洲欧美日韩俺去了| 一区二区三区欧美激情| 经典三级视频一区| 国产成人精品一区二区三区四区| 91碰在线视频| 欧美一级精品大片| 国产精品美女久久久久久| 天天av天天翘天天综合网| 国产精品白丝jk黑袜喷水| 在线视频国内一区二区| 久久久亚洲精品石原莉奈| 亚洲一级二级三级在线免费观看| 国产成人一级电影| 欧美日韩国产123区| 中文字幕一区二区三区乱码在线| 青青草视频一区| 色噜噜久久综合| 中文字幕不卡在线播放| 亚洲美女少妇撒尿| 国产成人a级片| 欧美一级日韩免费不卡| 一区二区在线观看免费 | 国产精品久久久久久久久免费桃花 | 亚洲免费在线视频| 国产麻豆欧美日韩一区| 欧美一二三在线| 性久久久久久久久久久久| 91女厕偷拍女厕偷拍高清| xfplay精品久久| 亚洲丝袜美腿综合| 国产成人av电影在线观看| 欧美一级日韩一级| 性感美女久久精品| 欧美在线免费播放| 亚洲精品免费在线| 9i看片成人免费高清| 国产色一区二区| 国产精品123| 国产偷v国产偷v亚洲高清| 麻豆免费精品视频| 欧美一级视频精品观看| 日韩av一区二区在线影视| 欧美日韩一二区| 偷拍与自拍一区| 欧美欧美欧美欧美| 亚洲成人7777| 欧美日韩夫妻久久| 日韩不卡一二三区| 日韩欧美在线123| 久久激情五月激情| 精品国产精品网麻豆系列| 久久精品久久99精品久久| 精品国偷自产国产一区| 蜜臀va亚洲va欧美va天堂 | 国产剧情在线观看一区二区| www日韩大片| 国产福利一区在线| 国产日韩成人精品| 午夜视频一区二区三区| 91精品国产综合久久精品app| 三级欧美韩日大片在线看| 这里只有精品视频在线观看| 日韩国产精品久久久| 精品欧美一区二区在线观看| 国产麻豆精品在线| 日本一区二区视频在线观看| 懂色av一区二区三区蜜臀 | 国产无人区一区二区三区| av电影在线不卡| 亚洲一二三区不卡| 欧美xxxx在线观看| 丁香六月综合激情| 亚洲一区二区三区视频在线| 91 com成人网| 国产精品一级二级三级| 亚洲欧美aⅴ...| 欧美日韩高清一区二区三区| 九色|91porny| 自拍偷拍欧美精品| 欧美日韩大陆在线| 国产九九视频一区二区三区| 亚洲蜜桃精久久久久久久| 91精品国产福利| 成人黄色电影在线| 天堂影院一区二区|