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

📄 usbex.asm

📁 Ch372开发软硬件详细资料,硬件为CH372+8051 软件为VB或VC皆有
💻 ASM
📖 第 1 页 / 共 2 页
字号:
CH375_REQ_SEL_05:
				CJNE A,#DEF_USB_SET_CONFIG,CH375_REQ_SEL_06				
				LJMP  CH375_USB_SET_CONFIG
CH375_REQ_SEL_06:
				CJNE A,#DEF_USB_GET_INTERF,CH375_REQ_SEL_07			
				LJMP CH375_USB_GET_INTERF

CH375_REQ_SEL_07:		LJMP CH375_SETUP_RET_ERR


;*************************************************************************************************
;USB GET STATUS   得到状态
CH375_USB_GET_STATUS:		MOV 	@R0,#00H
				INC 	R0
				MOV    @R0,#00H
				LCALL    CH375_EP0_UPLOAD		;调用端点0上传
				LJMP   	 CH375_SETUP_RET		;中断返回
CH375_SETUP_RET_ERR_1:		LJMP    CH375_SETUP_RET_ERR
;************************************************************************************************
;USB  CLR  FEATURE  清除特性
CH375_USB_CLR_FEATURE:         	MOV   	A,CMD_BUFFER		;取请求码
				ANL  	A,#1FH
				CJNE  	A,#02H,CH375_SETUP_RET_ERR_1	;不是端点则不支持
				MOV  	A,CMD_BUFFER+4

				CJNE    A,#82H,CH375_USB_CLR_FEA_0
											;端点2上传
				MOV     A,#CMD_SET_ENDP7				;清除端点2上传
				CALL  WR_CMD_TO_375
				MOV     A,#8EH
				MOVX 	@DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP   CH375_SETUP_RET
						;
CH375_USB_CLR_FEA_0:		CJNE    A,#02H,CH375_USB_CLR_FEA_1
				MOV     A,#CMD_SET_ENDP6	;清除端点2下传
				CALL  WR_CMD_TO_375
				MOV     A,#80H
				MOVX @DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包							;端点2下传
				LJMP   CH375_SETUP_RET

CH375_USB_CLR_FEA_1:				CJNE    A,#81H,CH375_USB_CLR_FEA_2
				MOV     A,#CMD_SET_ENDP5	;清除端点1上传
				CALL  WR_CMD_TO_375
				MOV     A,#8EH							;端点1上传
				MOVX @DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP   CH375_SETUP_RET

CH375_USB_CLR_FEA_2:				CJNE    A,#01H,CH375_USB_CLR_FEA_3
				MOV     A,#CMD_SET_ENDP4	;清除端点1下传
				CALL  WR_CMD_TO_375
				MOV     A,#80H							;端点1下传
				MOVX @DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP	 CH375_SETUP_RET
CH375_USB_CLR_FEA_3:
				LJMP   CH375_SETUP_RET_ERR	;;不支持
;****************************************************************************************
;USB  AET ADDRESS
CH375_USB_SET_ADDRES:		MOV A,CMD_BUFFER+2			;取出地址
				MOV VAR_USB_ADDRESS,A			;暂存地址
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP CH375_SETUP_RET			;先退出,到发出状态后才能反改变

;*****************************************************************************************
;USB  GET  DESCR 获得描述符
CH375_USB_GET_DESCR: 		MOV  A,CMD_BUFFER+3
				CJNE A,#1H,CH375_GET_DESCR_1	;获取设备描述符
				MOV  A,#00H
				MOV  VAR_SETUP_DESCR,A		;描述符偏移量=0
				LCALL CH375_DES_UPLOAD
				LJMP CH375_SETUP_RET
CH375_GET_DESCR_1:
				CJNE A,#2H,CH375_GET_DESCR_2
								;获取配置描述符
				MOV  A,#USB_CFG_DESCR_TAB-USB_DEV_DESCR_TAB
				MOV  VAR_SETUP_DESCR,A		;描述符偏移量
				LCALL CH375_DES_UPLOAD
				LJMP CH375_SETUP_RET
CH375_GET_DESCR_2:
CH375_GET_DESCR_3: 		LJMP   CH375_SETUP_RET_ERR	;不支持退出

;*******************************************************************************************
;USB  GET CONFIG
CH375_USB_GET_CONFIG:		MOV  @R1,#01H			;配置值为01H,在描述符里指定的
				JB   CH375_CON_FLAG,CH375_CON_CON
				MOV  @R1,#00H			;CH375没有配置返回00
CH375_CON_CON:			LCALL CH375_EP0_UPLOAD		;调用端点0上传
				LJMP  CH375_SETUP_RET

;********************************************************************************************
;USB SET  CONFIG
CH375_USB_SET_CONFIG:	MOV  A,CMD_BUFFER+2
				CLR  CH375_CON_FLAG		;取消配置
				SETB  CH375_CON_ACT
				JZ    CH375_USB_SET_CFG1
				SETB  CH375_CON_FLAG		;设置配置
				CLR   CH375_CON_ACT		;输出低电平指示完成标志
