📄 main.src
字号:
;
;
;
;
;
;
;
; 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
CL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -