📄 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 + -