?? d12.h
字號:
#ifndef _D12_H_
#define _D12_H_
//全局標志
typedef union _event_flags
{
struct _flags
{
unsigned bus_reset :1; //總線復位
unsigned bus_suspend :1; //總結掛起改變
unsigned setup_packet :1; //收到setup包
unsigned remote_wakeup :1; //遠程喚醒標志位(未使用)
unsigned usb_isr :1; //USB中斷標志位
unsigned control_state :2; //控制端點狀態
unsigned configuration :1; //配置
unsigned command :1; //
unsigned ep1_rxdone :1; //端點1收到數據標志位
unsigned ep2_rxdone :1; //端點2收到數據標志位
unsigned ep2_full :1; //端點2輸出雙緩沖區滿標志位
}bits;
uint16 value;
}EVENT_FLAGS;
//標準設備請求
typedef struct _device_request
{
uint8 bmRequestType;//請求類型
uint8 bRequest; //USB請求
uint16 wValue; //USB數值
uint16 wIndex; //USB請求索引
uint16 wLength; //長度
}DEVICE_REQUEST;
//帶數據的廠商標準請求
#define MAX_CONTROL_DATA_SIZE 16
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest;
uint16 wLength;
uint16 wCount;
uint8 * pData;
uint8 dataBuffer[MAX_CONTROL_DATA_SIZE];
}CONTROL_XFER;
#define RSTUSB 0x00000400 //P0.10
#define SUSP 0x00002000 //P0.13
//*****************************************************************************
void D12_init(void);
unsigned short D12_read_interrupt_reg(void);
unsigned char D12_read_last_status_reg(unsigned char bEndpoint);
void control_handler(void);
uint16 D12_write_Endpoint(uint8 bEndpoint,uint8 bLenth,const uint8 *buf);
void main_rxdone(void);
void DISABLE(void);
void ENABLE(void);
//*****************************************************************************
#define USB_IDLE 0x00
#define USB_TRANSMIT 0x01
#define USB_RECEIVE 0x02
/*
*********************************************************************************************
* 通用 描述符結構體成員取值宏定義
*********************************************************************************************
*/
//*******************************************************
// USB 設備請求類型掩碼 masks
//*******************************************************
//(1) 接收方: D4...D0
#define USB_RECIPIENT (uint8)0x1F
#define USB_RECIPIENT_DEVICE (uint8)0x00
#define USB_RECIPIENT_INTERFACE (uint8)0x01
#define USB_RECIPIENT_ENDPOINT (uint8)0x02
//(2) 類型: D6...D5
#define USB_REQUEST_TYPE_MASK (uint8)0x60
#define USB_STANDARD_REQUEST (uint8)0x00
#define USB_CLASS_REQUEST (uint8)0x20
#define USB_VENDOR_REQUEST (uint8)0x40
//(3) 數據傳輸方向: D7
#define DEVICE_ADDRESS_MASK 0x7F
//(4) USB 請求
#define USB_REQUEST_MASK (uint8)0x1F
//(5) USB端點方向掩碼
#define USB_ENDPOINT_DIRECTION_MASK 0x80
#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK))
#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK)
//*******************************************************
// USB 設備請求類型
//*******************************************************
#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
//*******************************************************
// 下面為基于USB 1.0規范的正確值
//*******************************************************
#define USB_REQUEST_GET_STATUS 0x00
#define USB_REQUEST_CLEAR_FEATURE 0x01
#define USB_REQUEST_SET_FEATURE 0x03
#define USB_REQUEST_SET_ADDRESS 0x05
#define USB_REQUEST_GET_DESCRIPTOR 0x06
#define USB_REQUEST_SET_DESCRIPTOR 0x07
#define USB_REQUEST_GET_CONFIGURATION 0x08
#define USB_REQUEST_SET_CONFIGURATION 0x09
#define USB_REQUEST_GET_INTERFACE 0x0A
#define USB_REQUEST_SET_INTERFACE 0x0B
#define USB_REQUEST_SYNC_FRAME 0x0C
/*******************************************************
** USB 特性選擇符
********************************************************/
#define USB_FEATURE_ENDPOINT_STALL 0x0000
#define USB_FEATURE_REMOTE_WAKEUP 0x0001
#define USB_FEATURE_POWER_D0 0x0002
#define USB_FEATURE_POWER_D1 0x0003
#define USB_FEATURE_POWER_D2 0x0004
#define USB_FEATURE_POWER_D3 0x0005
#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((uint16)((uint16)d<<8 | i))
/*******************************************************
** USB 配置描述符
********************************************************/
#define USB_CONFIG_POWERED_MASK 0xc0
#define USB_CONFIG_BUS_POWERED 0x80
#define USB_CONFIG_SELF_POWERED 0x40
#define USB_CONFIG_REMOTE_WAKEUP 0x20
#define BUS_POWERED 0x80
#define SELF_POWERED 0x40
#define REMOTE_WAKEUP 0x20
/*******************************************************
** 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 設備類
********************************************************/
#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
//
#define D12_SETUP_PACKET 0x20
#define MAX_ENDPOINTS (uint8)0x03
#define D12_STALL 0x02
#define CONFIG_DESCRIPTOR_LENGTH 0x29
#define EP0_PACKET_SIZE 16
//*****************************************************************************
// 定義標準的描述符類型,也就是USB分配的各種描述符的編號,即bDescriptorType 字段的值
#define DEVICE_DESCRIPTOR 0x01 //設備描述符
#define CONFIGURATION_DESCRIPTOR 0x02 //配置描述符
#define STRING_DESCRIPTOR 0x03 //字符串描述符
#define INTERFACE_DESCRIPTOR 0x04 //接口描述符
#define ENDPOINT_DESCRIPTOR 0x05 //端點描述符
#define HID_DESCRIPTOR 0x21 //HID描述符
#define REPORT_DESCRIPTOR 0x22 //報告描述符
#define PHYSICAL_DESCRIPTOR 0x23 //物理描述符
//定義標準的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 //同步幀請求
//定義USB HID特定命令請求
#define GET_REPORT 0x01 //獲取報告
#define GET_IDLE 0x02 //獲取空閑狀態
#define GET_PROTOCOL 0x03 //獲取協議
#define SET_REPORT 0x09 //設置報告
#define SET_IDLE 0x0A //設置空閑
#define SET_PROTOCOL 0x0B //設置協議
//定義特性選擇器
#define ENDPOINT_HALT 0x00 //端點的禁止特性
#define DEVICE_REMOTE_WAKEUP 0x01 //設備的遠程喚醒特性
//使用的端點數
//#define Number_Endpoint 0x05 //端點數量為5
//定義的端點類型
#define ENDPOINT_TYPE_CONTROL 0x00 //控制傳輸
#define ENDPOINT_TYPE_ISOCHRONOUS 0x01 //同步傳輸
#define ENDPOINT_TYPE_BULK 0x02 //批量傳輸
#define ENDPOINT_TYPE_INTERRUPT 0x03 //中斷傳輸
#define D12_INT_ENDP0OUT 0x01
#define D12_INT_ENDP0IN 0x02
#define D12_INT_ENDP1OUT 0x04
#define D12_INT_ENDP1IN 0x08
#define D12_INT_ENDP2OUT 0x10
#define D12_INT_ENDP2IN 0x20
#define D12_INT_BUSRESET 0x40
#define D12_INT_SUSPENDCHANGE 0x80
#define D12_INT_EOT 0x0100
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -