📄 ch374inc.inc
字号:
; Define for CH373 & CH374 */
; Website: http://winchiphead.com */
; Email: tech@winchiphead.com */
; Author: W.ch 2005.10 */
; V1.3 for CH373/CH374 */
; ********************************************************************************************************************* */
; USB协议层定义 */
; USB的包标识PID, 主机方式可能用到 */
DEF_USB_PID_NULL EQU 00H ;保留PID, 未定义
DEF_USB_PID_SOF EQU 05H
DEF_USB_PID_SETUP EQU 0DH
DEF_USB_PID_IN EQU 09H
DEF_USB_PID_OUT EQU 01H
DEF_USB_PID_ACK EQU 02H
DEF_USB_PID_NAK EQU 0AH
DEF_USB_PID_STALL EQU 0EH
DEF_USB_PID_DATA0 EQU 03H
DEF_USB_PID_DATA1 EQU 0BH
DEF_USB_PID_PRE EQU 0CH
; ********************************************************************************************************************* */
; 芯片定义 */
; 寄存器及缓冲区 */
RAM_ENDP0_SIZE EQU 008H ; 端点0的缓冲区长度 */
RAM_ENDP0_TRAN EQU 020H ; 端点0发送缓冲区的起始地址 */
RAM_ENDP0_RECV EQU 028H ; 端点0接收缓冲区的起始地址 */
RAM_ENDP1_SIZE EQU 008H ; 端点1的缓冲区长度 */
RAM_ENDP1_TRAN EQU 030H ; 端点1发送缓冲区的起始地址 */
RAM_ENDP1_RECV EQU 038H ; 端点1接收缓冲区的起始地址 */
RAM_ENDP2_SIZE EQU 040H ; 端点2的缓冲区长度 */
RAM_ENDP2_TRAN EQU 040H ; 端点2发送缓冲区的起始地址 */
RAM_ENDP2_RECV EQU 0C0H ; 端点2接收缓冲区的起始地址 */
RAM_ENDP2_EXCH EQU 080H ; 端点2备用缓冲区的起始地址 */
RAM_HOST_TRAN EQU 040H ; 主机发送缓冲区的起始地址 */
RAM_HOST_RECV EQU 0C0H ; 主机接收缓冲区的起始地址 */
RAM_HOST_EXCH EQU 080H ; 主机备用缓冲区的起始地址 */
REG_HUB_SETUP EQU 002H ; 仅USB主机方式: ROOT-HUB配置 */
REG_HUB_CTRL EQU 003H ; 仅USB主机方式: ROOT-HUB控制 */
REG_SYS_INFO EQU 004H ; 系统信息, 只读 */
REG_SYS_CTRL EQU 005H ; 系统控制, 不受软件复位影响 */
REG_USB_SETUP EQU 006H ; USB配置 */
REG_INTER_EN EQU 007H ; 中断使能 */
REG_USB_ADDR EQU 008H ; USB设备地址 */
REG_INTER_FLAG EQU 009H ; 中断标志, 只读, 位写1清0 */
REG_USB_STATUS EQU 00AH ; USB状态, 只读 */
REG_USB_LENGTH EQU 00BH ; USB长度, 读为当前USB接收长度, 设备方式下写为USB端点2, 主机方式下写为USB主机发送长度 */
REG_USB_ENDP0 EQU 00CH ; 仅USB设备方式: USB端点0控制 */
REG_USB_ENDP1 EQU 00DH ; 仅USB设备方式: USB端点1控制 */
REG_USB_H_PID EQU 00DH ; 仅USB主机方式: USB主机令牌 */
REG_USB_ENDP2 EQU 00EH ; 仅USB设备方式: USB端点2控制 */
REG_USB_H_CTRL EQU 00EH ; 仅USB主机方式: USB主机控制 */
; 寄存器的位及常用宏定义 */
BIT_HUB0_EN EQU 001H ; HUB0端口的USB传输使能: 0-禁止, 1-允许 */
BIT_HUB0_RESET EQU 002H ; HUB0端口的USB总线复位控制: 0-不复位, 1-复位 */
BIT_HUB0_POLAR EQU 004H ; HUB0端口的信号极性控制: 0-正极性/全速, 1-负极性/低速 */
BIT_HUB0_ATTACH EQU 008H ; HUB0端口的USB设备连接状态(只读): 0-尚未连接/断开/拔出, 1-已经连接/插入 */
BIT_HUB1_DX_IN EQU 010H ; HUB1全速正极性时UD+引脚/低速负极性时UD-引脚的采样状态: 0-低电平,速度失配, 1-高电平,速度匹配 */
BIT_HUB2_DX_IN EQU 020H ; HUB2全速正极性时UD+引脚/低速负极性时UD-引脚的采样状态: 0-低电平,速度失配, 1-高电平,速度匹配 */
BIT_HUB_PRE_PID EQU 040H ; 低速前置包PRE PID输出控制: 0-允许(外部设备是USB-HUB), 1-禁止 */
BIT_HUB_DISABLE EQU 080H ; 禁止ROOT-HUB根集线器功能: 0-允许(仅USB主机方式), 1-禁止(默认) */
BIT_HUB1_EN EQU 001H ; HUB1端口的USB传输使能: 0-禁止, 1-允许 */
BIT_HUB1_RESET EQU 002H ; HUB1端口的USB总线复位控制: 0-不复位, 1-复位 */
BIT_HUB1_POLAR EQU 004H ; HUB1端口的信号极性控制: 0-正极性/全速, 1-负极性/低速 */
BIT_HUB1_ATTACH EQU 008H ; HUB1端口的USB设备连接状态(只读): 0-尚未连接/断开/拔出, 1-已经连接/插入 */
BIT_HUB2_EN EQU 010H ; HUB2端口的USB传输使能: 0-禁止, 1-允许 */
BIT_HUB2_RESET EQU 020H ; HUB2端口的USB总线复位控制: 0-不复位, 1-复位 */
BIT_HUB2_POLAR EQU 040H ; HUB2端口的信号极性控制: 0-正极性/全速, 1-负极性/低速 */
BIT_HUB2_ATTACH EQU 080H ; HUB2端口的USB设备连接状态(只读): 0-尚未连接/断开/拔出, 1-已经连接/插入 */
BIT_INFO_HW_ID EQU 003H ; 硬件识别位: 总是常量01, 否则说明读操作或硬件连接有误 */
BIT_INFO_USB_DM EQU 004H ; USB总线UD-引脚的逻辑电平状态: 0-低电平, 1-高电平 */
BIT_INFO_USB_DP EQU 008H ; USB总线UD+引脚的逻辑电平状态: 0-低电平, 1-高电平 */
BIT_INFO_CLK_8KHZ EQU 010H ; 硬件8KHz时钟位 */
BIT_INFO_SOF_PRES EQU 020H ; 硬件1mS定时周期状态,对于USB主机, 1说明将要产生SOF */
BIT_INFO_WAKE_UP EQU 040H ; 芯片唤醒状态: 0-正在睡眠或唤醒过程中, 1-已唤醒 */
BIT_INFO_POWER_RST EQU 080H ; 硬件上电复位完成状态: 0-正在复位, 1-复位完成 */
BIT_CTRL_OSCIL_OFF EQU 001H ; 时钟振荡器控制: 0-允许振荡, 1-停止振荡 */
BIT_CTRL_CLK_12MHZ EQU 002H ; 输入时钟频率选择: 0-24MHz, 1-12MHz */
BIT_CTRL_USB_POWER EQU 004H ; V3引脚的USB电源调节器控制: 0-开启, 1-禁用 */
BIT_CTRL_RESET_NOW EQU 008H ; 芯片软件复位控制: 0-不复位, 1-复位 */
BIT_CTRL_WATCH_DOG EQU 010H ; RST引脚和RST#引脚的看门狗复位使能: 0-禁用, 1-启用 */
BIT_CTRL_INT_PULSE EQU 020H ; INT#引脚的中断输出方式: 0-低电平中断, 1-低电平脉冲中断 */
BIT_CTRL_OE_POLAR EQU 040H ; UEN引脚的USB输出使能极性: 0-高电平使能, 1-低电平使能 */
BIT_SETP_TRANS_EN EQU 001H ; 仅USB设备方式: USB设备传输使能: 0-禁止, 1-允许 */
BIT_SETP_PULLUP_EN EQU 002H ; 仅USB设备方式: USB上拉电阻控制: 0-禁用上拉电阻, 1-启用上拉电阻 */
BIT_SETP_BUS_CTRL EQU 003H ; 仅USB主机方式: USB总线状态控制: 00-正常/空闲, 01-D+低D-低(总线复位), 10-禁用, 11-D+低D-高(总线恢复) */
;#define M_SET_USB_BUS_FREE( old ) ( (old) & ~ BIT_SETP_BUS_CTRL | 0x00 ) ; 仅USB主机方式: USB总线空闲 */
;#define M_SET_USB_BUS_RESET( old ) ( (old) & ~ BIT_SETP_BUS_CTRL | 0x01 ) ; 仅USB主机方式: USB总线状态控制/D+低D-低(总线复位) */
;#define M_SET_USB_BUS_RESUME( old ) ( (old) & ~ BIT_SETP_BUS_CTRL | 0x03 ) ; 仅USB主机方式: USB总线状态控制/D+低D-高(总线恢复) */
BIT_SETP_RAM_MODE EQU 00CH ; 备用缓冲区应用方式: 00-禁用备用缓冲区, 01-连接接收缓冲区以连续接收128字节, 10-用于发送第二缓冲区, 11-用于接收第二缓冲区 */
;#define M_SET_RAM_MODE_OFF( old ) ( (old) & ~ BIT_SETP_RAM_MODE | 0x00 ) ; 备用缓冲区方式/禁用备用缓冲区 */
;#define M_SET_RAM_MODE_128( old ) ( (old) & ~ BIT_SETP_RAM_MODE | 0x04 ) ; 备用缓冲区方式/连接接收缓冲区以连续接收128字节 */
;#define M_SET_RAM_MODE_2TX( old ) ( (old) & ~ BIT_SETP_RAM_MODE | 0x08 ) ; 备用缓冲区方式/用于发送的第二缓冲区,支持连续发送 */
;#define M_SET_RAM_MODE_2RX( old ) ( (old) & ~ BIT_SETP_RAM_MODE | 0x0C ) ; 备用缓冲区方式/用于接收的第二缓冲区,支持连续接收 */
BIT_SETP_LOW_SPEED EQU 020H ; USB总线传输速度: 0-12Mbps, 1-1.5Mbps */
BIT_SETP_USB_SPEED EQU 030H ; USB总线速率: 00-全速模式/正极性12Mbps, 11-低速模式/负极性1.5Mbps */
BIT_SETP_LED_ACT EQU 040H ; 仅USB设备方式: ACT#引脚低电平的激活事件: 0-收发传输过程, 1-USB主机活动 */
BIT_SETP_AUTO_SOF EQU 040H ; 仅USB主机方式: 自动产生SOF使能: 0-禁止, 1-允许 */
BIT_SETP_HOST_MODE EQU 080H ; USB主从方式选择: 0-设备方式, 1-主机方式 */
BIT_IE_TRANSFER EQU 001H ; USB传输完成中断使能, 1有效 */
BIT_IE_BUS_RESET EQU 002H ; 仅USB设备方式: USB总线复位中断使能, 1有效 */
BIT_IE_DEV_DETECT EQU 002H ; 仅USB主机方式: USB设备检测中断使能, 1有效 */
BIT_IE_USB_SUSPEND EQU 004H ; USB总线挂起中断使能, 1有效 */
BIT_IE_USB_RESUME EQU 008H ; USB总线恢复/唤醒中断使能, 1有效, 0-使能芯片唤醒完成中断, 1-使能USB总线恢复中断 */
BIT_IE_CLK_OUT_DIV EQU 0F0H ; 可编程时钟的分频除数: 输出频率为48MHz/(该值+1), 例如: 0000-48MHz, 0001-24MHz, 0010-16MHz, 1111-3MHz */
;#define M_SET_CLK_DIV( old, div ) ( (old) & ~ BIT_IE_CLK_OUT_DIV | (div) << 4 ) ; 设置时钟输出分频除数 */
BIT_ADDR_USB_DEV EQU 07FH ; 在设备方式下为自身作为USB设备的地址, 在主机方式下为当前被操作的USB设备地址 */
BIT_IF_INTER_FLAG EQU 00FH ; 所有的USB中断标志 */
BIT_IF_TRANSFER EQU 001H ; USB传输完成中断标志, 1有效, 向该位写1清标志, 该位在每次USB传输完成后自动置1 */
BIT_IF_BUS_RESET EQU 002H ; 仅USB设备方式: USB总线复位中断标志, 1有效, 向该位写1清标志, 该位在检测到USB总线复位时自动置1 */
BIT_IF_DEV_DETECT EQU 002H ; 仅USB主机方式: USB设备插拔检测中断标志, 1有效, 向该位写1清标志, 该位在检测到USB设备插拔后自动置1 */
BIT_IF_USB_SUSPEND EQU 004H ; USB总线挂起中断标志, 1有效, 向该位写1清标志, 该位在检测到USB总线挂起时自动置1 */
BIT_IF_WAKE_UP EQU 008H ; 芯片唤醒完成中断标志, 1有效, 向该位写1清标志, 该位在芯片唤醒完成后自动置1 */
BIT_IF_USB_RESUME EQU 008H ; USB总线恢复/唤醒中断标志, 1有效, 向该位写1清标志, 该位在检测到USB总线恢复时自动置1 */
BIT_IF_USB_PAUSE EQU 010H ; USB传输暂停标志, 1有效, 向该位写1清标志, 该位在每次USB传输完成后自动置1 */
BIT_IF_DEV_ATTACH EQU 020H ; USB设备连接状态: 0-尚未连接/断开/拔出, 1-至少有一个USB设备已经连接/插入 */
BIT_IF_USB_OE EQU 040H ; UEN引脚的USB输出使能状态: 0-UEN引脚为低电平, 1-UEN引脚为高电平 */
BIT_IF_USB_DX_IN EQU 080H ; HUB0全速正极性时UD+引脚/低速负极性时UD-引脚的采样状态: 0-低电平,速度失配, 1-高电平,速度匹配 */
BIT_HUB0_DX_IN EQU 080H ; HUB0全速正极性时UD+引脚/低速负极性时UD-引脚的采样状态: 0-低电平,速度失配, 1-高电平,速度匹配 */
BIT_STAT_THIS_ENDP EQU 003H ; 仅USB设备方式: USB传输的目的端点号: 00-端点0, 01-端点1, 10-端点2, 11-保留 */
BIT_STAT_THIS_PID EQU 00CH ; 仅USB设备方式: USB传输的事务/令牌PID: 00-OUT事务, 01-保留, 10-IN事务, 11-SETUP事务 */
BIT_STAT_PID_ENDP EQU 00FH ; 仅USB设备方式: USB传输的事务和端点号,参考后面的USB_INT_EP*定义 */
BIT_STAT_DEV_RESP EQU 00FH ; 仅USB主机方式: USB设备的应答PID: XX00=错误或超时,其它值-同PID定义,参考后面的USB_INT_RET_*定义 */
;M_IS_HOST_TIMEOUT( status ) ( ( (status) & 0x03 ) == 0 ) ; 检查USB主机状态是否为应答超时/出错 */
;M_IS_HOST_IN_DATA( status ) ( ( (status) & BIT_STAT_DEV_RESP & ~ ( DEF_USB_PID_DATA0 ^ DEF_USB_PID_DATA1 ) ) == ( DEF_USB_PID_DATA0 & DEF_USB_PID_DATA1 ) ) ; 检查是否返回DATA0或者DATA1 */
BIT_STAT_TOG_MATCH EQU 010H ; 指示当前的传输是否成功/当前接收的数据包是否同步: 0-不同步, 1-同步 */
BIT_STAT_BUS_RESET EQU 020H ; 当前USB总线复位状态: 0-没有复位, 1-正在复位 */
BIT_STAT_SUSPEND EQU 040H ; 当前USB总线挂起状态: 0-总线有活动, 1-总线挂起 */
BIT_STAT_SIE_FREE EQU 080H ; 当前USB接口引擎SIE的状态: 0=忙/正在传输, 1=空闲/等待 */
BIT_EP0_TRAN_RESP EQU 00FH ; 仅USB设备方式: 端点0发送响应: 0000~1000-应答数据长度0~8, 1110-应答NAK, 1111-应答STALL,其它值-禁用 */
;#define M_SET_EP0_TRAN_ACK( old, len ) ( (old) & ~ BIT_EP0_TRAN_RESP | (len) & 0x0F ) ; 仅USB设备方式: 端点0发送响应/应答ACK */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -