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

📄 chap_9.src

📁 周立功dp1581usb2.0实验仪
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	MOV  	A,bytecount
	ORL  	A,R4
	MOV  	bytecount,A
; 			//读取传输方式
; 			FileSize.Size.DIR = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
			; SOURCE LINE # 339
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	FileSize+07H,R7
; 			ep0in_ack();
			; SOURCE LINE # 340
	LCALL	ep0in_ack
; 			Kernel_Flag.BITS.Transfer_Start = 1;//标志传输数据开始
			; SOURCE LINE # 341
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	ORL  	A,#020H
	MOV  	Kernel_Flag+03H,A
; 			break;
			; SOURCE LINE # 342
	RET  	
; 			
; 		default :
			; SOURCE LINE # 344
?C0016:
; 			if(USB_Device_Request.bmRequestType == 0xC0)
			; SOURCE LINE # 345
	MOV  	R0,#LOW (USB_Device_Request)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	CJNE 	A,#0C0H,?C0017
; 			{
			; SOURCE LINE # 346
; 				ep0in_ack();
			; SOURCE LINE # 347
	LCALL	ep0in_ack
; 				break;				
			; SOURCE LINE # 348
	RET  	
; 			}
			; SOURCE LINE # 349
?C0017:
; 			if(USB_Device_Request.bmRequestType == 0x40)
			; SOURCE LINE # 350
	MOV  	R0,#LOW (USB_Device_Request)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R7
	XRL  	A,#040H
	JNZ  	?C0023
; 			{	
			; SOURCE LINE # 351
; 				D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
			; SOURCE LINE # 352
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	CLR  	A
	MOVX 	@DPTR,A
; 				D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
			; SOURCE LINE # 353
	MOV  	DPTR,#D14_Cntrl_Reg+028H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	A,R7
	ORL  	A,#01H
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+028H
	MOV  	A,R7
	MOVX 	@DPTR,A
?C0019:
; 				while(!USB_Int_Flag.BITS.EP0SETUP)
			; SOURCE LINE # 354
	MOV  	R7,USB_Int_Flag+01H
	MOV  	A,R7
	JB   	ACC.0,?C0020
; 				{
			; SOURCE LINE # 355
; 					//读取ISP1581中断寄存器
; 					USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
			; SOURCE LINE # 357
	MOV  	DPTR,#D14_Cntrl_Reg+018H
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	A,USB_Int_Flag+03H
	ORL  	A,R7
	MOV  	USB_Int_Flag+03H,A
	MOV  	A,USB_Int_Flag+02H
	ORL  	A,R6
	MOV  	USB_Int_Flag+02H,A
	MOV  	A,USB_Int_Flag+01H
	ORL  	A,R5
	MOV  	USB_Int_Flag+01H,A
	MOV  	A,USB_Int_Flag
	ORL  	A,R4
	MOV  	USB_Int_Flag,A
; 					//回写ISP1581中断寄存器
; 					D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
			; SOURCE LINE # 359
	MOV  	R7,USB_Int_Flag+03H
	MOV  	R6,USB_Int_Flag+02H
	MOV  	R5,USB_Int_Flag+01H
	MOV  	R4,USB_Int_Flag
	MOV  	DPTR,#D14_Cntrl_Reg+018H
	LCALL	?C?LSTXDATA
; 					if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
			; SOURCE LINE # 360
	MOV  	R7,USB_Int_Flag
	MOV  	A,R7
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	MOV  	R7,A
	MOV  	A,R7
	JB   	ACC.0,?C0023
	MOV  	R7,USB_Int_Flag
	MOV  	A,R7
	JNB  	ACC.0,?C0019
	RET  	
; 						return;
; 				}
			; SOURCE LINE # 362
?C0020:
; 				USB_Int_Flag.BITS.EP0TX = 0;
			; SOURCE LINE # 363
	MOV  	R7,USB_Int_Flag+01H
	MOV  	A,R7
	ANL  	A,#0F7H
	MOV  	USB_Int_Flag+01H,A
; 				break;				
			; SOURCE LINE # 364
; 			}
			; SOURCE LINE # 365
; 		}
			; SOURCE LINE # 366
; 	}
			; SOURCE LINE # 367
; }
			; SOURCE LINE # 368
?C0023:
	RET  	
; END OF Vendor_Specific_Command

; 
; //***********************************************************************
; //*										    							*
; //*	Routine 	:                                                		*
; //*	Input		: None                   								*
; //*	Output		: None                                					*
; //*	Function	:                                            			*
; //*																		*
; //***********************************************************************
; 
; void	reserved(void)

	RSEG  ?PR?reserved?CHAP_9
reserved:
			; SOURCE LINE # 379
; {
			; SOURCE LINE # 380
; }
			; SOURCE LINE # 381
	RET  	
; END OF reserved

; 
; 
; //Get_Descriptor()获取描述符
; void get_descriptor(void)

	RSEG  ?PR?get_descriptor?CHAP_9
get_descriptor:
	USING	0
			; SOURCE LINE # 385
; {
			; SOURCE LINE # 386
; 
; 	switch(USB_Device_Request.wValue)
			; SOURCE LINE # 388
	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  	B,R6
	LCALL	?C?ICASE
	DW   	?C0026
	DW   	01H
	DW   	?C0031
	DW   	02H
	DW   	?C0060
	DW   	03H
	DW   	?C0064
	DW   	04H
	DW   	?C0065
	DW   	05H
	DW   	?C0087
	DW   	06H
	DW   	?C0092
	DW   	07H
	DW   	?C0071
	DW   	08H
	DW   	00H
	DW   	?C0112
; 	{
			; SOURCE LINE # 389
; 	case  1://设备描述符
			; SOURCE LINE # 390
?C0026:
; 		//选择描述符
; 		if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
			; SOURCE LINE # 392
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	JNB  	ACC.0,?C0027
; 			Descriptor_Ptr = &Standard_Device_Descriptor[0];	//set pointer to device descriptor
			; SOURCE LINE # 393
	MOV  	R6,#HIGH (Standard_Device_Descriptor)
	MOV  	R7,#LOW (Standard_Device_Descriptor)
	MOV  	Descriptor_Ptr,R6
	MOV  	Descriptor_Ptr+01H,R7
?C0027:
; 		if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
			; SOURCE LINE # 394
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	JB   	ACC.0,?C0028
; 			Descriptor_Ptr = &HS_Device_Descriptor[0];	//set pointer to device descriptor
			; SOURCE LINE # 395
	MOV  	R6,#HIGH (HS_Device_Descriptor)
	MOV  	R7,#LOW (HS_Device_Descriptor)
	MOV  	Descriptor_Ptr,R6
	MOV  	Descriptor_Ptr+01H,R7
?C0028:
; 		count = *Descriptor_Ptr;							//read in descriptor length
			; SOURCE LINE # 396
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	count,R6
	MOV  	count+01H,R7
; 		//选择端点号
; 		D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			; SOURCE LINE # 398
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 		//写下发送字节数
; 		D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 0x12;
			; SOURCE LINE # 400
	MOV  	DPTR,#D14_Cntrl_Reg+01CH
	MOV  	A,#012H
	MOVX 	@DPTR,A
; 		D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
			; SOURCE LINE # 401
	MOV  	DPTR,#D14_Cntrl_Reg+01DH
	CLR  	A
	MOVX 	@DPTR,A
?C0029:
; 		//send descriptor
; 		//发送描述符
; 		while(count != 0)
			; SOURCE LINE # 404
	MOV  	A,count+01H
	ORL  	A,count
	JZ   	?C0030
; 		{
			; SOURCE LINE # 405
; 			D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			; SOURCE LINE # 406
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOV  	A,R7
	MOVX 	@DPTR,A
; 			count--;
			; SOURCE LINE # 407
	MOV  	A,count+01H
	DEC  	count+01H
	JNZ  	?C0214
	DEC  	count
?C0214:
; 			Descriptor_Ptr++;
			; SOURCE LINE # 408
	INC  	Descriptor_Ptr+01H
	MOV  	A,Descriptor_Ptr+01H
	JNZ  	?C0215
	INC  	Descriptor_Ptr
?C0215:
; 		}
			; SOURCE LINE # 409
	SJMP 	?C0029
?C0030:
; 		wait_ep0tx();
			; SOURCE LINE # 410
	LCALL	wait_ep0tx
; 		ep0out_ack();
			; SOURCE LINE # 411
	LCALL	ep0out_ack
; 		break;
			; SOURCE LINE # 412
	RET  	
; 		
; 	case  2        :  //获取配置描述符
			; SOURCE LINE # 414
?C0031:
; 		USB_Int_Flag.BITS.EP0RX = 0;
			; SOURCE LINE # 415
	MOV  	R7,USB_Int_Flag+01H
	MOV  	A,R7
	ANL  	A,#0FBH
	MOV  	USB_Int_Flag+01H,A
; 		Temp = 64;
			; SOURCE LINE # 416
	MOV  	Temp,#00H
	MOV  	Temp+01H,#040H
; 		Descriptor_Ptr = &Standard_Config_Descriptor[0];	//set pointer to configuration descriptor
			; SOURCE LINE # 417
	MOV  	R6,#HIGH (Standard_Config_Descriptor)
	MOV  	R7,#LOW (Standard_Config_Descriptor)
	MOV  	Descriptor_Ptr,R6
	MOV  	Descriptor_Ptr+01H,R7
; 		count = *Descriptor_Ptr;							//get configuration Descriptor length
			; SOURCE LINE # 418
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	count,R6
	MOV  	count+01H,R7
; 		//选择端点号1
; 		D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
			; SOURCE LINE # 420
	MOV  	DPTR,#D14_Cntrl_Reg+02CH
	MOV  	A,#01H
	MOVX 	@DPTR,A
; 		//check if only configuration descriptor required
; 		//检查描述符长度,决定是只发送配置描述符还是描述符集合
; 		if(count >= USB_Device_Request.wLength)				//Send only Configuration descriptor
			; SOURCE LINE # 423
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	CLR  	C
	MOV  	A,count+01H
	SUBB 	A,R7
	MOV  	A,count
	SUBB 	A,R6
	JC   	?C0032
; 		{
			; SOURCE LINE # 424
; 			//写入发送字节数
; 			D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
			; SOURCE LINE # 426
	MOV  	R0,#LOW (USB_Device_Request+07H)
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+01CH
	MOV  	A,R7
	MOVX 	@DPTR,A
; 			D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
			; SOURCE LINE # 427
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R6
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	DPTR,#D14_Cntrl_Reg+01DH
	MOV  	A,R7
	MOVX 	@DPTR,A
; 			//send descriptor
; 			//发送描述符
; 			for(count = 0 ; count < USB_Device_Request.wLength ; count++)
			; SOURCE LINE # 430
	MOV  	count,#00H
	MOV  	count+01H,#00H
?C0033:
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	CLR  	C
	MOV  	A,count+01H
	SUBB 	A,R7
	MOV  	A,count
	SUBB 	A,R6
	JNC  	?C0034
; 			{
			; SOURCE LINE # 431
; 				D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			; SOURCE LINE # 432
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOV  	A,R7
	MOVX 	@DPTR,A
; 				Descriptor_Ptr++;
			; SOURCE LINE # 433
	INC  	Descriptor_Ptr+01H
	MOV  	A,Descriptor_Ptr+01H
	JNZ  	?C0216
	INC  	Descriptor_Ptr
?C0216:
; 			}
			; SOURCE LINE # 434
	INC  	count+01H
	MOV  	A,count+01H
	JNZ  	?C0217
	INC  	count
?C0217:
	SJMP 	?C0033
?C0034:
; 			wait_ep0tx();
			; SOURCE LINE # 435
	LCALL	wait_ep0tx
; 			ep0out_ack();
			; SOURCE LINE # 436
	LCALL	ep0out_ack
; 		}
			; SOURCE LINE # 437
	RET  	
?C0032:
; 		else //send Configuration,Interface and Endpoint descriptor
; 		{
			; SOURCE LINE # 439
; 			//发送描述符集合(配置+接口+端点)
; 			if(USB_Device_Request.wLength >= 32)
			; SOURCE LINE # 441
	MOV  	R0,#LOW (USB_Device_Request+06H)
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,#020H
	MOV  	A,R6
	SUBB 	A,#00H
	JNC  	$ + 5H
	LJMP 	?C0037
; 			{
			; SOURCE LINE # 442
?C0038:
; 				//写入配置描述符
; 				while(count != 0)
			; SOURCE LINE # 444
	MOV  	A,count+01H
	ORL  	A,count
	JZ   	?C0039
; 				{
			; SOURCE LINE # 445
; 					D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			; SOURCE LINE # 446
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	DPTR,#D14_Cntrl_Reg+020H
	MOV  	A,R7
	MOVX 	@DPTR,A
; 					count--;
			; SOURCE LINE # 447
	MOV  	A,count+01H
	DEC  	count+01H
	JNZ  	?C0218
	DEC  	count
?C0218:
; 					Descriptor_Ptr++;
			; SOURCE LINE # 448
	INC  	Descriptor_Ptr+01H
	MOV  	A,Descriptor_Ptr+01H
	JNZ  	?C0219
	INC  	Descriptor_Ptr
?C0219:
; 				}
			; SOURCE LINE # 449
	SJMP 	?C0038
?C0039:
; 				//选择高速还是全速接口描述符
; 				if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
			; SOURCE LINE # 451
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	JNB  	ACC.0,?C0040
; 					Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
			; SOURCE LINE # 452
	MOV  	R6,#HIGH (Bulk_Interface_Descriptor)
	MOV  	R7,#LOW (Bulk_Interface_Descriptor)
	MOV  	Descriptor_Ptr,R6
	MOV  	Descriptor_Ptr+01H,R7
?C0040:
; 				if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
			; SOURCE LINE # 453
	MOV  	R7,Kernel_Flag+03H
	MOV  	A,R7
	JB   	ACC.0,?C0041
; 					Descriptor_Ptr = &HS_Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
			; SOURCE LINE # 454
	MOV  	R6,#HIGH (HS_Bulk_Interface_Descriptor)
	MOV  	R7,#LOW (HS_Bulk_Interface_Descriptor)
	MOV  	Descriptor_Ptr,R6
	MOV  	Descriptor_Ptr+01H,R7
?C0041:
; 				count = *Descriptor_Ptr;	//get the descriptor count
			; SOURCE LINE # 455
	MOV  	R6,Descriptor_Ptr
	MOV  	R7,Descriptor_Ptr+01H
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	R6,#00H
	MOV  	count,R6
	MOV  	count+01H,R7
?C0042:
; 				//写入接口描述符
; 				while(count != 0)

⌨️ 快捷键说明

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