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

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

?? usb.c

?? 里面是D12與c51的接口程序
?? C
字號:
//標準設備請求 參考CHAP_9
#include <stdio.h>
#include <string.h>


#include <reg52.h>                /* special function register declarations   */

#include "hard.h"
#include "D12.h"
#include "main.h"
//#include "myusb100.h"
#include "USB.h"

#define NUM_ENDPOINTS	4

#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))

extern CONTROL_XFER ControlData;
extern IO_REQUEST idata ioRequest;
extern EPPFLAGS bEPPflags;


///////////////////////////////////////
//設備描述
code USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),
    USB_DEVICE_DESCRIPTOR_TYPE,
    SWAP(0x0110),
    USB_CLASS_CODE_TEST_CLASS_DEVICE,
    0, 
	0,
	EP0_PACKET_SIZE,
	SWAP(0x0471),

	SWAP(0x0124),
	SWAP(0x0200),
    0, 
	0, 
	0,
    1
}; 
//配置描述
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
    sizeof(USB_CONFIGURATION_DESCRIPTOR),
    USB_CONFIGURATION_DESCRIPTOR_TYPE,
    SWAP(CONFIG_DESCRIPTOR_LENGTH),
	1,
	1,
    0,
	0xa0,
	0xfa //500mA
};
//接口描述
code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
    sizeof(USB_INTERFACE_DESCRIPTOR),
    USB_INTERFACE_DESCRIPTOR_TYPE,
    0,
    0,
	NUM_ENDPOINTS,
	USB_CLASS_CODE_TEST_CLASS_DEVICE,
	USB_SUBCLASS_CODE_TEST_CLASS_D12,
	USB_PROTOCOL_CODE_TEST_CLASS_D12,
	0
};
//端點描述
//端點1輸入
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};
//端點1輸出
code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x1,
	USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP(EP1_PACKET_SIZE),
	10
};
//端點2輸入
code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x82,
	USB_ENDPOINT_TYPE_BULK,
	SWAP(EP2_PACKET_SIZE),
	10
};
//端點2輸出
code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x2,
	USB_ENDPOINT_TYPE_BULK,
	SWAP(EP2_PACKET_SIZE),
	10
};
  
	  
/*
   //*************************************************************************
   // USB 協議層
   //*************************************************************************
*/

void reserved(void)
{
	stall_ep0();
}

