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

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

?? usb.c

?? ATMEL AT89C51SND1 IDE TO USB READER
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(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:
		{

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久不卡8050| 亚洲另类在线视频| 欧美色图第一页| a亚洲天堂av| 成人听书哪个软件好| 国产成人av资源| 国产一区二区精品久久91| 狠狠狠色丁香婷婷综合久久五月| 蜜臀91精品一区二区三区| 久久99久国产精品黄毛片色诱| 久久精品av麻豆的观看方式| 男人的天堂久久精品| 蜜臀av一区二区在线免费观看| 久久精品99国产精品| 国产精品18久久久久久久久| 国产不卡视频一区| 色丁香久综合在线久综合在线观看| 91视频免费观看| 精品1区2区3区| 精品国产免费久久| 国产欧美一区二区精品忘忧草| 国产丝袜欧美中文另类| 亚洲精品中文字幕乱码三区| 亚洲一区二区三区四区五区黄 | 中文字幕一区在线| 一区二区三区加勒比av| 日日夜夜精品视频免费| 国产剧情av麻豆香蕉精品| 国产成人一区在线| 在线观看免费成人| 精品国产一区二区三区忘忧草| 日本一区二区不卡视频| 亚洲一区二区免费视频| 国产一区欧美一区| 在线视频国产一区| 国产亚洲欧美色| 亚洲成人在线观看视频| 国产精品自拍av| 色狠狠av一区二区三区| 久久久高清一区二区三区| 亚洲一区二区视频| 国产福利一区二区三区视频在线| 色综合中文综合网| 国产香蕉久久精品综合网| 亚洲精品自拍动漫在线| 国产精品综合一区二区三区| 欧美主播一区二区三区| 国产亚洲欧美色| 美女视频网站黄色亚洲| 在线看日本不卡| 国产精品丝袜在线| 久久99日本精品| 欧美欧美欧美欧美首页| 亚洲欧美国产三级| 国产成人综合自拍| 日韩一级免费观看| 亚洲一区二区精品久久av| 成人精品一区二区三区四区| 久久亚洲免费视频| 日韩不卡一区二区三区| 欧洲av在线精品| 亚洲男人的天堂网| zzijzzij亚洲日本少妇熟睡| 欧美tickling挠脚心丨vk| 香港成人在线视频| 日本道色综合久久| 亚洲乱码一区二区三区在线观看| 风间由美性色一区二区三区| 国产亚洲精久久久久久| 国产一区二区h| 亚洲精品一区二区三区蜜桃下载 | 91视频免费播放| ...av二区三区久久精品| 国产成人av在线影院| 国产视频一区在线播放| 国产激情一区二区三区| 久久久久久电影| 国产99久久久精品| 亚洲欧洲日韩在线| 99re视频这里只有精品| 日韩美女视频一区| 91成人在线免费观看| 亚洲欧美中日韩| 一本色道久久综合亚洲91| 中文字幕在线一区免费| 99精品久久免费看蜜臀剧情介绍| 综合中文字幕亚洲| 精品视频全国免费看| 日韩av中文字幕一区二区三区| 这里是久久伊人| 极品少妇一区二区| 欧美国产乱子伦| 97se狠狠狠综合亚洲狠狠| 亚洲综合一区在线| 日韩三区在线观看| 国产成人啪免费观看软件 | 欧美日韩专区在线| 婷婷六月综合网| 久久久综合激的五月天| 一本大道av一区二区在线播放| 亚洲综合无码一区二区| 日韩一区二区三区在线观看| 久久se这里有精品| 亚洲情趣在线观看| 日韩一区二区三区四区五区六区 | 亚洲欧洲国产专区| 欧美视频你懂的| 九一九一国产精品| 一区二区在线观看视频| 777xxx欧美| eeuss影院一区二区三区| 午夜精品福利在线| 中文子幕无线码一区tr| 欧美日韩aaaaa| 成人精品国产福利| 奇米色777欧美一区二区| 中文字幕一区二区三区在线观看 | 欧美日本韩国一区二区三区视频| 久久er精品视频| 亚洲国产一区二区在线播放| 337p日本欧洲亚洲大胆精品| 在线视频一区二区免费| 成人免费毛片嘿嘿连载视频| 午夜精品视频一区| 亚洲免费在线视频一区 二区| www成人在线观看| 欧美精品日日鲁夜夜添| 成人一区二区三区中文字幕| 日本午夜一本久久久综合| 中文字幕一区三区| 久久久久久久久久久久久久久99 | 91麻豆精品国产91久久久资源速度| 精久久久久久久久久久| 亚洲午夜久久久| 亚洲乱码国产乱码精品精小说| 国产日韩欧美a| 精品久久久久久久久久久院品网 | 中文字幕免费观看一区| 精品国产凹凸成av人网站| 欧美日韩国产片| 91丨porny丨国产| 大白屁股一区二区视频| 黄页视频在线91| 免费高清在线视频一区·| 婷婷夜色潮精品综合在线| 一区二区三区在线高清| 一区二区在线免费观看| 亚洲日本一区二区| 亚洲欧洲日韩av| 亚洲四区在线观看| 亚洲精品国产精品乱码不99 | 狠狠色丁香久久婷婷综| 久久se精品一区精品二区| 美女网站色91| 国产乱码字幕精品高清av| 韩日精品视频一区| 另类人妖一区二区av| 精品一区二区三区免费播放| 久久精品国产99久久6| 国产真实乱偷精品视频免| 国产一区二区三区精品欧美日韩一区二区三区| 日韩主播视频在线| 久久 天天综合| 成人深夜福利app| 91免费在线视频观看| 欧美午夜电影网| 欧美日韩国产不卡| 日韩一区二区视频| 日本一区二区三区视频视频| 国产精品嫩草久久久久| 亚洲精品乱码久久久久久久久| 亚洲精品免费电影| 美腿丝袜在线亚洲一区 | 亚洲高清一区二区三区| 石原莉奈一区二区三区在线观看| 蜜乳av一区二区| av在线一区二区| 在线播放亚洲一区| 国产清纯在线一区二区www| 亚洲欧美综合色| 日韩av一级片| 99久久99精品久久久久久| 欧美三级欧美一级| 久久亚洲综合色一区二区三区| 国产精品久久久久久久久搜平片| 亚洲高清视频在线| 粉嫩蜜臀av国产精品网站| 欧美色图免费看| 欧美激情一区二区三区蜜桃视频| 亚洲一级二级三级| 国产一二三精品| 欧美性色黄大片| 国产精品热久久久久夜色精品三区 | 久久久www免费人成精品| 亚洲乱码日产精品bd| 国产自产高清不卡| 欧美人狂配大交3d怪物一区| 久久精品日产第一区二区三区高清版| 亚洲国产精品尤物yw在线观看| 国产九色sp调教91|