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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb.c

?? ATMEL AT89C51SND1 IDE TO USB READER
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/**************************************************************************
*                         H E A D E R   F I L E S
*************************************************************************/
#include <stdio.h>
#include<ABSACC.H>
#include <reg51.h>
#include <intrins.h>
#include "include\AT89C51SND.h"
#include "include\typedef.h"
#include "include\config.h"
#include "include\constant.h"
#include "include\usb.h"
#include "include\global.h"
#include "include\gpio.h"
#include "include\macro.h"
#include "include\external.h"

/********************************************
*
*GET_DESCRIPTOR(Device Descriptor = 18 byte)
*
********************************************/
code UINT8   USB_DeviceDescriptor[] =
{



	0x12,                   /*bLength:*/
	0x01,                   /*bDescriptorType*/
	0x10, 0x01,           /*bcdUSB*/
	0x00,                   /*bDeviceClass*/
	0x00,                   /*bDeviceSubClass*/
	0x00,                   /*bDeviceProtocol*/
	0x08,                   /*bMaxPacketSize0*/
	0x34, 0x22,           /*idVendor*/
	0x78, 0x56,           /*idProduct*/
	0x01, 0x00,           /*bcdDevice*/
	0x01,                   /*iManufacturer*/
	0x02,                   /*iProduct*/
	0x03,                   /*iSerialNumber*/
	0x01,                   /*bNumConfigurations*/
};

/********************************************
*
*GET_DESCRIPTOR(Configuration Descriptor = 34 byte)
*
********************************************/
code UINT8   USB_ConfigurationDescriptor[] =
{


	0x09,                   /*bLength*/
	0x02,                   /*bDescriptorType*/
	0x20, 0x00,           /*wTotalLength*/
	0x01,                   /*bNumInterfaces*/
	0x01,                   /*bConfigurationValue*/
	0x00,                   /*iConfiguration*/
	0x80,                   /*bmAttributes*/
	0xFA,                   /*bMaxPower*/


	/*Interface Descriptor(0x09 byte)*/
	0x09,                   /*bLength             */
	0x04,                   /*bDescriptorType  */
	0x00,                   /*bInterfaceNumber*/
	0x00,                   /*bAlternateSetting*/
	0x02,                   /*bNumEndpoints:*/
	0x08,                   /*bInterfaceClass*/
	0x06,                   /*bInterfaceSubClass:*/
	0x50,                   /*bInterfaceProtocol*/
	0x00,                   /*iInterface*/

	/*Endpoint Descriptor (0x07 byte)*/
	0x07,                   /*bLength:*/
	0x05,                   /*bDescriptorType:*/
	0x81,                   /*bEndpointAddress*/
	0x02,                   /*bmAttributes*/
	0x40, 0x00,           /*wMaxPacketSize*/
	0x00,                   /*bInterval: ignored*/


	/*Endpoint Descriptor (0x07 byte)*/
	0x07,                   /*bLength:*/
	0x05,                   /*bDescriptorType:*/
	0x02,                   /*bEndpointAddress*/
	0x02,                   /*bmAttributes*/
	0x40, 0x00,           /*wMaxPacketSize*/
	0x00,                   /*bInterval: ignored*/

};

/********************************************
*
*GET_DESCRIPTOR(STRING Descriptor = 4 byte)
*
********************************************/
code UINT8   USB_LanguageIdString[] =
{

	0x04,              /*bLength*/
	0x03,              /*bDescriptorType: STRING*/
	0x09, 0x04,     /*bString: English (US)*/
};

/********************************************
*
*GET_DESCRIPTOR(STRING Descriptor = 32 byte)
*
********************************************/
code UINT8   USB_ManufacturerString[] =
{

	0x20,           /*bLength*/
	0x03,           /*bDescriptorType: STRING*/
	'a', 0x00,     
	't', 0x00,
	'm', 0x00,
	'e', 0x00,
	'l', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
	' ', 0x00,
};

/********************************************
*
*GET_DESCRIPTOR(STRING Descriptor = 48 byte)
*
********************************************/
code UINT8   USB_ProductString[] =
{

	0x30,           /*bLength*/
	0x03,           /*bDescriptorType: STRING*/
	'a',0x00,     
	't',0x00,
	'm',0x00,
	'e',0x00,
	'l',0x00,
	'a',0x00,
	't',0x00,
	'8',0x00,
	'9',0x00,
	'c',0x00,
	'5',0x00,
	'1',0x00,
	's',0x00,
	'n',0x00,
	'd',0x00,
	'1',0x00,
	'c',0x00,
	' ',0x00,
	' ',0x00,
	' ',0x00,
	' ',0x00,
	' ',0x00,
	' ',0x00,
};