/*
   //*************************************************************************
   // USB 標準設備請求子程序
   //*************************************************************************
*/
//1//獲取狀態(tài)
void get_status(void)
{
	unsigned char endp, txdat[2];
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
	unsigned char c;

	if (bRecipient == USB_RECIPIENT_DEVICE) 
		{
			if(bEPPflags.bits.remote_wakeup == 1)
				txdat[0] = 3;
			else
				txdat[0] = 1;
			txdat[1]=0;
			single_transmit(txdat, 2);
		} 
	else if (bRecipient == USB_RECIPIENT_INTERFACE) 
		{
			txdat[0]=0;
			txdat[1]=0;
			single_transmit(txdat, 2);
		}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT) 
		{
			endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
				c = D12_SelectEndpoint(endp*2 + 1);	/* Control-in */
			else
				c = D12_SelectEndpoint(endp*2);	/* Control-out */
			if(c & D12_STALL)
				txdat[0] = 1;
			else
				txdat[0] = 0;
			txdat[1] = 0;
			single_transmit(txdat, 2);
		} 
	else
		stall_ep0();

}
//2//清除特性
void clear_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;

	if (bRecipient == USB_RECIPIENT_DEVICE
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) 
		{
			DISABLE;
			bEPPflags.bits.remote_wakeup = 0;
			ENABLE;
			single_transmit(0, 0);
		}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) 
		{
			endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
				/* clear TX stall for IN on EPn. */
				D12_SetEndpointStatus(endp*2 + 1, 0);
			else
				/* clear RX stall for OUT on EPn. */
				D12_SetEndpointStatus(endp*2, 0);
			single_transmit(0, 0);
		} 
	else
		stall_ep0();

}
//3//設置特性
void set_feature(void)
{
	unsigned char endp;
	unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;

	if (bRecipient == USB_RECIPIENT_DEVICE
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) 
		{
			DISABLE;
			bEPPflags.bits.remote_wakeup = 1;
			ENABLE;
			single_transmit(0, 0);
		}
	else if (bRecipient == USB_RECIPIENT_ENDPOINT
		&& ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) 
		{
			endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
			if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
				/* clear TX stall for IN on EPn. */
				D12_SetEndpointStatus(endp*2 + 1, 1);
			else
				/* clear RX stall for OUT on EPn. */
				D12_SetEndpointStatus(endp*2, 1);
			single_transmit(0, 0);
		} 
	else
		stall_ep0();

}
//4//設置地址
void set_address(void)
{
	D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
		DEVICE_ADDRESS_MASK), 1);
	single_transmit(0, 0);
}
//5//獲取描述符
void get_descriptor(void)
{
	unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);

	if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) 
		{
			code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
		}
	else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) 
	 	{
			code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
		}
	else
		stall_ep0();

}
//6//獲取配置信息
void get_configuration(void)
{
	unsigned char c = bEPPflags.bits.configuration;

	single_transmit(&c, 1);
}
//7//設置配置
void set_configuration(void)
{
	if (ControlData.DeviceRequest.wValue == 0) 
		{
			/* put device in unconfigured state */
			single_transmit(0, 0);
			DISABLE;
			bEPPflags.bits.configuration = 0;
			ENABLE;
			init_unconfig();
		}
	else if (ControlData.DeviceRequest.wValue == 1) 
		{
			/* Configure device */
			single_transmit(0, 0);
	
			init_unconfig();
			init_config();
			
			DISABLE;
			bEPPflags.bits.configuration = 1;
			ENABLE;
		} 
	else
		stall_ep0();

}
//8//獲取接口信息
void get_interface(void)
{
	unsigned char txdat = 0;        /* Only/Current interface = 0 */
	single_transmit(&txdat, 1);
}
//9//設置接口
void set_interface(void)
{
	if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
		single_transmit(0, 0);
	else
		stall_ep0();
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡2卡三卡4卡5免费| 欧美优质美女网站| 免费成人在线观看视频| 亚洲高清不卡在线| 日韩精品一二三区| 日韩av一二三| 久久精品国产**网站演员| 奇米精品一区二区三区在线观看一 | 成人国产亚洲欧美成人综合网| 国产一区激情在线| 国产黄色精品网站| 91麻豆免费视频| 欧美怡红院视频| 欧美变态tickle挠乳网站| 久久久综合视频| 亚洲欧美色一区| 午夜欧美视频在线观看| 久久 天天综合| 97久久人人超碰| 欧美日韩精品免费观看视频 | 美国三级日本三级久久99| 美女视频一区二区| 成人精品国产免费网站| 91国模大尺度私拍在线视频| 欧美美女网站色| 国产亚洲欧美色| 亚洲va欧美va天堂v国产综合| 久久超级碰视频| 99久久精品99国产精品| 欧美精品视频www在线观看| 久久久久久夜精品精品免费| 亚洲天堂a在线| 国产综合色在线| 欧美色涩在线第一页| 国产亚洲成aⅴ人片在线观看| 一区二区三区四区中文字幕| 久草精品在线观看| 欧美日韩在线一区二区| 中文字幕久久午夜不卡| 婷婷国产v国产偷v亚洲高清| 成人成人成人在线视频| 日韩精品一区二区三区中文不卡| 国产精品理伦片| 极品少妇xxxx精品少妇| 色8久久人人97超碰香蕉987| 精品欧美一区二区久久| 亚洲午夜羞羞片| 99久久99久久免费精品蜜臀| 精品久久久久久最新网址| 亚洲自拍偷拍网站| 成人在线视频一区| 精品少妇一区二区三区在线视频| 国产精品久久一级| 国产盗摄一区二区| 日韩美女一区二区三区| 午夜一区二区三区视频| 99久久国产免费看| 国产精品传媒入口麻豆| 国产一区在线视频| 欧美v日韩v国产v| 日韩成人精品在线观看| 在线亚洲欧美专区二区| 一区免费观看视频| 成人在线综合网| 中文字幕第一区综合| 精品一区二区三区免费| 日韩免费视频线观看| 午夜久久福利影院| 欧美三级资源在线| 亚洲一区二区三区四区在线| 色婷婷国产精品久久包臀 | 色综合激情五月| 国产精品嫩草久久久久| 成人99免费视频| 中文字幕免费观看一区| www.日韩在线| 中文字幕中文字幕在线一区 | 成人国产精品免费观看视频| 久久综合久久久久88| 激情欧美一区二区| 亚洲精品一线二线三线| 国产精品一区专区| 国产色综合久久| 成人高清av在线| 亚洲日本欧美天堂| 欧美区在线观看| 精品一区二区日韩| 2023国产精品视频| 成人美女在线观看| 亚洲特黄一级片| 欧美美女一区二区在线观看| 青青草视频一区| 欧美国产丝袜视频| 欧美亚洲丝袜传媒另类| 日韩激情中文字幕| 久久久无码精品亚洲日韩按摩| 国产经典欧美精品| 亚洲一区二区视频在线| 日韩免费观看高清完整版在线观看| 黄色日韩三级电影| 亚洲欧美日韩综合aⅴ视频| 欧美夫妻性生活| 高潮精品一区videoshd| 夜夜嗨av一区二区三区| 日韩免费视频线观看| av电影天堂一区二区在线观看| 中文久久乱码一区二区| 在线观看日韩国产| 激情综合色综合久久| 中文字幕日韩精品一区| 69精品人人人人| 成人蜜臀av电影| 欧美bbbbb| 国产精品麻豆久久久| 欧美日韩一区二区三区在线看| 狠狠色2019综合网| 亚洲综合免费观看高清完整版在线 | 不卡高清视频专区| 制服视频三区第一页精品| 26uuu欧美日本| 欧美在线不卡视频| 国产精品麻豆一区二区| 99久久夜色精品国产网站| 免费精品视频最新在线| 国产精品热久久久久夜色精品三区| 欧美日韩精品一区二区天天拍小说 | 国产成人精品影视| 天天综合日日夜夜精品| 国产精品九色蝌蚪自拍| 日韩一级片在线播放| 欧美综合视频在线观看| 成人午夜私人影院| 国产一区啦啦啦在线观看| 午夜欧美电影在线观看| 国产精品久久一级| 欧美激情一区二区| 久久综合给合久久狠狠狠97色69| 欧美视频一区在线| 99精品热视频| 成人午夜激情在线| 国产在线播放一区| 激情综合网av| 国产一区二区91| 韩国一区二区视频| 精品亚洲成a人| 毛片av一区二区三区| 免费一级片91| 久久精品国产秦先生| 青青草原综合久久大伊人精品优势 | 亚洲人成电影网站色mp4| 国产精品人人做人人爽人人添| 久久精品一区四区| 国产女人水真多18毛片18精品视频| 日韩欧美中文字幕一区| 欧美一级欧美三级在线观看| 精品毛片乱码1区2区3区| 欧美mv日韩mv亚洲| 欧美va在线播放| 国产清纯在线一区二区www| 国产日韩欧美精品综合| 国产精品久久久久久亚洲毛片| 国产精品麻豆一区二区| 亚洲四区在线观看| 亚洲国产精品人人做人人爽| 亚洲va欧美va天堂v国产综合| 午夜亚洲国产au精品一区二区| 日日夜夜免费精品视频| 免费看欧美女人艹b| 狠狠色综合播放一区二区| 国产精品亚洲第一| av在线这里只有精品| 欧美中文字幕一区二区三区 | 老司机精品视频线观看86| 国产成人午夜精品影院观看视频| 国产91在线观看| 欧美专区亚洲专区| 日韩欧美视频在线| 国产精品成人一区二区艾草 | 亚洲欧美一区二区三区久本道91| 亚洲精品国产一区二区三区四区在线| 亚洲成a天堂v人片| 国内精品免费在线观看| av在线不卡免费看| 91精品国产综合久久久久久久久久| 日韩欧美一二区| 中文字幕一区二区在线播放| 亚洲国产cao| 国产福利电影一区二区三区| 欧美午夜影院一区| 国产精品第一页第二页第三页| 午夜精品久久久久| 国产成人精品一区二| 欧美性做爰猛烈叫床潮| 久久久久久麻豆| 亚洲成在线观看| 99国产精品久久久久久久久久| 91精品国产欧美日韩| 亚洲欧洲99久久| 激情综合亚洲精品| 777亚洲妇女|