⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggpdiusbd12.h

📁 自己写的usb啦
💻 H
字号:
/******************************************************************** 
TITLE:			GGPDIUSBD12.H
AUTHOR:			GanGuoqiang
DISCRIPTION: 	
NOTE:			
DATE :			2009.1.26
***********************************************************************/
#ifndef __GGPDIUSBD12_H__ 
#define	__GGPDIUSBD12_H__ 
extern D12init();
//extern ISR_CONSULT();
//extern  pc_flag;//union USBPC_FLAG   
//extern  int_flag;//union USBINT_FLAG
//extern  lst_flag;//union USBLST_FLAG
/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////
/***********************************************************************************/
/***********************************************************************************/
#define  MAX_CONTROLDATA_SIZE 16
#define  USB_ENDPOINT_DIRECTION_MASK   0x80  //设备请求类型,传输方向 D7 1000,0000b
//#define  USB_IDLE 			   0
//#define  USB_TRANSMIT 		   1
//#define  USB_RECEIVE 		   2
//#define  D12_STALL    		   0x02
/***********************************************************************************/
/*****************************************************************************************/
#define MAX_ENDPOINTS						0x05//
#define EP1_PACKET_SIZE						0x10
#define EP0_PACKET_SIZE						0x10
#define EP2_PACKET_SIZE						0x40
/***************************************************************************************/
/*****************************bRequest	STANDARE REQUEST********************************/
/***************************************************************************************/
#define GET_STATUS                      0x00  //获取状态请求
#define CLEAR_FEATURE                   0x01  //清除特性请求
#define SET_FEATURE                     0x03  //设置特性请求
#define SET_ADDRESS                     0x05  //设置地址请求
#define GET_DESCRIPTOR                  0x06  //获取描述符请求
#define SET_DESCRIPTOR                  0x07  //设置描述符请求
#define GET_CONFIGURATION               0x08  //获取配置请求
#define SET_CONFIGURATION               0x09  //设置配置请求
#define GET_INTERFACE                   0x0A  //获取接口请求
#define SET_INTERFACE                   0x0B  //设置接口请求
#define SYNCH_FRAME                     0x0C  //同步帧请求****
/***************************************************************************************/
#define USB_STANDARD_REQUEST     0x00  //5,6位的定义
#define USB_TYPE_REQUEST		 0x20
#define USB_VENDOR_REQUEST       0x40
#define USB_RESERVED_REQUEST	 0x60
/***************************************************************************************/
/*****************************bDescriptorType	****************************************/
/***************************************************************************************/
#define USB_DEVICE_DESCRIPTOR_TYPE               0x01  //设备描述符编号
#define USB_CONFIGURATION_DESCRIPTOR_TYPE        0x02  //配置描述符编号
#define USB_STRING_DESCRIPTOR_TYPE               0x03  //字符串描述符编号
#define USB_INTERFACE_DESCRIPTOR_TYPE            0x04  //接口描述符编号
#define USB_ENDPOINT_DESCRIPTOR_TYPE             0x05  //端点描述符编号
/***********************************************************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////
/********************************flag bits**********************************************/
union USBPC_FLAG                                      //typedef 程序标志位
{
unsigned short Register;
struct 
{
 unsigned char bus_reset        :1;
 unsigned char suspend          :1;
/* unsigned char remote_wakeup    :1;*/
 unsigned char setup_packet		:1;//receive setup packet
/*
 unsigned char control_state	:2;//control endpoit(endpoint 0)status in service
								   //0:IDEL
								   //1:TRANSMIT
*/								   //2:RECEIVE
 unsigned char usb_idle			:1;
 unsigned char control_in_endp	:1;
 unsigned char control_out_endp :1;
 unsigned char configuration	:1;//0:haven't configed...1:configed/*	*/
 unsigned char ep1buf_full		:1;//endpoint 1output dual buffer full
 unsigned char ep2buf_full		:1;
}bits;
}pc_flag;//;//
union USBINT_FLAG                                       //typedef中断寄存器
{
 unsigned char Register[2];
 struct 
  {
   unsigned char control_out_endp  :1;
   unsigned char control_in_endp   :1;
   unsigned char endp_1_out        :1;
   unsigned char endp_1_in         :1;
   unsigned char main_out_endp     :1;
   unsigned char main_in_endp      :1;
   unsigned char bus_reset         :1;
   unsigned char suspend		   :1;
   unsigned char DMA_EOT           :1;
   unsigned char reserved          :7;
  }bits;
}int_flag;//;//


union USBLST_FLAG                                   //typedef 端点最后处理状态
{
 unsigned char Register;
 struct
 {
  unsigned char successful          :1;
  unsigned char error_code          :4;
  unsigned char setup_packet        :1;
  unsigned char data1_ok            :1;
  unsigned char prestatus_not_read  :1;
 }bits;
}lst_flag;//;//
/********************************************************************************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////
/********************************structure**************************************************************/
/********************************USB DEVICE REQUEST********************************************************* 
DISCRIPTION: 	USING DEFAUT PIPE CONTROL TRANSFER,THE REQUEST AND PARAMETER SENT WITH THE SETUP PACKET
DATE :			2009.1.21
**********************************************************************************************************/
typedef struct _device_request
{
	unsigned char bmRequestType;//D7:IO(0 ALWAYS OUT);	D65:0.STANDARD/1.CLASS/2.VENDOR/3.RESERVED	D4-0:0.DEVICE/1.INTERFACE/2.ENDPOINT/3.OTHER/RESERVED
	unsigned char bRequest;		//
	unsigned char wValue;  		//WORD SIZE FIELD
	unsigned short wIndex;		//INDEX OR OFFSET;IDENTIFY ENDP/INTERFACE bmRequest SPECIFIED
								//D7:IO;D3-0:ENDPOINT NUM
								//D7-0:INTERFACE NUM
	unsigned short wLength;		//NUM OF BYTES IF DATA STAGE FOLLOWED/DISPITE IO PATTERN
	//unsigned short
	}DEVICE_REQUEST;
typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;	 //usb request structure,8bytes
	unsigned short wLength;			 //xfer total bytes
	unsigned short wCount;			 //xfer bytes counter
	unsigned char *pData;			 //xferring data's pointer
	unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];//requested data 16
}CONTROL_XFER;
/******************************************************************************/
/******************************************************************** 
 initial data
***********************************************************************/
typedef struct _DEVICE_DCESCRIPTOR_STRUCT
{
 unsigned char blength;                               //设备描述符的字节数大小
 unsigned char bDescriptorType;	                      //设备描述符类型编号
 unsigned short bcdUSB;                                //USB版本号
 unsigned char bDeviceClass;                          //USB分配的设备类代码
 unsigned char bDeviceSubClass;                       //USB分配的子类代码
 unsigned char bDeviceProtocol;                       //USB分配的设备协议代码
 unsigned char bMaxPacketSize0;                       //端点0的最大包大小
 unsigned short idVendor;                              //厂商编号
 unsigned short idProduct;                             //产品编号
 unsigned short bcdDevice;                             //设备出厂编号
 unsigned char iManufacturer;                         //设备厂商字符串的索引
 unsigned char iProduct;                              //描述产品字符串的索引
 unsigned char iSerialNumber;                         //描述设备序列号字符串的索引
 unsigned char bNumConfigurations;                    //可能的配置数量
}
USB_DEVICE_DESCRIPTOR;
typedef struct _CONFIGURATION_DESCRIPTOR_STRUCT
{
 unsigned char bLength;                               //配置描述符的字节数大小
 unsigned char bDescriptorType;                       //配置描述符类型编号
 unsigned short wTotalLength;                          //此配置返回的所有数据大小
 unsigned char bNumInterfaces;                        //此配置所支持的接口数量
 unsigned char bConfigurationValue;                   //Set_Configuration命令所需要的参数值
 unsigned char iConfiguration;                        //描述该配置的字符串的索引值
 unsigned char bmAttributes;                          //供电模式的选择
 unsigned char MaxPower;                              //设备从总线提取的最大电流
}
USB_CONFIGURATION_DESCRIPTOR;
typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
 unsigned char bLength;                               //接口描述符的字节数大小
 unsigned char bDescriptorType;                       //接口描述符的类型编号
 unsigned char bInterfaceNumber;                      //该接口的编号
 unsigned char bAlternateSetting;                     //备用的接口描述符编号
 unsigned char bNumEndpoints;                         //该接口使用的端点数,不包括端点0
 unsigned char bInterfaceClass;                       //接口类型
 unsigned char bInterfaceSubClass;                    //接口子类型
 unsigned char bInterfaceProtocol;                    //接口遵循的协议
 unsigned char iInterface;                            //描述该接口的字符串索引值
}
USB_INTERFACE_DESCRIPTOR;
typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
 unsigned char bLength;                                //端点描述符字节数大小
 unsigned char bDescriptorType;                       //端点描述符类型编号
 unsigned char bEndpointAddress;                      //端点地址及输入输出属性
 unsigned char bmAttributes;                          //端点的传输类型属性
 unsigned short wMaxPacketSize;                        //端点收、发的最大包大小
 unsigned char bInterval;                             //主机查询端点的时间间隔
}
USB_ENDPOINT_DESCRIPTOR;
///////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////
code USB_DEVICE_DESCRIPTOR DeviceDescr=
{
	sizeof(USB_DEVICE_DESCRIPTOR),
	USB_DEVICE_DESCRIPTOR_TYPE,
	SWAP16(0X0110),
	0x0dc,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
	0,0,
	EP0_PACKET_SIZE,
	SWAP16(0X0471),
	SWAP16(0X0666),
	SWAP16(0X0100),
	0,0,0,
	1	
};
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),
	USB_CONFIGURATION_DESCRIPTOR_TYPE,
	SWAP16(0x2e),						 //CONFIG_DESCRIPTOR_LENGTH
	1,
	1,
	0,
	0XA0,
	0X32	
};
code USB_INTERFACE_DESCRIPTOR InterfaceDescr=
{
	sizeof(USB_INTERFACE_DESCRIPTOR),
	USB_INTERFACE_DESCRIPTOR_TYPE,
	0,
	0,
	MAX_ENDPOINTS,
	0xdc,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
	0x0a0,//USB_SUBCLASS_CODE_TEST_CLASS_D12,
	0x0b0,//USB_PROTOCOL_CODE_TEST_CLASS_D12,
	0
};
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr= //
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0X81,
	0x03,//USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP16(EP1_PACKET_SIZE),
	10
};
code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr=//
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0X1,
	0x03,//USB_ENDPOINT_TYPE_INTERRUPT,
	SWAP16(EP1_PACKET_SIZE),
	10
};
code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr=  //
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0X82,
	0x02,//USB_ENDPOINT_TYPE_BULK,
	SWAP16(EP2_PACKET_SIZE),
	10	
};
code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr= //
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0X2,
	0x02,//USB_ENDPOINT_TYPE_BULK,
	SWAP16(EP2_PACKET_SIZE),
	0x0a
};
/******************************************************************************/
#endif
/**/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -