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

📄 chap_9.src

📁 周立功dp1581usb2.0实验仪
💻 SRC
📖 第 1 页 / 共 5 页
字号:
			; SOURCE LINE # 215
; 		//清除高速状态标志
; 		EA_DISABLE;
			; SOURCE LINE # 217
	CLR  	EA
; 		USB_Int_Flag.BITS.HS_STAT = 0;
			; SOURCE LINE # 218
	MOV  	R7,USB_Int_Flag
	MOV  	A,R7
	ANL  	A,#0DFH
	MOV  	USB_Int_Flag,A
; 		EA_ENABLE;
			; SOURCE LINE # 219
	SETB 	EA
; 		if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
			; SOURCE LINE # 220
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	JNB  	ACC.0,?C0006
; 		{
			; SOURCE LINE # 221
; 			//切换高速指示
; 			HS_FS_LED = HIGH_SPEED_LED;
			; SOURCE LINE # 223
	SETB 	HS_FS_LED
; 			//设置高速模式状态
; 			Kernel_Flag.BITS.HS_FS_State = HIGH_SPEED;
			; SOURCE LINE # 225
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	ANL  	A,#0FEH
	MOV  	Kernel_Flag+03H,A
; 			//重新配置高速端点
; 			Init_Endpoint();
			; SOURCE LINE # 227
	LCALL	Init_Endpoint
; 
; //			PIO_Count = 64;
; 			PIO_Count = 512;
			; SOURCE LINE # 230
	MOV  	PIO_Count,#02H
	MOV  	PIO_Count+01H,#00H
; 		}
			; SOURCE LINE # 231
; 	}
			; SOURCE LINE # 232
; }
			; SOURCE LINE # 233
?C0006:
	RET  	
; END OF USB_Debug_Mode

; 
; 
; //***********************************************************************
; //*										    							*
; //*	Routine 	:                                                		*
; //*	Input		: None                   								*
; //*	Output		: None                                					*
; //*	Function	:                                            			*
; //*																		*
; //***********************************************************************
; //建立包处理
; void USB_Setup(void)

	RSEG  ?PR?USB_Setup?CHAP_9
USB_Setup:
	USING	0
			; SOURCE LINE # 245
; {
			; SOURCE LINE # 246
; 	unsigned char type, req;
; 
; 	//清除EP0SETUP中断标志
; 	USB_Int_Flag.BITS.EP0SETUP = 0;	  
			; SOURCE LINE # 250
	MOV  	R7,USB_Int_Flag+01H
	MOV  	A,R7
	ANL  	A,#0FEH
	MOV  	USB_Int_Flag+01H,A
; 	//清除总线复位标志
;    	Kernel_Flag.BITS.Bus_Reset = 0;
			; SOURCE LINE # 252
	MOV  	R7,Kernel_Flag+01H
	MOV  	A,R7
	ANL  	A,#0BFH
	MOV  	Kernel_Flag+01H,A
; 	//选择端点0SETUP缓冲区
; 	D14_Cntrl_Reg.D14_ENDPT_INDEX = 0x20;
			; SOURCE LINE # 254
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	MOV  	A,#020H
	MOVX 	@DPTR,A
; 	
; 	//读取USB请求
; 	//读取请求类型
; 	USB_Device_Request.bmRequestType =  D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 258
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request)
	MOV  	@R0,AR7
; 	//读取请求号
; 	USB_Device_Request.bRequest = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 260
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request+01H)
	MOV  	@R0,AR7
; 	//读取16bit请求数据
; 	USB_Device_Request.wValue = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 262
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	R0,#LOW (USB_Device_Request+02H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wValue <<= 8;
			; SOURCE LINE # 263
	MOV  	R0,#LOW (USB_Device_Request+02H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	MOV  	R7,#00H
	MOV  	R6,A
	MOV  	R0,#LOW (USB_Device_Request+02H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wValue |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 264
	MOV  	R0,#LOW (USB_Device_Request+02H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	R4,#00H
	MOV  	A,R6
	ORL  	A,R4
	MOV  	R6,A
	MOV  	A,R7
	ORL  	A,R5
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request+02H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	//读取16bit请求索引
; 	USB_Device_Request.wIndex = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 266
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wIndex <<= 8;
			; SOURCE LINE # 267
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	MOV  	R7,#00H
	MOV  	R6,A
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wIndex |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 268
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	R4,#00H
	MOV  	A,R6
	ORL  	A,R4
	MOV  	R6,A
	MOV  	A,R7
	ORL  	A,R5
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	//读取16bit长度
; 	USB_Device_Request.wLength = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 270
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wLength <<= 8;
			; SOURCE LINE # 271
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	MOV  	R7,#00H
	MOV  	R6,A
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wLength |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 272
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	R4,#00H
	MOV  	A,R6
	ORL  	A,R4
	MOV  	R6,A
	MOV  	A,R7
	ORL  	A,R5
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	
; 	//长度处理(高低8位对调)
; 	Temp = USB_Device_Request.wLength;
			; SOURCE LINE # 275
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	Temp,A
	INC  	R0
	MOV  	A,@R0
	MOV  	Temp+01H,A
; 	USB_Device_Request.wLength = 0;
			; SOURCE LINE # 276
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,#00H
	INC  	R0
	MOV  	@R0,#00H
; 	USB_Device_Request.wLength = (UC) Temp;
			; SOURCE LINE # 277
	MOV  	R7,Temp+01H
	MOV  	R6,#00H
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	USB_Device_Request.wLength <<= 8;
			; SOURCE LINE # 278
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	MOV  	R7,#00H
	MOV  	R6,A
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	Temp >>= 8;
			; SOURCE LINE # 279
	MOV  	A,Temp
	MOV  	Temp+01H,A
	MOV  	Temp,#00H
; 	USB_Device_Request.wLength |= Temp;
			; SOURCE LINE # 280
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R6
	ORL  	A,Temp
	MOV  	R6,A
	MOV  	A,R7
	ORL  	A,Temp+01H
	MOV  	R7,A
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,AR7
; 	
; 	type = USB_Device_Request.bmRequestType & 0x60;
			; SOURCE LINE # 282
	MOV  	R0,#LOW (USB_Device_Request)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	ANL  	A,#060H
	MOV  	type?140,A
; 	req = USB_Device_Request.bRequest & 0x0f;
			; SOURCE LINE # 283
	MOV  	R0,#LOW (USB_Device_Request+01H)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	ANL  	A,#0FH
	MOV  	req?141,A
; 
; 	//厂商请求
; 	if (type == 0x40)
			; SOURCE LINE # 286
	MOV  	A,type?140
	CJNE 	A,#040H,?C0007
; 	{
			; SOURCE LINE # 287
; 		Vendor_Specific_Command();//厂商请求处理
			; SOURCE LINE # 288
	LCALL	Vendor_Specific_Command
; 	}
			; SOURCE LINE # 289
	RET  	
?C0007:
; 	else if (type == 0x00)
			; SOURCE LINE # 290
	MOV  	A,type?140
	JNZ  	?C0010
; 		(*StandardDeviceRequest[req])();//调用标准请求
			; SOURCE LINE # 291
	MOV  	R7,req?141
	MOV  	A,R7
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (StandardDeviceRequest)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (StandardDeviceRequest)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R3,A
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	MOV  	R2,A
	MOV  	A,#02H
	MOVC 	A,@A+DPTR
	MOV  	R1,A
	LCALL	?C?ICALL
; }
			; SOURCE LINE # 292
?C0010:
	RET  	
; END OF USB_Setup

; 
; //***********************************************************************
; //*										    							*
; //*	Routine 	:                                                		*
; //*	Input		: None                   								*
; //*	Output		: None                                					*
; //*	Function	:                                            			*
; //*																		*
; //***********************************************************************
; //厂商请求处理
; void Vendor_Specific_Command(void)

	RSEG  ?PR?Vendor_Specific_Command?CHAP_9
Vendor_Specific_Command:
	USING	0
			; SOURCE LINE # 303
; {
			; SOURCE LINE # 304
; 	if(USB_Device_Request.bRequest == 0x0C)
			; SOURCE LINE # 305
	MOV  	R0,#LOW (USB_Device_Request+01H)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	XRL  	A,#0CH
	JZ   	$ + 5H
	LJMP 	?C0023
; 	{
			; SOURCE LINE # 306
; 		switch (USB_Device_Request.wIndex)
			; SOURCE LINE # 307
	MOV  	R0,#LOW (USB_Device_Request+04H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	MOV  	B,R6
	LCALL	?C?ICASE
	DW   	?C0015
	DW   	07104H
	DW   	?C0013
	DW   	07204H
	DW   	00H
	DW   	?C0016
; 		{
			; SOURCE LINE # 308
; 		case GET_FIRMWARE_VERSION  ://获取固件版本
			; SOURCE LINE # 309
?C0013:
; 			if(USB_Device_Request.wLength == 1)
			; SOURCE LINE # 310
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	XRL  	A,#01H
	ORL  	A,R6
	JNZ  	?C0015
; 			{
			; SOURCE LINE # 311
; 				//select endpoint
; 				D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			; SOURCE LINE # 313
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 				//set the data length to 1 byte
; 				D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 1;
			; SOURCE LINE # 315
	MOV  	DPTR,#D14_Cntrl_Reg+01CH
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 				D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
			; SOURCE LINE # 316
	MOV  	DPTR,#D14_Cntrl_Reg+01DH
	CLR  	A
	MOVX 	@DPTR,A
; 				//sent 0x21 as data
; 				D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0x21;//版本号
			; SOURCE LINE # 318
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOV  	A,#021H
	MOVX 	@DPTR,A
; 				wait_ep0tx();
			; SOURCE LINE # 319
	LCALL	wait_ep0tx
; 				ep0out_ack();
			; SOURCE LINE # 320
	LCALL	ep0out_ack
; //				ep0in_ack();
; 				break;
			; SOURCE LINE # 322
	RET  	
; 			}
			; SOURCE LINE # 323
; 			
; 		case SETUP_DMA_REQUEST :
			; SOURCE LINE # 325
?C0015:
; 			//Out Token Ack detected
; 			wait_ep0rx();
			; SOURCE LINE # 327
	LCALL	wait_ep0rx
; 			D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
			; SOURCE LINE # 328
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	CLR  	A
	MOVX 	@DPTR,A
; 			//
; 			FileSize.Size.Address[0] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 330
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	FileSize,R7
; 			FileSize.Size.Address[1] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 331
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	FileSize+01H,R7
; 			FileSize.Size.Address[2] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 332
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	FileSize+02H,R7
; 			//读取传输字节数
; 			Temp = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 334
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	Temp,R6
	MOV  	Temp+01H,R7
; 			bytecount = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 335
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	R6,A
	MOV  	bytecount+03H,R7
	MOV  	bytecount+02H,R6
	MOV  	bytecount+01H,R5
	MOV  	bytecount,R4
; 			bytecount <<= 8;
			; SOURCE LINE # 336
	MOV  	R7,bytecount+03H
	MOV  	R6,bytecount+02H
	MOV  	R5,bytecount+01H
	MOV  	R4,bytecount
	MOV  	R0,#08H
	LCALL	?C?LSHL
	MOV  	bytecount+03H,R7
	MOV  	bytecount+02H,R6
	MOV  	bytecount+01H,R5
	MOV  	bytecount,R4
; 			bytecount |= Temp;
			; SOURCE LINE # 337
	MOV  	R6,Temp
	MOV  	R7,Temp+01H
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	A,bytecount+03H
	ORL  	A,R7
	MOV  	bytecount+03H,A
	MOV  	A,bytecount+02H
	ORL  	A,R6
	MOV  	bytecount+02H,A
	MOV  	A,bytecount+01H
	ORL  	A,R5
	MOV  	bytecount+01H,A

⌨️ 快捷键说明

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