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

📄 upsd_usb.src

📁 DK3200 USB DEMO for KEIL C
💻 SRC
📖 第 1 页 / 共 4 页
字号:
	MOV  	A,B
	ADDC 	A,#HIGH (stringDescTable)
	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
	MOV  	DPTR,#pTransmitBufferEP0
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;     bytesToTransmitEP0 = *pTransmitBufferEP0;// choose requested string
			; SOURCE LINE # 596
	LCALL	?C?CLDPTR
;     break;
			; SOURCE LINE # 597
	SJMP 	?C0115
; 
;     #if HID_DEVICE
;     case
;     DT_HID_CLASS:
			; SOURCE LINE # 601
?C0074:
;     pTransmitBufferEP0 = (uchar*) &hidClassDesc;
			; SOURCE LINE # 602
	MOV  	DPTR,#pTransmitBufferEP0
	MOV  	A,#0FFH
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (hidClassDesc)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (hidClassDesc)
	MOVX 	@DPTR,A
;     bytesToTransmitEP0 = hidClassDescSize;
			; SOURCE LINE # 603
	MOV  	DPTR,#hidClassDescSize
?C0112:
	CLR  	A
	MOVC 	A,@A+DPTR
?C0113:
;     break;
			; SOURCE LINE # 604
	SJMP 	?C0115
; 
;     case
;     DT_HID_REPORT:
			; SOURCE LINE # 607
?C0075:
;     pTransmitBufferEP0 = (uchar*) &reportDesc;
			; SOURCE LINE # 608
	MOV  	DPTR,#pTransmitBufferEP0
	MOV  	A,#0FFH
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (reportDesc)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (reportDesc)
	MOVX 	@DPTR,A
;     bytesToTransmitEP0 = reportDescSize;
			; SOURCE LINE # 609
	MOV  	DPTR,#reportDescSize
	CLR  	A
	MOVC 	A,@A+DPTR
?C0114:
;     break;
			; SOURCE LINE # 610
	SJMP 	?C0115
; 
;     case
;     DT_HID_PHYSICALD:
			; SOURCE LINE # 613
?C0076:
;     pTransmitBufferEP0 = (uchar*) &PhysicalReportDesc;
			; SOURCE LINE # 614
	MOV  	DPTR,#pTransmitBufferEP0
	MOV  	A,#0FFH
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (PhysicalReportDesc)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (PhysicalReportDesc)
	MOVX 	@DPTR,A
;     bytesToTransmitEP0 = PhysicalReportDescSize;
			; SOURCE LINE # 615
	MOV  	DPTR,#PhysicalReportDescSize
	CLR  	A
	MOVC 	A,@A+DPTR
?C0115:
	MOV  	R7,A
	MOV  	DPTR,#bytesToTransmitEP0
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;     break;
			; SOURCE LINE # 616
	SJMP 	?C0068
; 
;     #endif
; 
;     default:
			; SOURCE LINE # 620
?C0077:
;     STALL_EP0();                          // Unrecognized descriptor, so stall EP0
			; SOURCE LINE # 621
	LJMP 	STALL_EP0
;     return;
;    }
			; SOURCE LINE # 623
?C0068:
; 
;   bytesRequested = (setupPacket.wLength.hi << 8) | setupPacket.wLength.lo;
			; SOURCE LINE # 625
	MOV  	DPTR,#setupPacket+07H
	MOVX 	A,@DPTR
	MOV  	R6,A
	MOV  	DPTR,#setupPacket+06H
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	A,R6
	MOV  	bytesRequested?1449,A
	MOV  	A,R5
	MOV  	bytesRequested?1449+01H,A
;   shortTransfer = (bytesToTransmitEP0 < bytesRequested);
			; SOURCE LINE # 626
	MOV  	DPTR,#bytesToTransmitEP0
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,bytesRequested?1449+01H
	MOV  	A,R6
	SUBB 	A,bytesRequested?1449
	JNC  	?C0079
	MOV  	R5,#01H
	SJMP 	?C0080
?C0079:
	MOV  	R5,#00H
?C0080:
	MOV  	DPTR,#shortTransfer
	MOV  	A,R5
	MOVX 	@DPTR,A
;   if (bytesToTransmitEP0 > bytesRequested)
			; SOURCE LINE # 627
	SETB 	C
	MOV  	A,R7
	SUBB 	A,bytesRequested?1449+01H
	MOV  	A,R6
	SUBB 	A,bytesRequested?1449
	JC   	?C0081
;    {
			; SOURCE LINE # 628
;     bytesToTransmitEP0 = bytesRequested;
			; SOURCE LINE # 629
	INC  	DPTR
	MOV  	A,bytesRequested?1449
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,bytesRequested?1449+01H
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 630
?C0081:
;   UCON0 &= ~uTSEQ0;           // TransmitDataEP0 will toggle sequence bit to DATA1
			; SOURCE LINE # 631
	ANL  	UCON0,#07FH
;   TransmitBufferEP0();
			; SOURCE LINE # 632
	LCALL	TransmitBufferEP0
;  }
			; SOURCE LINE # 633
?C0078:
	RET  	
; END OF OnGetDescriptor

; 
; 
; 
; 
; 
; 
; static void OnSetDescriptor()

	RSEG  ?PR?OnSetDescriptor?UPSD_USB
OnSetDescriptor:
			; SOURCE LINE # 640
; /******************************************************************************
;  Function   : static void OnSetDescriptor()
;  Parameters : none
;  Description: Handler for SET_DESCRIPTOR() control requests
;  ******************************************************************************/
;  {
			; SOURCE LINE # 646
;   STALL_EP0();                  // No features currently implemented, so stall EP0
			; SOURCE LINE # 647
	LJMP 	STALL_EP0
; END OF OnSetDescriptor

;  }
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; BOOL ReadSetupPacket()

	RSEG  ?PR?ReadSetupPacket?UPSD_USB
ReadSetupPacket:
	USING	0
			; SOURCE LINE # 666
; /******************************************************************************
;  Function   : BOOL ReadSetupPacket()
;  Parameters : none
;  Description: Reads a setup packet from EP0.
;               Returns TRUE if successful; stalls the endpoint and returns
;               FALSE on an invalid packet size.
;  ******************************************************************************/
;  {
			; SOURCE LINE # 674
;   data int i;
;   uchar* p = (uchar*) &setupPacket;
			; SOURCE LINE # 676
	MOV  	DPTR,#p?1651
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (setupPacket)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (setupPacket)
	MOVX 	@DPTR,A
; 
;   if ((USTA & 0x0F) != 8)     // Stall EP0 if SETUP packet is not the correct size
			; SOURCE LINE # 678
	MOV  	A,USTA
	ANL  	A,#0FH
	XRL  	A,#08H
	JZ   	?C0083
;    {
			; SOURCE LINE # 679
;     STALL_EP0();
			; SOURCE LINE # 680
	LCALL	STALL_EP0
;     return FALSE;
			; SOURCE LINE # 681
	MOV  	R7,#00H
	RET  	
;    }
			; SOURCE LINE # 682
?C0083:
; 
;   for (i = 0; i < 8; i++)                    // Read the setup packet
			; SOURCE LINE # 684
	CLR  	A
	MOV  	i?1650,A
	MOV  	i?1650+01H,A
?C0085:
;    {
			; SOURCE LINE # 685
;     *p++ = UDR0;
			; SOURCE LINE # 686
	MOV  	DPTR,#p?1651
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?ILDIX
	MOV  	R1,B
	MOV  	R2,A
	MOV  	A,UDR0
	LCALL	?C?CSTPTR
;    }
			; SOURCE LINE # 687
	INC  	i?1650+01H
	MOV  	A,i?1650+01H
	JNZ  	?C0108
	INC  	i?1650
?C0108:
	XRL  	A,#08H
	ORL  	A,i?1650
	JNZ  	?C0085
?C0086:
;   USTA |= uRSEQ;                          // Set data toggle bit (expecting DATA1)
			; SOURCE LINE # 688
	ORL  	USTA,#080H
; 
;   return TRUE;
			; SOURCE LINE # 690
	MOV  	R7,#01H
;  }
			; SOURCE LINE # 691
?C0084:
	RET  	
; END OF ReadSetupPacket

; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; void OnSetupPacket()

	RSEG  ?PR?OnSetupPacket?UPSD_USB
OnSetupPacket:
	USING	0
			; SOURCE LINE # 703
; /******************************************************************************
;  Function   : void OnSetupPacket()
;  Parameters : none
;  Description: Basic handler for SETUP packets received on EP0.
;  ******************************************************************************/
;  {
			; SOURCE LINE # 709
;   pTransmitBufferEP0 = NULL;
			; SOURCE LINE # 710
	MOV  	DPTR,#pTransmitBufferEP0
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;   bytesToTransmitEP0 = 0;
			; SOURCE LINE # 711
	MOV  	DPTR,#bytesToTransmitEP0
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;                                              // If it's a standard request...
;   if ((setupPacket.bmRequestType & 0x60) == 0)
			; SOURCE LINE # 713
	INC  	DPTR
	MOVX 	A,@DPTR
	ANL  	A,#060H
	JNZ  	?C0088
;    {
			; SOURCE LINE # 714
;     switch (setupPacket.bRequest)            // Handle the request
			; SOURCE LINE # 715
	INC  	DPTR
	MOVX 	A,@DPTR
	CJNE 	A,#0CH,?C0109
?C0109:
	JNC  	?C0088
	MOV  	DPTR,#?C0110
	MOV  	R0,A
	ADD  	A,R0
	ADD  	A,R0
	JMP  	@A+DPTR
?C0110:
	LJMP 	?C0090
	LJMP 	?C0092
	LJMP 	?C0088
	LJMP 	?C0093
	LJMP 	?C0088
	LJMP 	?C0094
	LJMP 	?C0095
	LJMP 	?C0096
	LJMP 	?C0097
	LJMP 	?C0098
	LJMP 	?C0099
	LJMP 	?C0100
;      {
			; SOURCE LINE # 716
;       case GET_STATUS:        OnGetStatus();        return;
			; SOURCE LINE # 717
?C0090:
	LJMP 	OnGetStatus
;       case CLEAR_FEATURE:     OnClearFeature();     return;
			; SOURCE LINE # 718
?C0092:
	LJMP 	OnClearFeature
;       case SET_FEATURE:       OnSetFeature();       return;
			; SOURCE LINE # 719
?C0093:
	LJMP 	OnSetFeature
;       case SET_ADDRESS:       OnSetAddress();       return;
			; SOURCE LINE # 720
?C0094:
	LJMP 	OnSetAddress
;       case GET_DESCRIPTOR:    OnGetDescriptor();    return;
			; SOURCE LINE # 721
?C0095:
	LJMP 	OnGetDescriptor
;       case SET_DESCRIPTOR:    OnSetDescriptor();    return;
			; SOURCE LINE # 722
?C0096:
	LJMP 	OnSetDescriptor
;       case GET_CONFIGURATION: OnGetConfiguration(); return;
			; SOURCE LINE # 723
?C0097:
	LJMP 	OnGetConfiguration
;       case SET_CONFIGURATION: OnSetConfiguration(); return;
			; SOURCE LINE # 724
?C0098:
	LJMP 	OnSetConfiguration
;       case GET_INTERFACE:     OnGetInterface();     return;
			; SOURCE LINE # 725
?C0099:
	LJMP 	OnGetInterface
;       case SET_INTERFACE:     OnSetInterface();     return;
			; SOURCE LINE # 726
?C0100:
	LJMP 	OnSetInterface
;       default:
			; SOURCE LINE # 727
;       break;
			; SOURCE LINE # 728
;      }
			; SOURCE LINE # 729
;    }
			; SOURCE LINE # 730
?C0088:
;   STALL_EP0();                  // It's not a request we handle, so stall endpoint
			; SOURCE LINE # 731
	LCALL	STALL_EP0
;  }
			; SOURCE LINE # 732
?C0091:
	RET  	
; END OF OnSetupPacket

; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; void BaseEp0TxHandler()

	RSEG  ?PR?BaseEp0TxHandler?UPSD_USB
BaseEp0TxHandler:
	USING	0
			; SOURCE LINE # 746
; /******************************************************************************
;  Function   : void BaseEp0TxHandler()
;  Parameters : none
;  Description: Handler for successful data transmission on control endpoint (EP0).
;               Use it only for control transfers !!!
;  ******************************************************************************/
;  {
			; SOURCE LINE # 753
; 
;   if (!TransmitBufferEP0())              // Send next chunk of data in transaction
			; SOURCE LINE # 755
	LCALL	TransmitBufferEP0
	MOV  	A,R7
	JNZ  	?C0106
;    {
			; SOURCE LINE # 756
;                                              // The current request has finished
;     if (setupPacket.bRequest == SET_ADDRESS) // The current request has finished
			; SOURCE LINE # 758
	MOV  	DPTR,#setupPacket+01H
	MOVX 	A,@DPTR
	CJNE 	A,#05H,?C0103
;      {
			; SOURCE LINE # 759
;       UADR = setupPacket.wValue.lo | uUSBEN;
			; SOURCE LINE # 760
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	ORL  	A,#080H
	MOV  	UADR,A
;       if (setupPacket.wValue.lo != 0)
			; SOURCE LINE # 761
	MOV  	A,R7
	MOV  	R0,#LOW (usbState)
	JZ   	?C0104
;       usbState = US_ADDRESSED;
			; SOURCE LINE # 762
	MOV  	@R0,#03H
	SJMP 	?C0103
?C0104:
;       else
;       usbState = US_DEFAULT;
			; SOURCE LINE # 764
	MOV  	@R0,#02H
;      }
			; SOURCE LINE # 765
?C0103:
;     setupPacket.bRequest = REQUEST_COMPLETE;
			; SOURCE LINE # 766
	MOV  	DPTR,#setupPacket+01H
	MOV  	A,#0FFH
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 767
;  }
			; SOURCE LINE # 768
?C0106:
	RET  	
; END OF BaseEp0TxHandler

	END

⌨️ 快捷键说明

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