📄 d12.h
字号:
/*****************************************************************************/
/* 定义管脚与宏 */
#define D12_COMMAND 0xfdff // 定义命令端口
#define D12_DATA 0xfcff // 定义数据端口
#define D12_NOLAZYCLOCK 0x02
#define D12_CLOCKRUNNING 0x04
#define D12_INTERRUPTMODE 0x08
#define D12_SOFTCONNECT 0x10
#define D12_ENDP_NONISO 0x00 // 配置字节的最高两位是端点配置(模式0,1,2,3)
#define D12_ENDP_ISOOUT 0x40
#define D12_ENDP_ISOIN 0x80
#define D12_ENDP_ISOIO 0xC0
/* 时钟分频因子字节用到的 */
#define D12_CLOCK_12M 0x03 // 频率=48/(N+1)
#define D12_CLOCK_4M 0x0b
#define D12_SETTOONE 0x40 // SET_TO_ONE,DMA时需要
#define D12_SOFONLY 0x80 // SOFT中断模式位
/* 描述符的类型 */
#define DEVICE_DESCRIPTOR_TYPE 0x01 // 设备描述符
#define CONFIGURATION_DESCRIPTOR_TYPE 0x02 // 配置描述符
#define STRING_DESCRIPTOR_TYPE 0x03 // 字符串描述符
#define INTERFACE_DESCRIPTOR_TYPE 0x04 // 接口描述符
#define ENDPOINT_DESCRIPTOR_TYPE 0x05 // 端点描述符
#define USB_CLASS_CODE_TEST_CLASS_DEVICE 0xdc
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12 0xB0
#define DEVICE_DESCRIPTOR_SIZE 18 // 设备描述符的长度
#define CONFIGURATION_DESCRIPTOR_SIZE 9 // 配置描述符的长度
#define INTERFACE_DESCRIPTOR_SIZE 9 // 接口描述符的长度
#define ENDPOINT_DESCRIPTOR_SIZE 7 // 端点描述符的长度
#define TOTAL_CONFIG_SIZE CONFIGURATION_DESCRIPTOR_SIZE+INTERFACE_DESCRIPTOR_SIZE+ENDPOINT_DESCRIPTOR_SIZE*NUM_ENDPOINTS
// 配置信息的总长度
#define USB_ENDPOINT_TYPE_CONTROL 0x00 // 控制传输
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 // 实时传输
#define USB_ENDPOINT_TYPE_BULK 0x02 // 批量传输
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 // 中断传输
#define USB_FEATURE_ENDPOINT_STALL 0x0000 // 特征,端点停止
#define USB_FEATURE_REMOTE_WAKEUP 0x0001 // 特征,设备远程唤醒
#define EP0_TX_FIFO_SIZE 16
#define EP0_RX_FIFO_SIZE 16
#define EP0_PACKET_SIZE 16
#define EP1_TX_FIFO_SIZE 16
#define EP1_RX_FIFO_SIZE 16
#define EP1_PACKET_SIZE 16
#define EP2_TX_FIFO_SIZE 64
#define EP2_RX_FIFO_SIZE 64
#define EP2_PACKET_SIZE 64
#define USB_IDLE 0
#define USB_TRANSMIT 1
#define USB_RECEIVE 2
#define NUM_ENDPOINTS 4
#define D12_SETUPPACKET 0x20
// 中断寄存器的中断类型
#define D12_INT_ENDP0OUT 0x01 // 中断寄存器的D0位
#define D12_INT_ENDP0IN 0x02 // 中断寄存器的D1位
#define D12_INT_ENDP1OUT 0x04 // 中断寄存器的D2位
#define D12_INT_ENDP1IN 0x08 // 中断寄存器的D3位
#define D12_INT_ENDP2OUT 0x10 // 中断寄存器的D4位
#define D12_INT_ENDP2IN 0x20 // 中断寄存器的D5位
#define D12_INT_BUSRESET 0x40 // 中断寄存器的D6位
#define D12_INT_SUSPENDCHANGE 0x80 // 中断寄存器的D7位
#define D12_FULLEMPTY 0x01 // 选择端点命令后返回的一字节数据最低位
#define D12_STALL 0x02 // 选择端点命令后返回的一字节数据次低位
#define TRUE 1
#define FALSE 0
#define DISABLE EA=0
#define ENABLE EA=1
#define SWAP(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
#define MSB(x) (((x) >> 8) & 0xFF)
sbit D12SUSPD=P1^5;
/*****************************************************************************/
/*********************************** end *************************************/
/*****************************************************************************/
/* 定义结构体 */
typedef union _epp_flags
{
struct _flags
{
unsigned char timer : 1;
unsigned char bus_reset : 1;
unsigned char suspend : 1;
unsigned char setup_packet : 1;
unsigned char remote_wakeup : 1;
unsigned char in_isr : 1;
unsigned char control_state : 2;
unsigned char configuration : 1;
unsigned char verbose : 1;
unsigned char ep1_rxdone : 1;
unsigned char setup_dma : 2; // V2.3
unsigned char dma_state : 2;
unsigned char power_down : 1; // Smart Board
} bits;
unsigned short value;
} EPPFLAGS;
EPPFLAGS bEPPflags;
typedef struct _device_request
{
unsigned char bmRequestType;
unsigned char bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
} DEVICE_REQUEST;
#define MAX_CONTROLDATA_SIZE 8
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest;
unsigned short wLength;
unsigned short wCount;
unsigned char * pData;
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;
CONTROL_XFER ControlData;
typedef struct _USB_DEVICE_DESCRIPTOR // 设备描述符的结构
{
unsigned char dLength[0x12];
} USB_DEVICE_DESCRIPTOR;
typedef struct _USB_CONFIGURATION_DESCRIPTOR // 配置描述符的结构
{
unsigned char bLength[0x2e];
} USB_CONFIGURATION_DESCRIPTOR;
code USB_DEVICE_DESCRIPTOR DeviceDescr=
{ // 设备描述符的初始化
0x12,0x01,0x10,0x01,0xdc,0x00,0x00,0x10,0x71,0x04,0x66,0x06,
0x00,0x01,0x00,0x00,0x00,0x01
};
code USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
{
0x09,0x02,0x2e,0x00,0x01,0x01,0x00,0xe0,0x32,
0x09,0x04,0x00,0x00,0x04,0xdc,0xa0,0xb0,0x00,
0x07,0x05,0x81,0x03,0x10,0x00,0x0a,
0x07,0x05,0x01,0x03,0x10,0x00,0x0a,
0x07,0x05,0x82,0x02,0x40,0x00,0x0a,
0x07,0x05,0x02,0x02,0x40,0x00,0x0a
};
/*****************************************************************************/
/*********************************** end *************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -