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

📄 usbvariables.h

📁 LT-1B msp430 程序原理图集合
💻 H
字号:
//这里定义了USB通信程序用到的所有常量数据


/******************数据类型宏定义******************/
/*
typedef unsigned char unsigned char;
typedef unsigned int unsigned int;*/
/*************数据移位的宏定义**************/
#define BIT(x)	(1 << (x))
/******************USB常量******************/
#define WR_N    0       //写使能,P2.0
#define RD_N    1       //读使能,P2.1
#define C_D     2       //命令数据位(1:命令,0:数据),P2.2
#define D12_CS  3       //USB片选位,P2.3   
#define D12_INT 5       //USB中断,P2.5
#define USBINT_IE     P1IE
#define USBINT_IES    P1IES
#define USBINT_IFG    P1IFG
#define USBINT_SEL    P1SEL
#define USBINT_DDR    P1DIR
#define USBCTL_DDR    P2DIR
#define USBCTL_PORT   P2OUT
#define USBDAT_DDR    P5DIR
#define USBDAT_PORT   P5OUT
#define USBDAT_PIN    P5IN

#define CMD     0x01
#define DAT     0x00

#define UEN_GINT() _DINT()   //打开全局中断
#define EN_GINT()  _EINT()   //关闭全局中断

#define MSB(x)    (((x) >> 8) & 0xFF)

#define MAX_ENDPOINTS      (unsigned char)0x3

#define NOLAZYCLOCK			0x02
#define CLOCKRUNNING                    0x04
#define INTERRUPTMODE		        0x08
#define SOFTCONNECT			0x10
#define ENDP_NONISO			0x00
#define ENDP_ISOOUT			0x40
#define ENDP_ISOIN			0x80
#define ENDP_ISOIO			0xC0

#define CLOCK_12M			0x03
#define CLOCK_4M			0x0b
#define SETTOONE                        0x40
#define SOFONLY				0x80

#define NORMALPLUSSOF		        0x20
#define ENDP4INTENABLE		        0x40
#define ENDP5INTENABLE		        0x80

#define INT_ENDP0OUT		        0x01
#define INT_ENDP0IN			0x02
#define INT_ENDP1OUT	                0x04
#define INT_ENDP1IN			0x08
#define INT_ENDP2OUT		        0x10
#define INT_ENDP2IN			0x20
#define INT_BUSRESET		        0x40
#define INT_SUSPENDCHANGE	        0x80

#define SETUPPACKET			0x20
#define BUFFER0FULL			0x20
#define BUFFER1FULL			0x40

#define FULLEMPTY			0x01
#define STALL				0x02

#define USB_IDLE            0
#define USB_TRANSMIT        1
#define USB_RECEIVE         2

#define MAX_CTLDAT_SIZE	    8

#define USB_ENDPOINT_DIRECTION_MASK     0x80
#define USB_REQUEST_MASK         (unsigned char)0x0F
#define USB_REQUEST_TYPE_MASK    (unsigned char)0x60
#define USB_STANDARD_REQUEST     (unsigned char)0x00

#define DEVICE_ADDRESS_MASK      0x7F

#define USB_FEATURE_ENDPOINT_STALL          (unsigned int)0x0000
#define USB_FEATURE_REMOTE_WAKEUP           (unsigned int)0x0001

#define EP0_PACKET_SIZE    16
#define EP1_PACKET_SIZE    16
#define EP2_PACKET_SIZE    64

#define USB_RECIPIENT            (unsigned char)0x1F
#define USB_RECIPIENT_DEVICE     (unsigned char)0x00
#define USB_RECIPIENT_INTERFACE  (unsigned char)0x01
#define USB_RECIPIENT_ENDPOINT   (unsigned char)0x02

#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
#define USB_POWER_DESCRIPTOR_TYPE                 0x06

/* 设备描述符: 测试设备类型 */
#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc
/*****   D12 配置描述符长度  ******/
#define CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \
									+ sizeof(USB_INTERFACE_DESCRIPTOR) \
									+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
/*****   D12 接口描述符中: 除端点0的端点索引数目  ******/
#define NUM_ENDPOINTS	4
/* 设备描述符: 测试设备类型 */
#define USB_CLASS_CODE_TEST_CLASS_DEVICE                    0xdc

/* 接口描述符: 子类代码 */
#define USB_SUBCLASS_CODE_TEST_CLASS_D12                    0xA0

/* 接口描述符: 协议代码 */
#define USB_PROTOCOL_CODE_TEST_CLASS_D12                    0xB0
/*******************************************************
	      USB 端点描述符结构体: 端点属性
********************************************************/
#define USB_ENDPOINT_TYPE_MASK                    0x03

#define USB_ENDPOINT_TYPE_CONTROL                 0x00
#define USB_ENDPOINT_TYPE_ISOCHRONOUS             0x01
#define USB_ENDPOINT_TYPE_BULK                    0x02
#define USB_ENDPOINT_TYPE_INTERRUPT               0x03

//这里定义了USB通信程序用到的所有全局变量
typedef struct flags
{
	unsigned char bus_reset;	        //总线复位标志
	unsigned char suspend;	            //挂起改变标志
	unsigned char setup_packet;	        //收到SETUP包
	unsigned char remote_wakeup;
	unsigned char in_isr;	            //USB中断服务标志
	unsigned char control_state;	    //控制端点处理标志
									    //0: IDLE	   空闲状态
										//1: TRANSMIT  数据发送状态
										//2: RECEIVE   数据接收状态
 	unsigned char configuration;	    //配置标志(0: 未配置; 1: 已经配置)		
	unsigned char ep1_rxdone;	        //端点 1 收到数据标志
	unsigned char ep2_rxdone;	        //端点 2 收到数据标志
	unsigned char ep2buf_full;	        //端点 2 接收双缓冲区满标志
} All_Usb_Flags;
All_Usb_Flags USB_FLAG={0,0,0,0,0,0,0,0,0,0};

typedef struct request
{
	unsigned char bmRequestType;
	unsigned char bRequest;
	unsigned int wValue;
	unsigned int wIndex;
	unsigned int wLength;
}DEVICE_REQUEST;

typedef struct xfer
{
	DEVICE_REQUEST DeviceRequest;
	unsigned int wLength;
	unsigned int wCount;
	unsigned char * pData;
	unsigned char dataBuffer[MAX_CTLDAT_SIZE];
}CONTROL_XFER;

typedef struct _USB_DEVICE_DESCRIPTOR 
{
    unsigned char bLength;
    unsigned char bDescriptorType;
    unsigned char bcdUSB0;
    unsigned char bcdUSB1;
    unsigned char bDeviceClass;
    unsigned char bDeviceSubClass;
    unsigned char bDeviceProtocol;
    unsigned char bMaxPacketSize0;
    unsigned char idVendor0;
    unsigned char idVendor1;
    unsigned char idProduct0;
    unsigned char idProduct1;
    unsigned char bcdDevice0;
    unsigned char bcdDevice1;
    unsigned char iManufacturer;
    unsigned char iProduct;
    unsigned char iSerialNumber;
    unsigned char bNumConfigurations;
} USB_DEVICE_DESCRIPTOR;

/***********  USB  接口描述符结构体  ****************/
typedef struct _USB_INTERFACE_DESCRIPTOR 
{
    unsigned char bLength;
    unsigned char bDescriptorType;
    unsigned char bInterfaceNumber;
    unsigned char bAlternateSetting;
    unsigned char bNumEndpoints;
    unsigned char bInterfaceClass;
    unsigned char bInterfaceSubClass;
    unsigned char bInterfaceProtocol;
    unsigned char iInterface;
} USB_INTERFACE_DESCRIPTOR;

/***********  USB  配置描述符结构体  ****************/
typedef struct _USB_CONFIGURATION_DESCRIPTOR 
{
    unsigned char bLength;
    unsigned char bDescriptorType;
    unsigned char wTotalLength0;
    unsigned char wTotalLength1;
    unsigned char bNumInterfaces;
    unsigned char bConfigurationValue;
    unsigned char iConfiguration;
    unsigned char bmAttributes;
    unsigned char MaxPower;
} USB_CONFIGURATION_DESCRIPTOR;

/***********  USB  端点描述符结构体  ****************/
typedef struct _USB_ENDPOINT_DESCRIPTOR 
{
    unsigned char bLength;
    unsigned char bDescriptorType;
    unsigned char bEndpointAddress;
    unsigned char bmAttributes;
    unsigned char wMaxPacketSize0;
    unsigned char wMaxPacketSize1;
    unsigned char bInterval;
} USB_ENDPOINT_DESCRIPTOR;

/***********  D12 USB 各种描述符结构体 *********************/
typedef struct _USB_DESCRIPTOR 
{
	USB_CONFIGURATION_DESCRIPTOR ConfigDescr;		//配置描述符
	USB_INTERFACE_DESCRIPTOR InterfaceDescr;		//接口描述符
	USB_ENDPOINT_DESCRIPTOR EP1_TXDescr;			//端点1输入描述符
	USB_ENDPOINT_DESCRIPTOR EP1_RXDescr;			//端点1输出描述符
	USB_ENDPOINT_DESCRIPTOR EP2_TXDescr;			//端点2输入描述符
	USB_ENDPOINT_DESCRIPTOR EP2_RXDescr;			//端点2输出描述符
} USB_DESCRIPTOR;

CONTROL_XFER ControlData;
unsigned char Ep1Buf[EP1_PACKET_SIZE];			        //端点1接收缓冲区
unsigned char Ep2Buf[EP2_PACKET_SIZE];				//端点2接收缓冲区

//设备描述符
USB_DEVICE_DESCRIPTOR DeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),				//设备描述符长度,= 12H
	USB_DEVICE_DESCRIPTOR_TYPE,				//设备描述符类型,= 01H
	0x00,0x10,						//协议版本,= 1.10
	USB_CLASS_CODE_TEST_CLASS_DEVICE,			//测试设备类型, = 0DCH	
	0, 0,							//设备子类,设备协议
	EP0_PACKET_SIZE,					//端点0最大数据包大小,= 10H	
	0x71,0x04,						//PHILIPS公司的设备ID	
	0x14,0x41,						//设备制造商定的产品ID
	0x00,0x01,						//设备系列号
	0, 0, 0,						//索引
	1							//可能的配置数
};

USB_DESCRIPTOR usb_descr =
{
//配置描述符
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),		        //配置描述符长度,= 09H
	USB_CONFIGURATION_DESCRIPTOR_TYPE,			//配置描述符类型,= 02H
	CONFIG_DESCRIPTOR_LENGTH,0x00,				//描述符总长度, = 002EH
	1,							//只支持1个接口
	1,							//配置值
	0,							//字符串描述符指针(无)
	0xa0,							//自供电,支持远程唤醒
	0x32							//最大功耗(100mA)
},
//接口描述符
{
	sizeof(USB_INTERFACE_DESCRIPTOR),			//接口描述符长度,= 09H
	USB_INTERFACE_DESCRIPTOR_TYPE,				//接口描述符类型,= 04H
	0,						        //接口数,只有1个
	0,							//可选配置,只有1个
	NUM_ENDPOINTS,						//除端点0的端点索引数目,= 04H
	USB_CLASS_CODE_TEST_CLASS_DEVICE,			//测试设备类型,= 0DCH
	USB_SUBCLASS_CODE_TEST_CLASS_D12,			//子类代码,= 0A0H	
	USB_PROTOCOL_CODE_TEST_CLASS_D12,			//协议代码,= 0B0H
	0							//字符串描述符索引
},
//端点描述符,端点1输入
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			//端点描述符长度,= 07H
	USB_ENDPOINT_DESCRIPTOR_TYPE,				//端点描述符类型,= 05H
	0x81,							//端点1 IN
	USB_ENDPOINT_TYPE_INTERRUPT,				//中断传输, = 03H
	EP1_PACKET_SIZE,0x00,					//端点最大包的大小,= 0010H
	1							//传输间隔时间,= 1ms
},
//端点描述符,端点1输出
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			//端点描述符长度,= 07H
	USB_ENDPOINT_DESCRIPTOR_TYPE,				//端点描述符类型,= 05H
	0x01,							//端点1 OUT
	USB_ENDPOINT_TYPE_INTERRUPT,				//中断传输,= 03H
	EP1_PACKET_SIZE,0x00,					//端点最大包的大小,= 0010H
	1						        //传输间隔时间,= 1ms
},
//端点2输入
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			//端点描述符长度,= 07H
	USB_ENDPOINT_DESCRIPTOR_TYPE,				//端点描述符类型,= 05H
	0x82,							//端点2 OUT
	USB_ENDPOINT_TYPE_BULK,					//批量传输,= 02H
	EP2_PACKET_SIZE,0x00,					//端点最大包的大小,= 0040H
	1							//批量传输时该设置无效
},
//端点2输出
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			//端点描述符长度,= 07H
	USB_ENDPOINT_DESCRIPTOR_TYPE,				//端点描述符类型,= 05H
	0x02,							//端点2 IN	
	USB_ENDPOINT_TYPE_BULK,					//批量传输,= 02H
	EP2_PACKET_SIZE,0x00,					//端点最大包的大小,= 0040H
	1							//批量传输时该设置无效
} 
};

⌨️ 快捷键说明

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