?? usbvariables.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 + -