/********************************************
*
*GET_DESCRIPTOR(STRING Descriptor = 18 byte)
*
********************************************/
code UINT8   USB_SerialNumberString[] =
{

	0x12,           /*bLength*/
	0x03,           /*bDescriptorType: STRING*/
	'0', 0x00,     /*bString: 01.00.00*/
	'1', 0x00,
	'.', 0x00,
	'0', 0x00,
	'0', 0x00,
	'.', 0x00,
	'0', 0x00,
	'0', 0x00,
};

/**************************************************************************
*                                                                                                                                 
*  Function Name: usb_init                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/

void usb_init(void ){

	Pll_ndiv(1);
	Pll_rdiv(11);
	Pll_enable();
	Set_Usb_clock(1);
	Usb_enable();      /*Enable usb controller*/	
	Reset_All_Ep();   
	Stop_Reset_All_Ep();
	Usb_sel_ep(0);   /*select ep0*/ 
	UEPCONX = 0x80;
}

/**************************************************************************
*                                                                                                                                 
*  Function Name: usb_task                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/
void usb_task (void)
{



	if (Usb_reset_event())                      
	{
		Clear_Usb_reset_event();	
		printf("USB RESET detection\n ");
	}

	if (Usb_ep_int_event() == 0x01)
	{

		Usb_sel_ep(0);                
		if (Usb_setup_packet_receive())
		{

			usb_do_enumeration();
		}
	}
}

/**************************************************************************
*                                                                                                                                 
*  Function Name:usb_do_enumeration                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/
void usb_do_enumeration (void)
{ 

	Usb_sel_ep(0x00);
	UsbCtrlCmd.bmRequestType = UEPDATX;
	UsbCtrlCmd.bRequest =  UEPDATX;
	UsbCtrlCmd.wValue = UEPDATX;
	UsbCtrlCmd.wValue |= UEPDATX<<8;
	UsbCtrlCmd.wIndex  =UEPDATX;
	UsbCtrlCmd.wIndex |=UEPDATX<<8;
	UsbCtrlCmd.wLength = UEPDATX;
	UsbCtrlCmd.wLength |= UEPDATX<<8;

#if 0
	printf("UsbCtrlCmd.bmRequestType = %x\n",UsbCtrlCmd.bmRequestType);
	printf("UsbCtrlCmd.bRequest=%x\n",UsbCtrlCmd.bRequest);
	printf("UsbCtrlCmd.wValue=%x\n",UsbCtrlCmd.wValue);
	printf("UsbCtrlCmd.wIndex=%x\n",UsbCtrlCmd.wIndex);
	printf("UsbCtrlCmd.wLength=%x\n",UsbCtrlCmd.wLength);
#endif

	if((UsbCtrlCmd.bmRequestType&0x20) == 0x00){

		usb_standard_request();

	}
	else if((UsbCtrlCmd.bmRequestType&0x20) == 0x20){ 
		usb_class_request();

	}
}



/**************************************************************************
*                                                                                                                                 
*  Function Name:usb_standard_request                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/
void usb_standard_request(void)
{ 

	switch (UsbCtrlCmd.bRequest)                 
	{

	case USB_GET_DESCRIPTOR:

		usb_GetDescriptor();
		break;

	case USB_GET_CONFIGURATION:

		usb_get_configuration();
		break;

	case USB_SET_ADDRESS:
		usb_set_address();
		break;

	case USB_SET_CONFIGURATION:
		usb_set_configuration();
		break;

	case USB_CLEAR_FEATURE:
		usb_clear_feature();
		break;

	case USB_SET_FEATURE:
		usb_set_feature();
		break;

	case USB_GET_STATUS:
		usb_get_status();
		break;


	default:	  
		break;
	}

}

/**************************************************************************
*                                                                                                                                 
*  Function Name:usb_class_request                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/
void usb_class_request(void)
{ 


	switch (UsbCtrlCmd.bRequest)                 
	{

	case HID_SET_IDLE:
		hid_set_idle();
		break;
	case USB_GET_MAX_LUN:
		printf("USB_GET_MAX_LUN\n");
		usb_get_max_lun();
		break;
	default:
		break;
	}


}
/**************************************************************************
*                                                                                                                                 
*  Function Name:usb_GetDescriptor                                                                               
*                                                                                                                          
*  Descriptions:                                                       
*                                                                        
*  Arguments:                                                           
*                                                                       
*  Returns: None                                                         
*                                          
**************************************************************************/
void   usb_GetDescriptor(void){

	UINT8 data_to_send;
	UINT8 des_type,i;
	UINT8 desc_ptr = 0; 
	UINT8 zeroflag = 0;
	UINT8 ret;
	Usb_set_DIR_bit();                           

	des_type = UsbCtrlCmd.wValue>>8;/*read  wValue msb*/
	switch (des_type)
	{
	case USB_DEVICE_DESC:
		{


			G_pucCtrlDataPointer = (UINT8 *)USB_DeviceDescriptor;
			data_to_send = sizeof(USB_DeviceDescriptor);
			break;
		}

	case USB_CONFIGURATION_DESC:
		{

			G_pucCtrlDataPointer = (UINT8 *)USB_ConfigurationDescriptor;
			data_to_send = sizeof(USB_ConfigurationDescriptor);
			break;
		}

	case USB_STRING_DESC:
		{


			des_type = UsbCtrlCmd.wValue & 0xff;
			switch (des_type)
			{
			case USB_LANG_ID:
				{

					G_pucCtrlDataPointer = (UINT8 *)USB_LanguageIdString;
					data_to_send = sizeof(USB_LanguageIdString); 	 
					break;
				}

			case USB_MAN_INDEX:
				{

					G_pucCtrlDataPointer = (UINT8 *)USB_ManufacturerString;
					data_to_send = sizeof(USB_ManufacturerString);		  
					break;
				}
			case USB_PROD_INDEX:
				{

					G_pucCtrlDataPointer = (UINT8 *)USB_ProductString;
					data_to_send = sizeof(USB_ProductString);		  
					break;
				}
			case USB_SN_INDEX:
				{
					G_pucCtrlDataPointer = (UINT8 *)USB_SerialNumberString;
					data_to_send = sizeof(USB_SerialNumberString);
					break;
				}
			default:
				{
					return;
				}
			}
			break;
		}
	default:
		{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品77777| 91美女片黄在线观看| 一道本成人在线| 7777精品伊人久久久大香线蕉经典版下载 | 欧美一区二区三区免费在线看| 精品亚洲国产成人av制服丝袜 | 欧美人狂配大交3d怪物一区| 国产中文字幕一区| 亚洲另类在线制服丝袜| 久久久久久久久99精品| 欧美日本国产视频| av电影一区二区| 国产在线精品一区二区不卡了 | 天天影视色香欲综合网老头| 国产女主播一区| 欧美一区二区三区白人| 色噜噜狠狠成人中文综合| 激情另类小说区图片区视频区| 亚洲欧美aⅴ...| 亚洲国产成人午夜在线一区 | 日本一区二区视频在线| 日韩免费高清电影| 欧美日韩视频在线第一区| 99久久久无码国产精品| 国产一区二区精品久久91| 视频精品一区二区| 亚洲电影在线免费观看| 亚洲情趣在线观看| 国产精品久久久久久妇女6080| 精品乱人伦小说| 91精品国产乱| 91精品啪在线观看国产60岁| 欧美色图在线观看| 在线观看网站黄不卡| 91视频免费播放| 99视频一区二区三区| 不卡av免费在线观看| 成人午夜电影小说| 国产99久久久精品| 国产福利一区二区| 国产福利不卡视频| 91精品国产aⅴ一区二区| 日韩国产欧美在线视频| 亚洲午夜激情网站| 青青草国产成人99久久| 欧美激情综合在线| 日韩av在线发布| 欧美tickling网站挠脚心| 国产午夜三级一区二区三| 国产精品久久久久影院| 国产精品久久久久一区二区三区 | 99久久精品国产毛片| 91官网在线免费观看| 欧美成人精品3d动漫h| 中文字幕在线不卡一区二区三区| 亚洲伊人色欲综合网| 国产老妇另类xxxxx| 色噜噜夜夜夜综合网| www亚洲一区| 亚洲精选免费视频| 国产一区二区三区日韩 | 国产亚洲成年网址在线观看| 亚洲精品乱码久久久久久久久 | 亚洲综合久久av| 国产麻豆欧美日韩一区| 欧美色爱综合网| 国产欧美一区二区三区沐欲| 午夜视频一区二区| 成人国产亚洲欧美成人综合网| 日韩丝袜情趣美女图片| 中文字幕亚洲一区二区va在线| 开心九九激情九九欧美日韩精美视频电影 | 亚洲欧洲日本在线| 精油按摩中文字幕久久| 欧洲一区二区三区免费视频| 精品久久久久99| 亚洲高清免费一级二级三级| 波波电影院一区二区三区| 久久午夜国产精品| 日本不卡中文字幕| 欧美日韩国产高清一区| 1区2区3区欧美| 国产传媒日韩欧美成人| 日韩精品中午字幕| 香蕉久久一区二区不卡无毒影院| 99精品久久久久久| 国产亚洲精品资源在线26u| 青青草一区二区三区| 欧美日韩中文字幕精品| 色8久久精品久久久久久蜜| 国产精品日韩成人| 国产喂奶挤奶一区二区三区 | 美女在线观看视频一区二区| 欧美视频日韩视频在线观看| 香蕉久久夜色精品国产使用方法| 欧美色倩网站大全免费| 亚洲日本在线视频观看| 91小视频在线观看| 一区二区三区不卡视频在线观看| 欧美日韩精品一区二区在线播放| 洋洋av久久久久久久一区| 亚洲.国产.中文慕字在线| 色呦呦日韩精品| 18涩涩午夜精品.www| 粉嫩久久99精品久久久久久夜| 久久综合九色综合久久久精品综合 | 精品视频在线免费| 亚洲国产另类av| 欧美午夜片在线看| 亚洲第一电影网| 欧美巨大另类极品videosbest| 夜夜嗨av一区二区三区四季av| 色老汉一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| av网站免费线看精品| 亚洲日本在线天堂| 欧美亚洲日本国产| 午夜亚洲国产au精品一区二区| 欧美久久一二三四区| 蜜臂av日日欢夜夜爽一区| 日韩欧美123| 韩国女主播成人在线| 国产欧美日韩视频在线观看| 成人网在线播放| 亚洲色图欧美在线| 91久久国产综合久久| 五月激情综合婷婷| 欧美成人三级电影在线| 成人性生交大合| 亚洲另类在线制服丝袜| 777精品伊人久久久久大香线蕉| 日本欧美久久久久免费播放网| 久久综合九色欧美综合狠狠| 风间由美一区二区三区在线观看 | 亚洲激情男女视频| 日本一区二区视频在线| 欧美乱熟臀69xxxxxx| 欧美精品一区二区三区很污很色的 | 欧美午夜精品免费| 裸体歌舞表演一区二区| 国产欧美一区二区在线观看| 99久久精品99国产精品| 亚洲18色成人| 久久精品亚洲国产奇米99| 色欧美片视频在线观看在线视频| 日韩av电影免费观看高清完整版 | 亚洲欧洲综合另类在线 | 亚洲成av人影院| 欧美精品一区在线观看| 99久久久久久99| 丝袜亚洲另类丝袜在线| 精品国产sm最大网站| 91浏览器入口在线观看| 麻豆国产精品一区二区三区 | 欧美激情自拍偷拍| 欧美日韩免费高清一区色橹橹 | 成人午夜av在线| 奇米色一区二区| 亚洲欧洲无码一区二区三区| 欧美老肥妇做.爰bbww视频| 成人中文字幕电影| 日韩国产欧美视频| 18涩涩午夜精品.www| 日韩精品在线网站| 在线视频综合导航| 国产毛片精品国产一区二区三区| 亚洲自拍偷拍图区| 国产日韩欧美电影| 日韩欧美美女一区二区三区| 91麻豆免费在线观看| 久久97超碰色| 亚洲成年人影院| 亚洲图片欧美激情| 久久亚洲免费视频| 欧美剧情片在线观看| thepron国产精品| 韩日精品视频一区| 天天做天天摸天天爽国产一区| 国产精品水嫩水嫩| 久久久欧美精品sm网站| 欧美高清视频www夜色资源网| av在线一区二区| 国内精品视频一区二区三区八戒 | 色偷偷成人一区二区三区91| 韩国三级电影一区二区| 日日嗨av一区二区三区四区| 亚洲伦理在线免费看| 国产精品欧美经典| 久久精品视频一区二区| 日韩精品一区二区三区视频| 欧美日韩一区三区| 欧洲av在线精品| 91一区二区三区在线观看| 国产99一区视频免费| 国产一区二区不卡在线| 久久99精品国产.久久久久久| 欧美aaa在线| 日本在线不卡视频一二三区| 香蕉成人伊视频在线观看| 亚洲一区二区三区视频在线|