📄 pdiusbd12.h
字号:
/*===============================================================================//
//== 文 件 名:PDIUSBD12.h
//== author :gnsusn
//== 说 明:USB 描述符,控制命令等信息
//== 修改日志:2008.8.13 创建文件
//==
//===============================================================================*/
#ifndef __PDIUSBD12_H__
#define __PDIUSBD12_H__
//== PDIUSBD12.h
//== PDIUSBD12的命令和数据定义
//=================================================
//== 端点号定义
#define CONTROL_POINT_OUT 0x00
#define CONTROL_POINT_IN 0x80
#define POINT_1_OUT 0x01
#define POINT_1_IN 0x81
#define MAIN_POINT_OUT 0x02
#define MAIN_POINT_IN 0x82
//=================================================
//=================================================
//== 初始化命令
#define Set_Address 0xD0 //== 设置地址/使能,此命令单片机向D12写入一字节
#define Set_Endpoint_Enable 0xD8 //== 设置端点使能,此命令单片机向D12写入一字节,使能端点0
#define Set_Mode 0xF3 //== 设置模式,此命令单片机向D12写入两字节
#define Set_DMA 0xFB //== 设置DMA,写/读一字节
//=================================================
//=================================================
//== 数据流命令
#define Read_Interrupt_Register 0xF4 //== 读中断状态寄存器,读2字节
#define Select_EndPoint 0x00 //== 选择端点,读一字节(可选)
#define Select_Endpoint_C_OUT 0x00 //== 选择,控制输出端点(端点号:0;端点索引:0)
#define Select_Endpoint_C_IN 0x01 //== 选择,控制输入端点(端点号:0;端点索引:1)
#define Select_Endpoint_1_OUT 0x02 //== 选择,端点号1的输出端点,端点索引号:2
#define Select_Endpoint_1_IN 0x03 //== 选择,端点号1的输入端点,端点索引号:3
#define Select_Endpoint_2_OUT 0x04 //== 选择,端点号2的输出端点,端点索引号:4
#define Select_Endpoint_2_IN 0x05 //== 选择,端点号2的输入端点,端点索引号:5
#define Read_Last_Status 0x40 //== 读最后处理状态,读一字节
#define Read_Last_Status_C_OUT 0x40 //== 读控制输出端点(端点号:0;端点索引:0)的状态
#define Read_Last_Status_C_IN 0x41 //== 读控制输入端点(端点号:0;端点索引:1)的状态
#define Read_Last_Status_1_OUT 0x42 //== 读端点号1的输出端点,端点索引号:2 的状态
#define Read_Last_Status_1_IN 0x43 //== 读端点号1的输入端点,端点索引号:3 的状态
#define Read_Last_Status_2_OUT 0x44 //== 读端点号2的输出端点,端点索引号:4 的状态
#define Read_Last_Status_2_IN 0x45 //== 读端点号2的输入端点,端点索引号:5 的状态
#define Read_Buffer 0xF0 //== 读选择的端点的缓冲区,读出n个字节
#define Write_Buffer 0xF0 //== 写选择的端点的缓冲区,写入n个字节
#define Set_Endpoint_Status_C_OUT 0x40 //== 设置控制输出端点(端点号:0;端点索引:0)状态
#define Set_Endpoint_Status_C_IN 0x41 //== 设置控制输入端点(端点号:0;端点索引:1)状态
#define Set_Endpoint_Status_1_OUT 0x42 //== 设置端点号1的输出端点,端点索引号:2 状态
#define Set_Endpoint_Status_1_IN 0x43 //== 设置端点号1的输入端点,端点索引号:3 状态
#define Set_Endpoint_Status_2_OUT 0x44 //== 设置端点号2的输出端点,端点索引号:4 状态
#define Set_Endpoint_Status_2_IN 0x45 //== 设置端点号2的输入端点,端点索引号:5 状态
#define Ack_Setup 0xF1 //== 应答设置,命令接受者是选择的端点, 没有操作数据(应答setup)
#define Clear_Buffer 0xF2 //== 缓冲区清零,命令接受者是选择的端点, 没有操作数据
#define Validate_Buffer 0xFA //== 使缓冲区有效,命令接受者是选择的端点, 没有操作数据
#define Read_ChipID 0xFD //== 读取芯片版本号
//=================================================
//=================================================
//==普通命令
#define Send_Resume 0xF6 //== 发送恢复
#define Read_Current_Frame_Number 0xF5 //== 读当前帧数目,读出1或2个字节
//=================================================
//=================================================
//== 一些数据的定义
#define Endpoint_Enable 0x01
#define Endpoint_Disenable 0x00
#define Address_Enable 0x80
#define Mode0_and_no_connect 0x04
#define Mode1_and_no_connect 0x44
#define Mode2_and_no_connect 0x84
#define Mode3_and_no_connect 0xC4
#define Mode0_and_connect 0x14
#define Mode1_and_connect 0x54
#define Mode2_and_connect 0x94
#define Mode3_and_connect 0xD4
#define Mode_Set_secend_byte 0x8B
#define NO_LazyClock 0x02
#define Run_Clock 0x04
#define Interrupt_Model 0x08
#define Soft_Connect 0x10
#define Non_ISO_Mode 0x00 //== 非同步
#define ISO_OUT_Mode 0x40 //== 同步输出模式
#define ISO_IN_Mode 0x80 //== 同步输入模式
#define ISO_IO_Mode 0xc0 //== 同步输入/输出模式
#define ENDPOINT_NUMBER 0x04
#define D12_STALL 0x02 //== 端点停止
//=================================================
//=================================================
#define MAX_ENDPOINTS 0x03 //== 最大逻辑端点号
#define EP0_TX_FIFO_SIZE 16
#define EP0_RX_FIFO_SIZE 16
#define EP0_PACKET_SIZE 16 //== 端点0的最大包大小
#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_CLASS_CODE_TEST_CLASS_DEVICE 0xDC
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12 0xB0
//=================================================
typedef union _D12_Interrupt_Register //== 中断寄存器
{
unsigned char Register[2];
unsigned short int_Register;
struct
{
unsigned char control_out_port :1;
unsigned char control_in_port :1;
unsigned char port_out_1 :1;
unsigned char port_in_1 :1;
unsigned char main_out_port :1;
unsigned char main_in_port :1;
unsigned char bus_reset :1;
unsigned char suspend_change :1;
unsigned char DMA_EOT :1;
unsigned char not_use :7;
}Interrupt;
}D12_INTERRUPT_REGISTER;
//=================================================
//=================================================
typedef union _D12_Last_Status //== 端点最后处理状态
{
unsigned char Register;
struct
{
unsigned char successful :1;
unsigned char error_code :4;
unsigned char setup_packet :1;
unsigned char data_1 :1;
unsigned char prestatus_not_read :1;
}Status;
}D12_LAST_STATUS;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -