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

📄 main.src

📁 DK3200 USB DEMO for KEIL C
💻 SRC
📖 第 1 页 / 共 5 页
字号:
; 
; 
; static void UsbIsr() interrupt 6 using 3

	RSEG  ?PR?UsbIsr?MAIN
	USING	3
UsbIsr:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	USING	3
	MOV  	PSW,#018H
			; SOURCE LINE # 821
; /******************************************************************************
;  Function   : static void UsbIsr()
;  Parameters : none
;  Description: USB interrupt service routine.
;  Note:        Do not modify this routine !!!
;  ******************************************************************************/
;  {
; 
; 
; 
; 
; 
; 
; 
; 
;   data uchar cb;
;   data uchar i;
; 
; 
; 
; 
; 
; 
; 
; 
; 
;   if (RXD0F)                                 // If data received on EP0 OUT ...
			; SOURCE LINE # 848
	JB   	RXD0F,$ + 6H
	LJMP 	?C0067
;    {
			; SOURCE LINE # 849
;                  // do not change this SETUP packet processing part up to else !!!
;     if (USTA & uSETUP)                       // If it's a SETUP packet ...
			; SOURCE LINE # 851
	MOV  	A,USTA
	JNB  	ACC.6,?C0068
;      {
			; SOURCE LINE # 852
; 
;       if (UCON0 & uSTALL0)                   // try to fix bug in uPSD
			; SOURCE LINE # 854
	MOV  	A,UCON0
	JNB  	ACC.6,?C0069
;        {
			; SOURCE LINE # 855
;         #pragma asm
;               anl    UCON0,#255-uSTALL0        ;clear STALL0 bit when it hangs
	  anl    UCON0,#255-0x40        ;clear STALL0 bit when it hangs
;         #pragma endasm
;        }
			; SOURCE LINE # 859
?C0069:
; 
;       if  (ReadSetupPacket())                // Read the SETUP packet
			; SOURCE LINE # 861
	LCALL	ReadSetupPacket
	MOV  	A,R7
	JZ   	?C0073
;        {
			; SOURCE LINE # 862
;                                              //tady to nepomaha
;         if (!HandleReport())                 // Test and handle HID type packets
			; SOURCE LINE # 864
	LCALL	HandleReport
	MOV  	A,R7
	JNZ  	?C0073
;          {
			; SOURCE LINE # 865
;    // If this is not a HID report ... pass it on to the basic SETUP packet handler
;           OnSetupPacket();
			; SOURCE LINE # 867
	LCALL	OnSetupPacket
;          }
			; SOURCE LINE # 868
;         else
;          {
			; SOURCE LINE # 870
;          }
			; SOURCE LINE # 871
;        }
			; SOURCE LINE # 872
;       else
;        {
			; SOURCE LINE # 874
; //No Setup packet with DATA length = 8, STALLed automatically in ReadSetupPacket()
;        }
			; SOURCE LINE # 876
?C0073:
; 
;       RXD0F = 0;            // Clear interrupt flag so next packet can come in now
			; SOURCE LINE # 878
	CLR  	RXD0F
;      }
			; SOURCE LINE # 879
	SJMP 	?C0067
?C0068:
; 
;     else
;            /*======== No SETUP packet, normal data packets ========*/
;      {
			; SOURCE LINE # 883
;                                      // If in the middle of receiving a report ...
;       if ((USTA & 0x0F) && (rcvIndex < OUTPUT_REPORT_SIZE))
			; SOURCE LINE # 885
	MOV  	A,USTA
	ANL  	A,#0FH
	JZ   	?C0075
	MOV  	A,rcvIndex
	CLR  	C
	SUBB 	A,#040H
	JNC  	?C0075
;        {
			; SOURCE LINE # 886
;         cb = (USTA & 0x0F);                  // Read the next segment
			; SOURCE LINE # 887
	MOV  	A,USTA
	ANL  	A,#0FH
	MOV  	cb?1158,A
;         if (cb > EP0_SIZE)
			; SOURCE LINE # 888
	SUBB 	A,#08H
	JC   	?C0076
;          {
			; SOURCE LINE # 889
;           cb = EP0_SIZE;                     // fix bug
			; SOURCE LINE # 890
	MOV  	cb?1158,#08H
;          }
			; SOURCE LINE # 891
?C0076:
;         for (i = 0; i < cb; i++)
			; SOURCE LINE # 892
	MOV  	i?1159,#00H
?C0077:
	MOV  	A,i?1159
	CLR  	C
	SUBB 	A,cb?1158
	JNC  	?C0078
;          {
			; SOURCE LINE # 893
;           rcvReport.u.buffer[rcvIndex + i] = UDR0;            //read received data
			; SOURCE LINE # 894
	MOV  	A,rcvIndex
	ADD  	A,i?1159
	ADD  	A,#LOW (rcvReport)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (rcvReport)
	MOV  	DPH,A
	MOV  	A,UDR0
	MOVX 	@DPTR,A
;          }
			; SOURCE LINE # 895
	INC  	i?1159
	SJMP 	?C0077
?C0078:
;         #pragma asm
;               xrl    USTA,#uRSEQ;                       // Toggle data toggle bit
	  xrl    USTA,#0x80;                        
;         #pragma endasm
;                               // Handle report as it comes in and/or when all done
;         OnReportSegmentReceived(cb);
			; SOURCE LINE # 900
	MOV  	R7,cb?1158
	LCALL	_OnReportSegmentReceived
; 
;         if ((rcvIndex += cb) >= OUTPUT_REPORT_SIZE)
			; SOURCE LINE # 902
	MOV  	A,rcvIndex
	ADD  	A,cb?1158
	MOV  	rcvIndex,A
	CLR  	C
	SUBB 	A,#040H
	JC   	?C0080
;          {
			; SOURCE LINE # 903
;           OnReportReceived();
			; SOURCE LINE # 904
	LCALL	OnReportReceived
; 
;           #pragma asm                        //send a zero length packet
; 
	  
;               anl    UCON0,#uTSEQ0+uRX0E
	  anl    UCON0,#0x80+0x10
;               orl    UCON0,#uTX0E                              ;enable trasmit
	  orl    UCON0,#0x20                              ;enable trasmit
;           #pragma endasm
; 
;          }
			; SOURCE LINE # 912
?C0080:
;         RXD0F = 0;          // Clear interrupt flag so next packet can come in now
			; SOURCE LINE # 913
	CLR  	RXD0F
;        }
			; SOURCE LINE # 914
	SJMP 	?C0067
?C0075:
;       else
;        {
			; SOURCE LINE # 916
;                     // Got 0 length ACK data packet; expecting a SETUP packet now.
;         USTA ^= uRSEQ;                       // Toggle data toggle bit
			; SOURCE LINE # 918
	XRL  	USTA,#080H
;         RXD0F = 0;          // Clear interrupt flag so next packet can come in now
			; SOURCE LINE # 919
	CLR  	RXD0F
;        }
			; SOURCE LINE # 920
;      }
			; SOURCE LINE # 921
;    }
			; SOURCE LINE # 922
?C0067:
; 
; 
; 
; 
; 
;   if (TXD0F)
			; SOURCE LINE # 928
	JNB  	TXD0F,?C0082
;    {
			; SOURCE LINE # 929
; 
;     TXD0F = 0;                               // Clear the interrupt flag
			; SOURCE LINE # 931
	CLR  	TXD0F
;                            // Do not change this part up to call of BaseEp0Handler
;                                   // If in the middle of transmitting a report ...
;     if (txIndex < FEATURE_REPORT_SIZE)
			; SOURCE LINE # 934
	MOV  	A,txIndex
	CLR  	C
	SUBB 	A,#040H
	JNC  	?C0083
;      {
			; SOURCE LINE # 935
;                                    // Transmit the next segment of outgoing report
;       cb = min(FEATURE_REPORT_SIZE - txIndex, EP0_SIZE);
			; SOURCE LINE # 937
	CLR  	C
	MOV  	A,#040H
	SUBB 	A,txIndex
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0084
	SJMP 	?C0085
?C0084:
	MOV  	R7,#08H
?C0085:
	MOV  	cb?1158,R7
;       TransmitDataEP0(txReport.u.buffer + txIndex, cb);
			; SOURCE LINE # 938
	MOV  	A,#LOW (txReport)
	ADD  	A,txIndex
	MOV  	R1,A
	CLR  	A
	ADDC 	A,#HIGH (txReport)
	MOV  	R2,A
	MOV  	R3,#01H
	MOV  	A,R7
	MOV  	R5,A
	MOV  	R4,#00H
	LCALL	_TransmitDataEP0
;       if ((txIndex += cb) >= FEATURE_REPORT_SIZE)
			; SOURCE LINE # 939
	MOV  	A,txIndex
	ADD  	A,cb?1158
	MOV  	txIndex,A
	CLR  	C
	SUBB 	A,#040H
	JC   	?C0086
;        {
			; SOURCE LINE # 940
;         OnReportTransmitted();
			; SOURCE LINE # 941
	LCALL	OnReportTransmitted
;        }
			; SOURCE LINE # 942
	SJMP 	?C0082
?C0086:
;       else
;        {
			; SOURCE LINE # 944
;                       // Prepare the next segment while that last one is going out
;         PrepareTransmitSegment(txIndex);
			; SOURCE LINE # 946
	MOV  	R7,txIndex
	LCALL	_PrepareTransmitSegment
;        }
			; SOURCE LINE # 947
;      }
			; SOURCE LINE # 948
	SJMP 	?C0082
?C0083:
;     else
;      {
			; SOURCE LINE # 950
;                              // This part can changed (or BaseEp0Handler directly)
;       BaseEp0TxHandler();                    // Handle standard control requests
			; SOURCE LINE # 952
	LCALL	BaseEp0TxHandler
;      }
			; SOURCE LINE # 953
;    }
			; SOURCE LINE # 954
?C0082:
; 
; 
; 
;   if (SUSPND)                                // Handle suspend interrupt
			; SOURCE LINE # 958
	JNB  	SUSPND,?C0089
;    {
			; SOURCE LINE # 959
;     SUSPND = 0;                              // keep USB logic functional
			; SOURCE LINE # 960
	CLR  	SUSPND
;     GoOnSuspend = 1;                         // set global flag
			; SOURCE LINE # 961
	SETB 	GoOnSuspend
;     UIEN &= ~uSUSPNDIE;                      // disable INT
			; SOURCE LINE # 962
	ANL  	UIEN,#07FH
;     DDCCON = 0x2;                            // generate DDC interrupt
			; SOURCE LINE # 963
	MOV  	DDCCON,#02H
;     DDCCONintc++;                            // aux. DDC cnt
			; SOURCE LINE # 964
	MOV  	DPTR,#DDCCONintc
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 965
?C0089:
; 
; 
; 
;   if (TXD1F)                        // If data successfully transmitted on EP1 ...
			; SOURCE LINE # 969
	JNB  	TXD1F,?C0090
;    {
			; SOURCE LINE # 970
;     UIEN &= ~uTXD1IE;                   // disable EP1,2 INT, serviced in OnIdle()
			; SOURCE LINE # 971
	ANL  	UIEN,#0FBH
;     DDCCON = 0x2;                            // generate DDC interrupt
			; SOURCE LINE # 972
	MOV  	DDCCON,#02H
;     DDCCONintc++;                            // aux. DDC cnt
			; SOURCE LINE # 973
	MOV  	DPTR,#DDCCONintc
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 974
?C0090:
; 
; 
;   if (RSTF)              // Handle USB bus reset, it must be at the end of USB ISR
			; SOURCE LINE # 977
	JNB  	RSTF,?C0091
;    {
			; SOURCE LINE # 978
;     USB_ISR_FLAGS = 0;
			; SOURCE LINE # 979
	MOV  	USB_ISR_FLAGS,#00H
;     OnUSBReset();                            //resets all the flags automatically
			; SOURCE LINE # 980
	LCALL	OnUSBReset
;     DDCCON = 0x2;                            // generate DDC interrupt
			; SOURCE LINE # 981
	MOV  	DDCCON,#02H
;     DDCCONintc++;                            // aux. DDC cnt
			; SOURCE LINE # 982
	MOV  	DPTR,#DDCCONintc
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
;    }
			; SOURCE LINE # 983
?C0091:
;   g_debugUSB_INT_CNT++;                      // increment USB ISR counter
			; SOURCE LINE # 984
	INC  	g_debugUSB_INT_CNT+01H
	MOV  	A,g_debugUSB_INT_CNT+01H
	JNZ  	?C0109
	INC  	g_debugUSB_INT_CNT
?C0109:
; 
; 
; 
;  }
			; SOURCE LINE # 988
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF UsbIsr

; 
; 
; 
; 
; 
; 
; 
; 
; 
; static data char bufIndex = 0;               // Current position in LCD buffer
; static data char txBuf[8];                   // Buffer to send back to PC
; 
; 
; 
; static void OnTransmitEP1()

	RSEG  ?PR?OnTransmitEP1?MAIN
OnTransmitEP1:
	USING	0
			; SOURCE LINE # 1003
; /******************************************************************************
;  Function   : static void OnTransmitEP1()
;  Parameters : none
;  Description: Transmits data to Endpoint1
;  ******************************************************************************/
;  {
			; SOURCE LINE # 1009
;   data unsigned char i,nBytes;               // Num bytes of LCD data
; 
;                  // Store current index into LCD buffer in first byte of tx buffer
;   if (bufIndex >= LCD_BUFFER_SIZE - 1)       //one zero only, save packet size
			; SOURCE LINE # 1013
	CLR  	C
	MOV  	A,bufIndex
	XRL  	A,#080H
	SUBB 	A,#0A3H
	JC   	?C0093
;    {
			; SOURCE LINE # 1014
;     bufIndex = 0;      // Wrap around to start of LCD buffer for next transmission
			; SOURCE LINE # 1015
	CLR  	A
	MOV  	bufIndex,A
;    }
			; SOURCE LINE # 1016
?C0093:
; 
;   nBytes = LCD_BUFFER_SIZE - bufIndex - 1;
			; SOURCE LINE # 1018
	CLR  	C
	MOV  	A,#023H
	SUBB 	A,bufIndex
	MOV  	nBytes?1261,A
;   if (nBytes>7)
			; SOURCE LINE # 1019
	SETB 	C
	SUBB 	A,#07H
	JC   	?C0094
;    {
			; SOURCE LINE # 1020
;     nBytes = 7;                              //max. 1 info byte + 7 characters
			; SOURCE LINE # 1021
	MOV  	nBytes?1261,#07H
;    }
			; SOURCE LINE # 1022
?C0094:
; 
;   txBuf[0] = bufIndex;                       //save position at the first byte
			; SOURCE LINE # 1024
	MOV  	txBuf,bufIndex
; 
;   i = 1;
			; SOURCE LINE # 1026
	MOV  	i?1260,#01H
?C0095:
;   while (i<=nBytes)
			; SOURCE LINE # 1027
	MOV  	A,i?1260
	SETB 	C
	SUBB 	A,nBytes?1261
	JNC  	?C0096
;    {
			; SOURCE LINE # 1028
;     txBuf[i++] = LCD_buffer[bufIndex++];     //fill buffer
			; SOURCE LINE # 1029
	MOV  	R7,bufIndex
	INC  	bufIndex
	MOV  	A,#LOW (LCD_buffer)
	ADD  	A,R7
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	R6,i?1260
	INC  	i?1260
	MOV  	A,#LOW (txBuf)
	ADD  	A,R6
	MOV  	R0,A
	XCH  	A,@R0
	MOV  	A,R7
	XCH  	A,@R0
;    }
			; SOURCE LINE # 1030
	SJMP 	?C0095
?C0096:
; 
;   TransmitDataEPx(1, txBuf, nBytes+1);       // Transmit input report to host
			; SOURCE LINE # 1032
	MOV  	R3,#00H
	MOV  	R2,#HIGH (txBuf)
	MOV  	R1,#LOW (txBuf)
	MOV  	A,nBytes?1261
	ADD  	A,#01H
	MOV  	R6,A
	CLR  	A
	RLC  	A
	MOV  	DPTR,#?_Tran

⌨️ 快捷键说明

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