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

📄 d12.h

📁 在单片机系统下实现基本的固件枚举,对应用开发者大有裨益
💻 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 + -