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

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

?? chap_9.c

?? 初學51的值得看一下…………里面有很多實例
?? C
?? 第 1 頁 / 共 3 頁
字號:
{

	switch(USB_Device_Request.wValue)
	{
	case  1://設備描述符
		//選擇描述符
		if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
			Descriptor_Ptr = &Standard_Device_Descriptor[0];	//set pointer to device descriptor
		if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
			Descriptor_Ptr = &HS_Device_Descriptor[0];	//set pointer to device descriptor
		count = *Descriptor_Ptr;							//read in descriptor length
		//選擇端點號
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
		//寫下發送字節數
		D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 0x12;
		D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
		//send descriptor
		//發送描述符
		while(count != 0)
		{
			D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			count--;
			Descriptor_Ptr++;
		}
		wait_ep0tx();
		ep0out_ack();
		break;
		
	case  2        :  //獲取配置描述符
		USB_Int_Flag.BITS.EP0RX = 0;
		Temp = 64;
		Descriptor_Ptr = &Standard_Config_Descriptor[0];	//set pointer to configuration descriptor
		count = *Descriptor_Ptr;							//get configuration Descriptor length
		//選擇端點號1
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
		//check if only configuration descriptor required
		//檢查描述符長度,決定是只發送配置描述符還是描述符集合
		if(count >= USB_Device_Request.wLength)				//Send only Configuration descriptor
		{
			//寫入發送字節數
			D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
			D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
			//send descriptor
			//發送描述符
			for(count = 0 ; count < USB_Device_Request.wLength ; count++)
			{
				D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				Descriptor_Ptr++;
			}
			wait_ep0tx();
			ep0out_ack();
		}
		else //send Configuration,Interface and Endpoint descriptor
		{
			//發送描述符集合(配置+接口+端點)
			if(USB_Device_Request.wLength >= 32)
			{
				//寫入配置描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
				//選擇高速還是全速接口描述符
				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
					Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
					Descriptor_Ptr = &HS_Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
				count = *Descriptor_Ptr;	//get the descriptor count
				//寫入接口描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
				//選擇高速還是全速端點1IN描述符
				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
					Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
					Descriptor_Ptr = &HS_Int_In_Descriptor[0]; //set pointer to interface descriptor
				count = *Descriptor_Ptr;	//read in descriptor length
				//寫入端點1IN描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
				//選擇高速還是全速端點1OUT描述符
				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
					Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
					Descriptor_Ptr = &HS_Int_Out_Descriptor[0]; //set pointer to interface descriptor
				count = *Descriptor_Ptr;	//read in descriptor length
				//寫入端點1OUT描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
				//選擇高速還是全速端點2IN描述符
				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
					Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
					Descriptor_Ptr = &HS_Bulk_In_Descriptor[0]; //set pointer to interface descriptor
				count = *Descriptor_Ptr;	//read in descriptor length
				//寫入端點2IN描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
				//選擇高速還是全速端點2OUT描述符
				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
					Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
					Descriptor_Ptr = &HS_Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
				count = *Descriptor_Ptr;	//read in descriptor length
				//寫入端點2OUT描述符
				while(count != 0)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					count--;
					Descriptor_Ptr++;
				}
			}
			//使端點有效
			D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;	//validate FIFO
			wait_ep0tx();
			ep0out_ack();
		}
		break;
		
		case  3:  //獲取字符串描述符
			Descriptor_Ptr = &Standard_String_ID[0];		//set pointer to interface descriptor
			count = *Descriptor_Ptr;		//get length
			D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			if(USB_Device_Request.wLength < count)
				count = USB_Device_Request.wLength;			//get the remaining length
			D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
			D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
			//send string ID
			while(count != 0)
			{
				D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
				Descriptor_Ptr++;
				count--;
			}
			wait_ep0tx();
			ep0out_ack();
			break;
			
			
		case  4:  
			reserved();
			break;
			
		case  5:  //獲取端點描述符
			Temp = 0;
			if((USB_Device_Request.wValue & 0x00ff) > 0x0001)
			{
				D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
				while(!USB_Int_Flag.BITS.EP0SETUP)
				{
					//讀取ISP1581中斷寄存器
					USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
					//回寫ISP1581中斷寄存器
					D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
					if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
						return;
				}
				USB_Int_Flag.BITS.EP0TX = 0;
			}
			else
			{
				Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
				count = *Descriptor_Ptr;	//read in descriptor length
				D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
				if(count >= USB_Device_Request.wLength)
				{
					Temp = USB_Device_Request.wLength;
					//send endpoint descriptor
					D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
					D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
					for(count = 0 ; count < USB_Device_Request.wLength ; count++)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						Descriptor_Ptr++;
					}
					wait_ep0tx();
					ep0out_ack();
				}
				else
				{
					USB_Device_Request.wLength -= count; //send Endpoint descriptor
					Temp += count;
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
					count = *Descriptor_Ptr;	//read in descriptor length
					if(count >= USB_Device_Request.wLength)
					{
						Temp += USB_Device_Request.wLength;
						//send endpoint descriptor
						D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
						D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
						for(count = 0 ; count < USB_Device_Request.wLength ; count++)
						{
							D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
							Descriptor_Ptr++;
						}
						wait_ep0tx();
						ep0out_ack();
					}
					else
					{
						USB_Device_Request.wLength -= count; //send Endpoint descriptor
						Temp += count;
						D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
						D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
						while(count != 0)
						{
							D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
							count--;
							Descriptor_Ptr++;
						}
						wait_ep0tx();
						ep0out_ack();
					}	
				}					
			}
			break;
			
		case  6:  //獲取設備限制描述符
			Descriptor_Ptr = &HS_Device_Qualifier[0];		//set pointer to High Speed device descriptor
			count = *Descriptor_Ptr;							//read in descriptor length
			D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			if(USB_Device_Request.wLength < count)
			{
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
				count = USB_Device_Request.wLength;
			}
			else
			{
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
			}
			while(count != 0)
			{
				D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
				Descriptor_Ptr++;
				count--;
			};
			wait_ep0tx();
			ep0out_ack();
			break;
			
		case  7  ://獲取速度配置描述符
			Temp = 64;
			Descriptor_Ptr = &Other_Speed_Config_Descriptor[0];	//set pointer to configuration descriptor
			count = *Descriptor_Ptr;							//get configuration Descriptor length
			D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			if(count >= USB_Device_Request.wLength)				//Send only Configuration descriptor
			{
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
				D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
				for(count = 0 ; count < USB_Device_Request.wLength ; count++)
				{
					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
					Descriptor_Ptr++;
				}
				wait_ep0tx();
				ep0out_ack();
			}
			else //send Configuration,Interface and Endpoint descriptor
			{
				if(USB_Device_Request.wLength >= 32)
				{
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
					count = *Descriptor_Ptr;	//get the descriptor count
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
					count = *Descriptor_Ptr;	//read in descriptor length
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
					count = *Descriptor_Ptr;	//read in descriptor length
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
					count = *Descriptor_Ptr;	//read in descriptor length
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
					Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
					count = *Descriptor_Ptr;	//read in descriptor length
					while(count != 0)
					{
						D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
						count--;
						Descriptor_Ptr++;
					}
				}					
				D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;	//validate FIFO
				wait_ep0tx();
				ep0out_ack();
			}
			break;
			
		case  8:  
			break;
			
		default  :
			D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
			while(!USB_Int_Flag.BITS.EP0SETUP)
			{
				//讀取ISP1581中斷寄存器
				USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
				//回寫ISP1581中斷寄存器
				D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
				if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
					return;
			}
			USB_Int_Flag.BITS.EP0TX = 0;
			break;
	}
}	

//Set_Address設置地址
void set_address(void)
{
	USB_Int_Flag.BITS.EP0RX = 0;
	D14_Cntrl_Reg.D14_ADDRESS.BITS.DEVADDR = (USB_Device_Request.wValue >> 8);//設置地址
	//狀態響應
	ep0in_ack();
}

//Set_Config設置配置
void set_config(void)
{
	USB_Int_Flag.BITS.EP0RX = 0;
	
	if(USB_Device_Request.wValue == 0)
	{
		Device_Config_Value = 0;
		ep0in_ack();
	}
	else if (USB_Device_Request.wValue ==  0x0100)
    {
		//配置設備
		Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);
//		USB_Device.BITS.State = USB_Configured;
		ep0in_ack();
	}
	else
	{
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
		D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
		while(!USB_Int_Flag.BITS.EP0SETUP)
		{
			//讀取ISP1581中斷寄存器
			USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
			//回寫ISP1581中斷寄存器
			D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
			if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
				return;
		}
		USB_Int_Flag.BITS.EP0TX = 0;
	}
}


//Get_Config獲取配置
void get_config(void)
{
	D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
	D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频观看免费| 国产一区二区三区在线看麻豆| 国产亚洲精品aa| 亚洲视频每日更新| 午夜精品福利一区二区蜜股av | 高清成人免费视频| 色婷婷激情综合| 日韩精品一区在线| 国产精品无遮挡| 一区二区三区不卡在线观看| 免费看黄色91| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美专区在线观看一区| 精品国内片67194| 国产精品欧美经典| 琪琪一区二区三区| 91一区二区在线| 久久综合丝袜日本网| 亚洲精品乱码久久久久久黑人| 蜜臀久久99精品久久久画质超高清 | 亚洲1区2区3区4区| 粉嫩蜜臀av国产精品网站| 欧美三级电影一区| 久久精品无码一区二区三区| 成人毛片在线观看| 久久五月婷婷丁香社区| 日韩国产精品大片| 欧美视频一区二区| 婷婷六月综合亚洲| 99re这里都是精品| 欧美激情一区二区| 久久国产欧美日韩精品| 日韩一区国产二区欧美三区| 日韩av高清在线观看| 欧美肥妇bbw| 天堂久久一区二区三区| 91精品国产色综合久久ai换脸 | 欧洲一区二区三区在线| 亚洲精品久久7777| 在线观看91视频| 日韩av电影免费观看高清完整版在线观看| 色94色欧美sute亚洲线路二| 亚洲福利视频三区| 日韩美一区二区三区| 久久97超碰色| 中文字幕五月欧美| 日本高清不卡在线观看| 日韩精品电影在线观看| 亚洲精品亚洲人成人网 | 午夜婷婷国产麻豆精品| 日韩亚洲欧美成人一区| 成人国产精品免费观看动漫 | www.亚洲人| 亚洲国产美女搞黄色| 精品少妇一区二区三区| 成人av影视在线观看| 国产精品456| 日本不卡一区二区| 国产精品久久久久久久久久久免费看| 91久久久免费一区二区| 国产黄色成人av| 亚洲国产综合视频在线观看| 国产精品入口麻豆九色| 3d动漫精品啪啪一区二区竹菊| 成人午夜短视频| 久久99久国产精品黄毛片色诱| 国产精品久久免费看| 亚洲精品一线二线三线无人区| 91捆绑美女网站| 成人av影院在线| 国产一区视频网站| 久久国产精品一区二区| 石原莉奈在线亚洲二区| 国产精品天美传媒沈樵| 欧美一级夜夜爽| 欧美一区二区三区四区在线观看| 成人午夜av影视| 成人h动漫精品一区二区| 日本麻豆一区二区三区视频| 亚洲国产一区二区三区青草影视| 亚洲精品视频观看| 一区二区三区免费网站| 亚洲激情自拍视频| 亚洲国产精品人人做人人爽| 性做久久久久久免费观看欧美| 久久国内精品自在自线400部| 日韩福利电影在线| 激情六月婷婷久久| 黄色日韩网站视频| 国产一区二区三区香蕉| 成人国产精品免费观看| 91久久奴性调教| 精品嫩草影院久久| 中文字幕一区二区三区不卡| 一区二区三区毛片| 国产资源在线一区| 成人污污视频在线观看| 91麻豆免费看| 精品国产伦一区二区三区免费| 亚洲国产高清aⅴ视频| 国产在线播放一区| 色婷婷精品久久二区二区蜜臂av| 8v天堂国产在线一区二区| 精品国产乱码久久久久久浪潮| 亚洲日本在线a| 久久国产精品一区二区| 欧美色老头old∨ideo| 国产精品伦理在线| 蜜臀av一区二区在线免费观看 | 欧美成人精品3d动漫h| 一区二区三区日韩在线观看| 久久99精品国产91久久来源| 欧美视频自拍偷拍| 中文字幕一区二区5566日韩| 九九国产精品视频| 欧美少妇性性性| 亚洲人成精品久久久久久| 精品制服美女丁香| 日韩免费视频一区| 日韩av一二三| 欧美精品xxxxbbbb| 亚洲va欧美va天堂v国产综合| 一本到三区不卡视频| 亚洲欧美中日韩| 色综合久久久久网| 亚洲国产精品一区二区久久| 91福利精品第一导航| 一区二区三区成人| 欧美精品国产精品| 久久99久国产精品黄毛片色诱| 久久伊99综合婷婷久久伊| 久久99精品一区二区三区三区| 日韩精品一区二区三区老鸭窝 | 欧美日韩精品欧美日韩精品一| 亚洲欧美日韩国产另类专区| 欧美在线综合视频| 首页综合国产亚洲丝袜| 91精品国产一区二区三区| 久久99久国产精品黄毛片色诱| www久久精品| 国产精品一区二区无线| 亚洲精品高清视频在线观看| 精品久久久久久亚洲综合网| 国产高清在线精品| 亚洲不卡一区二区三区| 国产嫩草影院久久久久| 在线视频国内一区二区| 久久电影国产免费久久电影| 自拍偷在线精品自拍偷无码专区| 欧美日韩国产美| 粉嫩嫩av羞羞动漫久久久| 首页欧美精品中文字幕| 亚洲精品第1页| 国产精品伦理一区二区| 日韩欧美视频一区| 欧美午夜免费电影| 色婷婷av一区二区三区gif | 欧美激情一区二区三区在线| 在线播放国产精品二区一二区四区 | 成人福利视频网站| 久久不见久久见免费视频1| 一区二区三区91| 亚洲免费在线观看视频| 国产欧美精品一区| 久久久久久久久久久久久女国产乱| 欧美日韩国产综合视频在线观看 | 午夜欧美在线一二页| 亚洲成人在线免费| 无吗不卡中文字幕| 婷婷六月综合网| 视频一区视频二区中文| 日韩激情视频网站| 日韩影院免费视频| 美女一区二区视频| 国产毛片精品一区| 国产麻豆精品theporn| 国产九色sp调教91| 不卡的av电影在线观看| 色综合久久久久网| 69精品人人人人| 久久久久国产精品厨房| 亚洲精品免费在线| 日本va欧美va欧美va精品| 激情五月激情综合网| 成人av网站免费观看| 欧美日韩在线综合| 国产婷婷色一区二区三区在线| 中文字幕+乱码+中文字幕一区| 综合色中文字幕| 午夜激情久久久| 国产不卡在线一区| 欧美二区乱c少妇| 中文字幕视频一区二区三区久| 日韩精品视频网| 成人h精品动漫一区二区三区| 欧美精品一级二级三级| 国产精品久久免费看| 国产精品羞羞答答xxdd| 在线免费观看一区| 国产精品久久久久婷婷|