📄 d14.h
字号:
//***********************************************************************
// File Name : D14.h *
//***********************************************************************
typedef union ADDRESS_REG //地址寄存器 0x00h
{
struct ADDRESS_BITS
{
UC DEVADDR : 7; //设备地址值
UC DEVEN : 1; //使能位 逻辑1 使能
}BITS;
UC VALUE;
}ADDRESS_REG;
typedef union USB_MODE //模式寄存器 0xOCH
{
struct USB_MODE_BITS //
{
UC SOFTCT : 1; //软连接1.5K电阻 逻辑1连接
UC PWROFF : 1; //保留 必须写0
UC WKUPC : 1; //远程唤醒使能端
UC GLINTE : 1; //全局中断使能
UC SFRESET : 1; //软复位 0后写1使能软件复位
UC GOSUSP : 1; //挂起状态使能 写1使器件进入到挂起状态
UC SNDRSU : 1; //发送恢复信号 0后写1产生一个持续10ms的信号
UC DISGLBL : 1; //全局时钟状态设置 1 挂起时时钟运行 0 挂起时时钟停止 适合低功耗需求
}BITS;
UC VALUE;
}USB_MODE;
typedef union INT_CONFIG //中断配置寄存器 0x10H 决定中断输出的特性.
{
struct INT_CONFIG_BITS
{
UC INTPOL : 1; //中断极性:选择INT 输出信号极性(0=低电平有效,1=高电平有效)。总线复位时值不变。
UC INTLVL : 1; //中断电平:选择INT 输出信道方式(0=电平,1=脉冲)。若为脉冲方式,一个中断会产生一个60ns 的脉冲。总线复位时值不变
UC DDBGMODOUT : 2; //数据调试方式OUT * 00H:中断发生在所有的ACK 和NAK 分组
UC DDBGMODIN : 2; //数据调试方式IN * 01H:中断发生在所有的ACK 分组(和NYET分组--DDBGMODOUT)
UC CDBGMOD : 2; //控制0 调试方式 * 1XH:中断发生在所有的ACK 分组和第一个NAK[1]分组
}BITS; // * 第一个NAK:发生在IN 或OUT 令牌处理的前一个ACK 响应后的第一个NAK
UC VALUE;
}INT_CONFIG;
typedef union INT_ENABLE //中断使能寄存器(地址:14H)
{
struct INT_ENABLE_BITS
{
UC IERST : 1, //为1,激活检测到一个总线复位的中断
IESOF : 1, //为1,激活检测到一个SOF 的中断
IEPSOF : 1, //为1,激活检测到一个伪SOF 的中断
IESUSP : 1, //为1,激活检测到一个“挂起”状态的中断
IERESM : 1, //为1,激活检测到一个“重新开始”状态的中断
IEHS_STA : 1, //为1,激活检测到一个高速状态变化的中断
IEDMA : 1, //为1,激活检测到DMA 状态变化的中断
RESERVED3 : 1; //保留
UC IEP0SETUP : 1, //为1,激活端点0 的启动数据接收中断
RESERVED2 : 1, //保留
IEP0RX : 1, //为1,激活控制OUT 处理端点0 的中断
IEP0TX : 1, //为1,激活控制IN 处理端点0 的中断
IEP1RX : 1, //为1,激活指定端点1的接收中断
IEP1TX : 1, //为1,激活指定端点1的发送中断
IEP2RX : 1, //为1,激活指定端点2的接收中断
IEP2TX : 1; //为1,激活指定端点2的发送中断
UC IEP3RX : 1, //为1,激活指定端点3的接收中断
IEP3TX : 1, //为1,激活指定端点3的发送中断
IEP4RX : 1, //为1,激活指定端点4的接收中断
IEP4TX : 1, //为1,激活指定端点4的发送中断
IEP5RX : 1, //为1,激活指定端点5的接收中断
IEP5TX : 1, //为1,激活指定端点5的发送中断
IEP6RX : 1, //为1,激活指定端点6的接收中断
IEP6TX : 1; //为1,激活指定端点6的发送中断
UC IEP7RX : 1, //为1,激活指定端点7的接收中断
IEP7TX : 1, //为1,激活指定端点7的发送中断
RESERVED1 : 6; //保留
}BITS;
UL VALUE;
}INT_ENABLE;
typedef union INTERRUPT_STATUS //中断寄存器的状态 注释同中断使能寄存器
{
struct INTERRUPT_STATUS_BITS
{
UC RESET : 1;
UC SOF : 1;
UC PSOF : 1;
UC SUSP : 1;
UC RESUME : 1;
UC HS_STAT : 1;
UC DMA : 1;
UC RESERVED3 : 1;
UC EP0SETUP : 1;
UC RESERVED2 : 1;
UC EP0RX : 1;
UC EP0TX : 1;
UC EP1RX : 1;
UC EP1TX : 1;
UC EP2RX : 1;
UC EP2TX : 1;
UC EP3RX : 1;
UC EP3TX : 1;
UC EP4RX : 1;
UC EP4TX : 1;
UC EP5RX : 1;
UC EP5TX : 1;
UC EP6RX : 1;
UC EP6TX : 1;
UC EP7RX : 1;
UC EP7TX : 1;
UC RESERVED1 : 6;
}BITS;
UL VALUE;
}INTERRUPT_STATUS;
typedef union ENDPT_MAXSIZE //端点MaxPacketSize 寄存器(地址:04H)
{
struct ENDPT_MAXSIZE_BITS
{
UC FFOSZ7_0 : 8; //FIFO 大小:为索引端点以字节形式设置FIFO 的大小。应用在HS 和FS 操作中。
UC FFOSZ10_8 : 3; //FIFO 大小 8-10位
UC NTRANS : 2; //处理信息数量(仅适用于HS 模式):0-每微幀1 个信息包1-每微幀2 个信息包2-每微幀3 个信息包3-保留这些位仅应用于同步/中断处理中。
UC RESERVED2 : 3; //保留
}BITS;
UI VALUE;
}ENDPT_MAXSIZE;
typedef union ENDPT_INDEX //端点索引寄存器(地址:2CH)
{
struct ENDPT_INDEX_BITS
{
UC DIR : 1; //方向位:将目标端点设置成IN 或OUT 端点:0-设置成OUT(RX)FIFO 目标端点 / 1-设置成IN(TX)FIFO 目标端点
UC ENDPIDX : 4; //端点索引:为缓冲器长度、控制功能、数据端口、端口类型、MaxPacketSize 规定值和短包等寄存器的访问选择目标端点
UC EP0SETUP : 1; //为端点0 选择SETUP 缓冲区:0-EP0 数据缓冲区 1-SETUP 缓冲区 引寄存器来指定目标端点。
UC RESERVED : 2; //保留
}BITS;
UC VALUE;
}ENDPT_INDEX;
typedef union CONTROL //控制功能寄存器(地址:28H)
{
struct CONTROL_BITS
{
UC STALL : 1; //终止端点:为1,终止索引的端点。这一位不能用于同步传输。
UC STATUS : 1; //状态响应:这一位用于控制在SETUP 传输状态阶段ACK 或NAK 信号的产生。在该状态结束和接收到一个SETUP 令牌时自动清除。
//0-发送NAK
//1-IN 令牌(主机到设备)处理之后发送一个空包或OUT 令牌处理(设备到主机)之后发送ACK 信号。
UC RESERVED2 : 1; //保留
UC VENDP : 1; //端点有效:为1,使一个IN 端点的TX FIFO 数据有效,为下一个IN 令牌的处理发送做准备。
//一般而言,当端点的FIFO 字节数达到端点MaxPacketSize 规定值时端
//点自动生效。这一位通常用在当端点的FIFO 字节数低于端点MaxPacketSize 规定
//值时仍要求端点有效的情况下。
UC CLBUF : 1; //清除缓冲区:为1,清除索引端点的RX 缓冲区;对TX 缓冲器无影响。一旦端点内容完全读出,RX 缓冲区自动清零。这一位通常用在需要强制清除缓冲区的情况下。
UC RESERVED1 : 3; //保留
}BITS;
UC VALUE;
}CONTROL;
typedef union ENDPT_TYPE //端点类型寄存器
{
struct ENDPT_TYPE_BITS
{
UC ENDPTYP : 2; //端点类型:这2 位用于选择端点类型:01H-同步02H-批量03H-中断
UC DBLBUF : 1; //双缓冲区设置:为1,使能索引端点的双缓冲区设置。为0 禁止双缓冲区设置
UC ENABLE : 1; //端点使能:为1,使能索引端点的FIFO。在端点MaxPacketSize 寄存器中指定存储区大小。为0 禁用FIFO。
UC ZERO_PKT_DIS: 1; //无空包:如果缓冲区长度寄存器或端点MaxPacketSize寄存器内容为0,该位为0表示将一个空包添加到USB数据的下一个IN令牌。为1时这个功能禁止。这位仅应用于DMA模式。
UC RESERVED1 : 3; //保留
UC RESRVED2 : 8; //保留
}BITS;
UI VALUE;
}ENDPT_TYPE;
typedef union ERROR_CODE
{
struct ERROR_CODE_BITS
{
UC RTOK : 1;
UC ERROR : 4;
UC RESERVED: 1;
UC DATA01 : 1;
UC UNREAD : 1;
}BITS;
UC VALUE;
}ERROR_CODE;
typedef union VALIDSHORT
{
struct VALIDSHORT_BITS
{
UC RESERVED : 8;
UC OUT0SH : 1;
UC OUT1SH : 1;
UC OUT2SH : 1;
UC OUT3SH : 1;
UC OUT4SH : 1;
UC OUT5SH : 1;
UC OUT6SH : 1;
UC OUT7SH : 1;
}BITS;
UI VALUE;
}VALIDSHORT;
typedef union FRAME_NO //幀数目寄存器(地址:74H)这是个只读寄存器,它的内容是最近成功接收到的数据的幀开始(SOF)对应的幀的编号。
{
struct FRAME_NO_BITS
{
UC SOFL : 8; //幀数目0-7位
UC SOFH : 3; //幀数目8-10位
UC USOF : 3; //微祯数目
UC RESERVED : 2; //保留
}BITS;
UI VALUE;
}FRAME_NO;
typedef union TESTMODE //测试方式寄存器(地址:84H)
{
struct TESTMODE_BITS
{
UC SE0_NAK : 1;
UC JSTATE : 1;
UC KSTATE : 1;
UC PRBS : 1;
UC FORCEFS : 1;
UC LPBK : 1;
UC PHYTEST : 1;
UC FORCEHS : 1;
}BITS;
UC VALUE;
}TESTMODE;
typedef union DMA_CONFIG
{
struct DMA_CONFIG_BITS
{
UC WIDTH : 1;
UC RES1 : 1;
UC DMA_MODE : 2;
UC BURST : 3;
UC CNTENA : 1;
UC PIO_MODE : 3;
UC UDMA_MODE : 2;
UC ATA_MODE : 1;
UC IGNORE_IORDY : 1;
UC RES2 : 1;
}BITS;
UI VALUE;
}DMA_CONFIG;
typedef union DMA_HARDWARE
{
struct DMA_HARDWARE_BITS
{
UC READ_POL : 1;
UC WRITE_POL : 1;
UC DREQ_POL : 1;
UC ACK_POL : 1;
UC MASTER : 1;
UC EOT_POL : 1;
UC ENDIAN : 2;
}BITS;
UC VALUE;
}DMA_HARDWARE;
typedef union DMA_STROBE
{
struct DMA_STROBE_BITS
{
UC DMA_STROBE : 5;
UC RES : 3;
}BITS;
UC VALUE;
}DMA_STROBE;
typedef union DMA_INT
{
struct DMA_INT_BITS
{
UC CMD_AUTO_COMPLETE : 1;
UC INTRQ_PENDING : 1;
UC TASKFILE_READ_COMPLETE : 1;
UC BSY_DRQ_POLL_DONE : 1;
UC START_READ_1F0_RD_FIFO : 1;
UC RD_1F0_FIFO_EMPTY : 1;
UC WR_1F0_FIFO_FULL : 1;
UC WR_1F0_FIFO_EMPTY : 1;
UC DMA_DONE : 1;
UC PENDING_INTRQ : 1;
UC INT_EOT : 1;
UC EXT_EOT : 1;
UC RES1 : 4;
}BITS;
UI VALUE;
}DMA_INT;
typedef union DMA_INT_ENABLE
{
struct DMA_INT_ENABLE_BITS
{
UC CMD_AUTO_COMPLETE : 1;
UC INTRQ_PENDING : 1;
UC TASKFILE_READ_COMPLETE : 1;
UC BSY_DRQ_POLL_DONE : 1;
UC START_READ_1F0_RD_FIFO : 1;
UC RD_1F0_FIFO_EMPTY : 1;
UC WR_1F0_FIFO_FULL : 1;
UC WR_1F0_FIFO_EMPTY : 1;
UC DMA_DONE : 1;
UC RES1 : 7;
}BITS;
UI VALUE;
}DMA_INT_ENABLE;
/*
typedef union DMA_ENDPT
{
struct DMA_ENDPT_BITS
{
UC DMADIR : 1;
UC EDPIDX : 3;
UC NOT_USED : 4;
}BITS;
UC VALUE;
}DMA_ENDPT;
*/
typedef union DMA_STATE_1
{
struct DMA_STATE_1_BITS
{
UC PIO_SEQ_STATE : 3;
UC PIO_CMD_STATE : 5;
}BITS;
UC VALUE;
}DMA_STATE_1;
/*
typedef union DMA_STATE_2
{
struct DMA_STATE_2_BITS
{
UC RES : 8;
}BITS;
UC VALUE;
}DMA_STATE_2;
*/
typedef struct D14_CNTRL_REG
{
ADDRESS_REG D14_ADDRESS;
UC DUMMY_01;
UC DUMMY_02;
UC DUMMY_03;
ENDPT_MAXSIZE D14_ENDPT_MAXPKTSIZE;
UC DUMMY_06;
UC DUMMY_07;
ENDPT_TYPE D14_ENDPT_TYPE;
UC DUMMY_0A;
UC DUMMY_0B;
USB_MODE D14_MODE;
UC DUMMY_0D;
UC DUMMY_0E;
UC DUMMY_0F;
INT_CONFIG D14_INT_CONFIG;
UC DUMMY_11;
UC DUMMY_12;
UC DUMMY_13;
INT_ENABLE D14_INT_ENABLE;
INTERRUPT_STATUS D14_INT;
UC D14_BUFFER_LENGTH_LSB;
UC D14_BUFFER_LENGTH_MSB;
UC DUMMY_1E;
UC DUMMY_1F;
UC D14_DATA_PORT_LSB;
UC D14_DATA_PORT_MSB;
UC DUMMY_22;
UC DUMMY_23;
VALIDSHORT D14_VALIDATE_SHORT;
UC DUMMY_26;
UC DUMMY_27;
CONTROL D14_CONTROL_FUNCTION;
UC DUMMY_29;
UC DUMMY_2A;
UC DUMMY_2B;
UC D14_ENDPT_INDEX;
UC DUMMY_2D;
UC DUMMY_2E;
UC DUMMY_2F;
UC D14_DMA_COMMAND;
UC DUMMY_31;
UC DUMMY_32;
UC DUMMY_33;
UC D14_DMA_TRANSFER_COUNTER_LSB;
UC D14_DMA_TRANSFER_COUNTER_BYTE2;
UC D14_DMA_TRANSFER_COUNTER_BYTE3;
UC D14_DMA_TRANSFER_COUNTER_MSB;
DMA_CONFIG D14_DMA_CONFIG;
UC DUMMY_3A;
UC DUMMY_3B;
DMA_HARDWARE D14_DMA_HARDWARE;
UC DUMMY_3D;
UC DUMMY_3E;
UC DUMMY_3F;
UC D14_DATA_TASKFILE_LSB;
UC DATA_TASKFILE_BYTE2;
UC DATA_TASKFILE_BYTE3;
UC DATA_TASKFILE_MSB;
UC D14_CMD_STATUS_TASKFILE;
UC DUMMY_45;
UC DUMMY_46;
UC DUMMY_47;
UC D14_ERROR_FEATURE_TASKFILE;
UC D14_INTERRUPT_TASKFILE;
UC D14_SECTOR_NUMBER;
UC D14_BYTECOUNT_LSB_TASKFILE;
UC D14_BYTECOUNT_MSB_TASKFILE;
UC D14_DRIVE_SELECT_TASKFILE;
UC D14_ALT_STATUS_DEVCNTRL_TASKFILE;
UC D14_TASKFILE;
DMA_INT D14_DMA_INT; //DMA reason register.
UC DUMMY_52;
UC DUMMY_53;
DMA_INT_ENABLE D14_DMA_INT_ENABLE;
UC DUMMY_56;
UC DUMMY_57;
UC D14_DMA_ENDPOINT; //Select ep for DMA transfer.
UC DUMMY_59;
UC DUMMY_5A;
UC DUMMY_5B;
DMA_STATE_1 D14_DMA_STATE_1; //Not defined. Not use
UC DUMMY_5D;
UC DUMMY_5E;
UC DUMMY_5F;
DMA_STROBE DMA_STROBE_TIMING; //only for ATA Application
UC DUMMY_61;
UC DUMMY_62;
UC DUMMY_63;
UC UDMA_BYTE_COUNT_LSB;
UC UDMA_BYTE_COUNT_MSB;
UC DUMMY_66;
UC COUNT_1F0;
UC PMU_TRANSFER_COUNT_0;
UC PMU_TRANSFER_COUNT_1;
UC PMU_TRANSFER_COUNT_2;
UC PMU_TRANSFER_COUNT_3;
UC DUMMY_6C;
UC DUMMY_6D;
UC DUMMY_6E;
UC DUMMY_6F;
UC D14_CHIP_ID_LSB;
UC D14_CHIP_ID_MBYTE;
UC D14_CHIP_ID_MSB;
UC DUMMY_73;
FRAME_NO D14_FRAME_NUMBER;
UC DUMMY_76;
UC DUMMY_77;
UI D14_SCRATCH_REGISTER;
UC DUMMY_7A;
UC DUMMY_7B;
UC D14_UNLOCK_DEVICE_LSB;
UC D14_UNLOCK_DEVICE_MSB;
UC DUMMY_7E;
UC DUMMY_7F;
ERROR_CODE D14_ERROR_CODE;
UC DUMMY_81;
UC DUMMY_82;
UC DUMMY_83;
TESTMODE D14_TEST_MODE;
UC DUMMY_85;
UC DUMMY_86;
UC DUMMY_87;
UC DUMMY_88;
}D14_CNTRL_REG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -