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

📄 usb.h

📁 AVR单片机控制的PDIUSBD12原程序
💻 H
字号:
#ifndef _usb_h_
#define _usb_h_

#define UCHAR unsigned char
#define USHORT unsigned short

#define SWAP1(x)				((x&0xf0)<<4)|((x>>4)&0x0f)	//高低4位互换
#define SWAP(x)				((x&0xff)<<8)|((x>>8)&0xff)	//高低8位互换
#define MSB(x)				((x>>8) & 0xff) 	//获取高八位
#define LSB(x)				(x & 0xff)			//获取低八位
#define DISABLE				cli()
#define ENABLE				sei()
//***********************************
#define USB_REQUSET_TYPE_MASK	0x60
#define USB_REQUSET_MASK		0x0f
#define USB_STANDERD_REQUEST	0x00
#define USB_VENDOR_REQUEST		0x40
//***********************************
#define MAX_CONTROLDATA_SIZE	0x08	//请求的数据最大值
#define DMA_BUFFER_SIZE			16000
#define DMA_IDLE				0
#define DMA_RUNNING				1
#define DMA_PENDING				2
//*********************************
#define D12_NOLAZYCLOCK			0x02
#define D12_CLOCKRUNNING  	    0x04
#define D12_INTERRUPTMODE		0x08
#define D12_SOFTCONNECT			0x10
#define D12_ENDP_NONISO			0x00
#define D12_ENDP_ISOOUT			0x40
#define D12_ENDP_ISOIN			0x80
#define D12_ENDP_ISOIO			0xC0

#define D12_CLOCK_12M			0x05  //0x03
#define D12_CLOCK_8M			0x05
#define D12_CLOCK_4M			0x0b
#define D12_SETTOONE   		    0x40
#define D12_SOFONLY			    0x80
//**************************************
#define SETUP_DMA_REQUEST 		0x0471
#define GET_FIRMWARE_VERSION    0x0472
#define GET_BUFFER_SIZE		    0x0474
#define TRANS_REQUEST			0x0471
//定义标准的描述符类型,也就是USB分配的各种描述符的标号,即bDescriptorType字段的值
#define DEVICE_DESCRIPTOR						0x01	//设备描述符
#define CONFIGURATION_DESCRIPTOR				0x02	//配置描述符
#define STRING_DESCRIPTOR						0x03	//字符串描述符
#define INTERFACE_DESCRIPTOR					0x04	//接口描述符
#define ENDPOINT_DESCRIPTOR						0x05	//端点描述符

//定义标准的USB请求命令,即USB分配的各种请求的编号,即bRequest字段的值
#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 EP0_PACKET_SIZE 					0x10	//端点0最大数据包大小,=10H
#define EP1_PACKET_SIZE 					0x04	//端点最大包的大小=10H
#define EP2_PACKET_SIZE 					0x0040	//端点最大包的大小,=40H
//**************************************
#define USB_ENDPOINT_DIRECTION_MASK			0x80	//端点数据传输方向
//USB标准设备请求
#define NUM_ENDPOINTS						0x04	//除端点0的端点索引数目,=04H
#define MAX_ENDPOINTS						0x03	//除端点0的端点索引数目,=04H
//中断标志位定义
#define D12_INT_ENDP0OUT		0x01	//控制输入端点
#define D12_INT_ENDP0IN			0x02	//控制输出端点
#define D12_INT_ENDP1OUT		0x04	//端点1输入
#define D12_INT_ENDP1IN			0x08	//端点1输出
#define D12_INT_ENDP2OUT		0x10	//主输入端点
#define D12_INT_ENDP2IN			0x20	//主输出端点
#define D12_INT_BUSREST			0x40	//总线复位
#define D12_INT_SUSPENDCHANGE	0x80	//挂起改变
#define D12_INT_EOT				0x0100	//DMA EOT
//端点上一状态标志
#define D12_SETUPPACKET			0x20	//设置包
//控制端点处理状态
#define USB_IDLE				0x00	//0:IDEL		空闲状态
#define USB_TRANSMIT			0x01	//1:TRANSMIT	数据发送状态
#define USB_RECEIVE				0x02	//2:RECEIVE		数据接收状态
//*******************************************
#define CONFIG_DESCRIPTOR_LENGTH 			(unsigned long int)(sizeof(USB_CONFIGURATION_DESCRIPTOR)+ sizeof(USB_INTERFACE_DESCRIPTOR)+(NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR)))	//描述符总长度,=2EH
#define USB_DEVICE_DESCRIPTOR_TYPE			0x01	//设备描述符类型,=01H
#define USB_CLASS_CODE_TEST_CLASS_DEVICE	0x0DC	//测试设备类型,=0DCH
#define USB_CONFIGURATION_DESCRIPTOR_TYPE	0x02	//配置描述符类型,=02H
#define USB_INTERFACE_DESCRIPTOR_TYPE		0x04	//接口描述符类型,=04H
#define USB_CLASS_CODE_TEST_CLASS_DEVICE	0x0DC	//测试设备类型,=0DCH
#define USB_SUBCLASS_CODE_TEST_CLASS_D12	0xA0	//之类代码,=0A0H
#define USB_PTOTOCL_CODE_TEST_CLASS_D12 	0xB0	//协议代码,=0B0H
#define USB_ENDPOINT_DESCRIPTOR_TYPE		0x05	//端点描述符类型,=05H
#define USB_ENDPOINT_TYPE_INTERRUPT 		0x03	//中断传输,=03H
#define USB_ENDPOINT_TYPE_BULK 				0x02	//批量传输,=02H
//********************************************
#define USB_DEVICE_CLASS_RESERVED           0x00
#define USB_DEVICE_CLASS_AUDIO              0x01
#define USB_DEVICE_CLASS_COMMUNICATIONS     0x02
#define USB_DEVICE_CLASS_HUMAN_INTERFACE    0x03
#define USB_DEVICE_CLASS_MONITOR            0x04
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
#define USB_DEVICE_CLASS_POWER              0x06
#define USB_DEVICE_CLASS_PRINTER            0x07
#define USB_DEVICE_CLASS_STORAGE            0x08
#define USB_DEVICE_CLASS_HUB                0x09
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC    0xFF
//*****************************************
//USB标准设备请求
#define D12_STALL							0x02	//端点停止标志位
#define USB_RECIPIENT						0x1f
#define DEVICE_ADDRESS_MASK					0x7f
#define USB_RECIPIENT_DEVICE				0x00	//设备
#define USB_RECIPIENT_INTERFACE				0x01	//接口
#define USB_RECIPIENT_ENDPOINT				0x02	//端点
#define USB_FEATURE_REMOTE_WAKEUP			0x01	//设备远程唤醒
#define USB_FEATURE_ENDPOINT_STALL			0
//USB事件标志
typedef union _epp_flags                                          
{
	struct _flags
	{
		UCHAR timer					:1;		//时间溢出
		UCHAR bus_reset				:1;		//总线复位标志
		UCHAR suspend				:1;		//挂起改变标志
		UCHAR setup_packet			:1;		//收到setup包
		UCHAR remote_wakeup			:1;		//远程唤醒标志(未使用)
		UCHAR in_isr				:1;		//USB中断服务标志
		UCHAR control_state			:2;		//控制端点处理状态
											//0:IDEL		空闲状态
											//1:TRANSMIT	数据发送状态
											//2:RECEIVE		数据接收状态
		UCHAR configuration			:1;		//
		UCHAR command				:1;		//
		UCHAR ep1_rxdone			:1;		//
		UCHAR ep2_rxdone			:1;		//
		UCHAR ep2buf_full			:1;		//		
	}bits;
	USHORT value;
}EPPFLAGS;
//USB标准设备请求
typedef struct _device_request
{
	UCHAR bmRequestType;			//请求类型
	UCHAR bRequest;					//USB请求
	USHORT wValue;					//USB数值
	USHORT wIndex;					//USB请求索引
	USHORT wLength;					//长度
}DEVICE_REQUEST;
typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;	//USB设备请求结构体,8个字节
	USHORT wLength;					//传输数据的总字节数
	USHORT wCount;					//传输字节数统计
	UCHAR *pData;					//传输数据的指针
	UCHAR dataBuffer[MAX_CONTROLDATA_SIZE];//请求的数据
}CONTROL_XFER;
//定义标准的描述符类型
typedef struct _USB_DEVICE_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT bcdUSB;
    UCHAR bDeviceClass;
    UCHAR bDeviceSubClass;
    UCHAR bDeviceProtocol;
    UCHAR bMaxPacketSize0;
    USHORT idVendor;
    USHORT idProduct;
    USHORT bcdDevice;
    UCHAR iManufacturer;
    UCHAR iProduct;
    UCHAR iSerialNumber;
    UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
//配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    USHORT wTotalLength;
    UCHAR bNumInterfaces;
    UCHAR bConfigurationValue;
    UCHAR iConfiguration;
    UCHAR bmAttributes;
    UCHAR MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
//接口描述符
typedef struct _USB_INTERFACE_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bInterfaceNumber;
    UCHAR bAlternateSetting;
    UCHAR bNumEndpoints;
    UCHAR bInterfaceClass;
    UCHAR bInterfaceSubClass;
    UCHAR bInterfaceProtocol;
    UCHAR iInterface;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
//端点描述符
typedef struct _USB_ENDPOINT_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bEndpointAddress;
    UCHAR bmAttributes;
    USHORT wMaxPacketSize;
    UCHAR bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
//字符串描述符
typedef struct _USB_STRING_DESCRIPTOR {
    UCHAR bLength;
    UCHAR bDescriptorType;
    UCHAR bString[1];
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;


unsigned char *EpBuf,GenEpBuf[64];
EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;


#endif

⌨️ 快捷键说明

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