CH375_USB_SET_CFG1:
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP  CH375_SETUP_RET
;*********************************************************************************************
;USB  GET INTER
CH375_USB_GET_INTERF:	  MOV   @R1,#01H			;返回一个接口
				LCALL CH375_EP0_UPLOAD		;因为在这里我们指定一个接口
				LJMP  CH375_SETUP_RET
;*********************************************************************************************
CH375_EP0_UPLOAD:		MOV  A,VAR_SETUP_LENGTH		;取出长度
				MOV R5,#08H
				CLR C
				SUBB A,R5
				MOV R5,VAR_SETUP_LENGTH		;上传长度小于8
				JC  CH375_EP0_UP_LEN
				MOV  VAR_SETUP_LENGTH,A		;重新给出长度
				MOV R5,#08H
CH375_EP0_UP_LEN:
				MOV R0,#CMD_BUFFER		;上传缓冲区送R0
				MOV A,#CMD_WR_USB_DATA3		;命令口送入,写端点0
				CALL  WR_CMD_TO_375
				MOV  A,R5			;首先上传长度
				MOVX @DPTR,A			;数据长度送375
CH375_EP0_UP_LOOP2:		MOV A,@R0			;数据取出,			;
				MOVX @DPTR,A			;数据送入CH375
				INC R0				;缓冲区地址加一
				DJNZ  R5,CH375_EP0_UP_LOOP2 	;缓冲区不满则继续
CH375_EP0_UP_LOOPRET:
				RET
;********************************************************************************************
CH375_DES_UPLOAD:		MOV R0,#CMD_BUFFER		;缓冲区首地址送间接寻址
				MOV R5,#08H
				MOV DPTR,#USB_DEV_DESCR_TAB	;
CH375_DES_UPLOOP:
				MOV  A,VAR_SETUP_DESCR
				LCALL CH375_TAB_TAB
				MOV @R0,A
				INC VAR_SETUP_DESCR
				INC R0
				DJNZ R5,CH375_DES_UPLOOP
				LCALL CH375_EP0_UPLOAD
				RET
;RERUEST OVER

CH375_EP0_IN_ZERO:
				MOV A,#CMD_WR_USB_DATA3  ;上传0长度的联络信息包
				CALL  WR_CMD_TO_375
				MOV A,#00H
				MOVX @DPTR,A
				RET
;********************************************************************************************


; 以毫秒为单位延时
; ENTRY: R7 延时毫秒数
; USE:   ACC, R7
DELAY_MS:		MOV   A,#0FAH				;250*(1*6+2)*0.5=1000uS
DELAY_1MS:		NOP
				NOP
				NOP
				NOP
				NOP
				NOP
				DJNZ  ACC,DELAY_1MS			;每周期延时1毫秒
				DJNZ  R7,DELAY_MS
				RET
;
;*********************************************************************************************************************
;
CH375_TAB_TAB:			MOVC A,@A+DPTR
				RET

USB_DEV_DESCR_TAB:	DB   12H							;USB设备描述符
					DB   01H
					DB   10H
					DB   01H
					DB   0FFH							;04H, DeviceClass
					DB   80H							;05H, DeviceSubClass
					DB   37H							;06H, DeviceProtocol
					DB   08H							;端点0最大包长度8字节
					DB   48H				;08H, VendorId-L
					DB   43H				;09H, VendorId-H
					DB   37H				;0AH, ProductId-L
					DB   55H				;0BH, ProductId-H
					DB   00H							;0CH, ReleaseId-L
					DB   01H							;0DH, ReleaseId-H
					DB   00H
					DB   00H
					DB   00H							;10H, IndexSerialNumber
					DB   01H
					
USB_CFG_DESCR_TAB:	DB   09H							;USB配置描述符
					DB   02H
					DB   27H							;02H, TotalLength-L
					DB   00H
					DB   01H
					DB   01H							;配置值
					DB   00H
					DB   80H							;07H, Attributes
					DB   40H
					DB   09H							;USB接口描述符
					DB   04H
					DB   00H
					DB   00H
					DB   03H						;0DH, NumberEndpoints
					DB   0FFH							;0EH, InterfaceClass
					DB   80H							;0FH, InterfaceSubClass
					DB   37H							;10H, InterfaceProtocol
					DB   00H
					DB   07H
					DB   05H
					DB   82H							;端点82H发送/上传
					DB   02H							;批量端点
					DB   40H							;最大包长度32字节
					DB   00H
					DB   00H
					DB   07H
					DB   05H
					DB   02H							;端点02H接收/下传
					DB   02H							;批量端点
					DB   40H							;最大包长度32字节
					DB   00H
					DB   00H
					DB   07H
					DB   05H
					DB   81H							;端点81H发送/上传
					DB   03H							;中断端点
					DB   08H							;最大包长度8字节
					DB   00H
					DB   01H							;轮询时间1毫秒
					DB   07H
					DB   05H
					DB   01H							;端点01H接收/下传
					DB   02H							;批量端点
					DB   08H							;最大包长度8字节
					DB   00H
					DB   00H
END
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -