📄 main.src
字号:
MOV R3,#01H
MOV R2,#HIGH (status)
MOV R1,#LOW (status)
LCALL ?C?MEMSET
; // g_debug1 = currentCmd.u.cmd;
; }
; SOURCE LINE # 579
?C0049:
;
; // Some commands are processed at this point
; switch (rcvReport.u.cmd)
; SOURCE LINE # 582
MOV DPTR,#rcvReport
MOVX A,@DPTR
ADD A,#0FAH
JZ ?C0054
DEC A
JZ ?C0052
DEC A
JZ ?C0053
ADD A,#07H
JNZ ?C0055
; {
; SOURCE LINE # 583
; case CMD_RESET:
; SOURCE LINE # 584
?C0051:
; WDKEY=0; // watchdog will trigger reset in a second
; SOURCE LINE # 585
CLR A
MOV WDKEY,A
; currentCmd.u.cmd = 0;
; SOURCE LINE # 586
; break;
; SOURCE LINE # 587
SJMP ?C0112
;
; case CMD_SET_PAGE:
; SOURCE LINE # 589
?C0052:
; UPSD_xreg.PAGE = rcvReport.u.setRegs.page;
; SOURCE LINE # 590
MOV DPTR,#rcvReport+01H
MOVX A,@DPTR
MOV DPTR,#UPSD_xreg+0E0H
MOVX @DPTR,A
; currentCmd.u.cmd = 0;
; SOURCE LINE # 591
CLR A
?C0110:
; break;
; SOURCE LINE # 592
SJMP ?C0112
;
; case CMD_SET_VM:
; SOURCE LINE # 594
?C0053:
; UPSD_xreg.VM = rcvReport.u.setRegs.vm;
; SOURCE LINE # 595
MOV DPTR,#rcvReport+02H
MOVX A,@DPTR
MOV DPTR,#UPSD_xreg+0E2H
MOVX @DPTR,A
; currentCmd.u.cmd = 0;
; SOURCE LINE # 596
CLR A
?C0111:
; break;
; SOURCE LINE # 597
SJMP ?C0112
;
; case CMD_SET_REGS:
; SOURCE LINE # 599
?C0054:
; UPSD_xreg.PAGE = rcvReport.u.setRegs.page;
; SOURCE LINE # 600
MOV DPTR,#rcvReport+01H
MOVX A,@DPTR
MOV DPTR,#UPSD_xreg+0E0H
MOVX @DPTR,A
; UPSD_xreg.VM = rcvReport.u.setRegs.vm;
; SOURCE LINE # 601
MOV DPTR,#rcvReport+02H
MOVX A,@DPTR
MOV DPTR,#UPSD_xreg+0E2H
MOVX @DPTR,A
; currentCmd.u.cmd = 0;
; SOURCE LINE # 602
CLR A
?C0112:
MOV DPTR,#currentCmd
MOVX @DPTR,A
; break;
; SOURCE LINE # 603
RET
;
; default:
; SOURCE LINE # 605
?C0055:
; // Prepare first segment of any response to go back to host
; PrepareTransmitSegment(0);
; SOURCE LINE # 607
CLR A
MOV R7,A
LCALL _PrepareTransmitSegment
; break;
; SOURCE LINE # 608
; }
; SOURCE LINE # 609
; }
; SOURCE LINE # 610
; }
; SOURCE LINE # 611
?C0056:
RET
; END OF OnReportReceived
;
;
;
;
;
;
;
;
;
;
;
;
; static BOOL HandleReport()
RSEG ?PR?HandleReport?MAIN
HandleReport:
USING 0
; SOURCE LINE # 624
; /******************************************************************************
; Function : static BOOL HandleReport()
; Parameters : none
; Description: Handles HID Get_Report and Set_Report SETUP packets.
; Returns TRUE if the SETUP packet is a Get_Report or Set_Report
; request; else returns FALSE.
; ******************************************************************************/
; {
; SOURCE LINE # 632
; // If it is a HID Set_Report request...
; if ((setupPacket.bmRequestType == CLASS_INTERFACE_TO_DEVICE)
; SOURCE LINE # 634
MOV DPTR,#setupPacket
MOVX A,@DPTR
MOV R6,A
CJNE A,#021H,?C0057
INC DPTR
MOVX A,@DPTR
CJNE A,#09H,?C0057
; && (setupPacket.bRequest == HID_SET_REPORT))
; {
; SOURCE LINE # 636
; rcvIndex = 0; // Prepare to receive report
; SOURCE LINE # 637
CLR A
MOV rcvIndex,A
; return TRUE;
; SOURCE LINE # 638
MOV R7,#01H
RET
; }
; SOURCE LINE # 639
?C0057:
; // Else if it is a HID Get_Report request ...
; else if ((setupPacket.bmRequestType == CLASS_INTERFACE_TO_HOST)
; SOURCE LINE # 641
MOV A,R6
XRL A,#0A1H
JNZ ?C0059
MOV DPTR,#setupPacket+01H
MOVX A,@DPTR
CJNE A,#01H,?C0059
; && (setupPacket.bRequest == HID_GET_REPORT))
; {
; SOURCE LINE # 643
; // Transmit first segment of response (should be already prepared)
; UCON0 &= ~uTSEQ0;
; SOURCE LINE # 645
ANL UCON0,#07FH
; TransmitDataEP0(txReport.u.buffer, EP0_SIZE);
; SOURCE LINE # 646
MOV R3,#01H
MOV R2,#HIGH (txReport)
MOV R1,#LOW (txReport)
MOV R5,#08H
MOV R4,#00H
LCALL _TransmitDataEP0
;
; txIndex = EP0_SIZE; // Prepare next segment while first one is going out
; SOURCE LINE # 648
MOV txIndex,#08H
; PrepareTransmitSegment(txIndex);
; SOURCE LINE # 649
MOV R7,txIndex
LCALL _PrepareTransmitSegment
; return TRUE;
; SOURCE LINE # 650
MOV R7,#01H
RET
; }
; SOURCE LINE # 651
?C0059:
;
; return FALSE;
; SOURCE LINE # 653
MOV R7,#00H
; }
; SOURCE LINE # 654
?C0058:
RET
; END OF HandleReport
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
; bdata char USB_ISR_FLAGS = 0;
; sbit GoOnResume = USB_ISR_FLAGS ^ 0;
; sbit GoOnSuspend = USB_ISR_FLAGS ^ 7;
;
;
;
; static void OnUSBSuspend()
RSEG ?PR?OnUSBSuspend?MAIN
OnUSBSuspend:
USING 0
; SOURCE LINE # 686
; /******************************************************************************
; Function : static void OnUSBSuspend()
; Parameters : none
; Description: service routine for USB Suspend event
; ******************************************************************************/
; {
; SOURCE LINE # 692
;
; data char bie,biea;
;
; printfLCD("\n* SUSPEND MODE *\n");
; SOURCE LINE # 696
MOV R3,#0FFH
MOV R2,#HIGH (?SC_0)
MOV R1,#LOW (?SC_0)
LCALL _printfLCD
; printfLCD("\rCPU in Idle mode");
; SOURCE LINE # 697
MOV R3,#0FFH
MOV R2,#HIGH (?SC_19)
MOV R1,#LOW (?SC_19)
LCALL _printfLCD
;
;
; bie = IE;
; SOURCE LINE # 700
MOV bie?955,IE
; biea = IEA;
; SOURCE LINE # 701
MOV biea?956,IEA
;
; IEA = 1; // disable all INTs except USB
; SOURCE LINE # 703
MOV IEA,#01H
; IE = 128; // disable all INTs except USB
; SOURCE LINE # 704
MOV IE,#080H
;
; SUSPND = 1; //Enter suspend mode for uPSD
; SOURCE LINE # 706
SETB SUSPND
; GoOnSuspend = 0; //clear global Suspend flag
; SOURCE LINE # 707
CLR GoOnSuspend
; // entering SUSPEND or setting SUSPNDF causes to top the clocks to the USB
; // and causes the USB module to enter Suspend Mode.
; UIEN |= uRESUMIE; // enable resume INT
; SOURCE LINE # 710
ORL UIEN,#01H
; PCON |= 1; //Enter Idle mode
; SOURCE LINE # 711
ORL PCON,#01H
;
; // here the uPSD sleeps and waits for the next INT
; SUSPND = 0; //clear the flag
; SOURCE LINE # 714
CLR SUSPND
;
; IE = bie;
; SOURCE LINE # 716
MOV IE,bie?955
; IEA = biea;
; SOURCE LINE # 717
MOV IEA,biea?956
;
; UIEN &= ~uRESUMIE; // disable resume INT
; SOURCE LINE # 719
ANL UIEN,#0FEH
; RESUMF = 0; //clear the flag
; SOURCE LINE # 720
CLR RESUMF
; printfLCD("\r \n"); //clear display
; SOURCE LINE # 721
MOV R3,#0FFH
MOV R2,#HIGH (?SC_37)
MOV R1,#LOW (?SC_37)
LCALL _printfLCD
; printfLCD("\r \r"); //clear display
; SOURCE LINE # 722
MOV R3,#0FFH
MOV R2,#HIGH (?SC_56)
MOV R1,#LOW (?SC_56)
LCALL _printfLCD
; printfLCD("\r*USB DEMO V.2.1*\n"); //dislay the string
; SOURCE LINE # 723
MOV R3,#0FFH
MOV R2,#HIGH (?SC_75)
MOV R1,#LOW (?SC_75)
LJMP _printfLCD
; END OF OnUSBSuspend
; }
;
;
; void main() using 0
RSEG ?PR?main?MAIN
main:
USING 0
PUSH PSW
MOV PSW,#00H
; SOURCE LINE # 727
; /******************************************************************************
; Function : void main()
; Parameters : none
; Description: Main routine, start of your program
; ******************************************************************************/
; {
; data char c;
;
; // Initialize globals
; // The following two lines can be deleted if no USB Disconnect feature is implemented
; #ifdef DisconnectOnDemand
; UPSD_xreg.DIRECTION_B |= 0x03; // set PSD-PB0,1 DDR high
; UPSD_xreg.DATAOUT_B = 0x03; // disable LED2, low level active /01/02
; #endif
;
; memset((uchar*)&status, 0, sizeof(status));
; SOURCE LINE # 743
MOV R6,#00H
MOV R7,#040H
MOV R5,#00H
MOV R3,#01H
MOV R2,#HIGH (status)
MOV R1,#LOW (status)
LCALL ?C?MEMSET
; memset((uchar*)¤tCmd, 0, sizeof(currentCmd));
; SOURCE LINE # 744
MOV R6,#00H
MOV R7,#040H
MOV R5,#00H
MOV R3,#01H
MOV R2,#HIGH (currentCmd)
MOV R1,#LOW (currentCmd)
LCALL ?C?MEMSET
; counter = 0;
; SOURCE LINE # 745
CLR A
MOV counter,A
MOV counter+01H,A
;
; // We are not currently transmitting or receiving feature/input reports
; rcvIndex = CMD_SIZE;
; SOURCE LINE # 748
MOV rcvIndex,#040H
; txIndex = CMD_SIZE;
; SOURCE LINE # 749
MOV txIndex,#040H
;
; // Disable watchdog
; WDKEY=WD_OFF;
; SOURCE LINE # 752
MOV WDKEY,#055H
;
; initXREG(); // init extended regs in xdata
; SOURCE LINE # 754
LCALL initXREG
; initLCD();
; SOURCE LINE # 755
LCALL initLCD
; UsbInitialize(); // Initialize USB,
; SOURCE LINE # 756
LCALL UsbInitialize
;
;
;
; /* ONLY USB must have the highest priority to assure good respose
; and proper processing of all requests.
; */
; IP = 0; // USB must have the highest priority !!!
; SOURCE LINE # 763
CLR A
MOV IP,A
; IPA = 1; // USB must have the highest priority !!!
; SOURCE LINE # 764
MOV IPA,#01H
; EA = 0;
; SOURCE LINE # 765
CLR EA
;
; IEA |= 0x80; // Enable DDC Interrupt - Priority is user TBD
; SOURCE LINE # 767
ORL IEA,#080H
;
; EA = 1; // Enable INTs
; SOURCE LINE # 769
SETB EA
;
; printfLCD("\r*USB DEMO V.2.1*\n"); //dislay the string
; SOURCE LINE # 771
MOV R3,#0FFH
MOV R2,#HIGH (?SC_75)
MOV R1,#LOW (?SC_75)
LCALL _printfLCD
;
;
; #ifdef DisconnectOnDemand
; ReConnectUSB(); // Enable when DisconnectOnDemand feature is implemented
; #endif
;
; LCD_delay_ms(1000); //wait
; SOURCE LINE # 778
MOV R7,#0E8H
MOV R6,#03H
LCALL _LCD_delay_ms
?C0062:
;
;
; while (1)
; SOURCE LINE # 781
; {
; SOURCE LINE # 782
; // Indicate which flash we are running out of: main (M) or boot (B)
; c = ((UPSD_xreg.VM == 0x92) ? 'B' : 'M');
; SOURCE LINE # 784
MOV DPTR,#UPSD_xreg+0E2H
MOVX A,@DPTR
CJNE A,#092H,?C0064
MOV R7,#042H
SJMP ?C0065
?C0064:
MOV R7,#04DH
?C0065:
MOV c?1057,R7
; printfLCD("\r%B %x %x%c %W\r", g_debugTimer2_INT_CNT, USB_ISR_FLAGS, currentCmd.u.cmd,c, g_debugUSB_INT_CNT);
; SOURCE LINE # 785
MOV R3,#0FFH
MOV R2,#HIGH (?SC_94)
MOV R1,#LOW (?SC_94)
MOV DPTR,#?_printfLCD?BYTE+03H
MOV A,g_debugTimer2_INT_CNT
MOVX @DPTR,A
INC DPTR
MOV A,USB_ISR_FLAGS
MOVX @DPTR,A
MOV DPTR,#currentCmd
MOVX A,@DPTR
MOV DPTR,#?_printfLCD?BYTE+05H
MOVX @DPTR,A
INC DPTR
MOV A,c?1057
MOVX @DPTR,A
INC DPTR
MOV A,g_debugUSB_INT_CNT
MOVX @DPTR,A
INC DPTR
MOV A,g_debugUSB_INT_CNT+01H
MOVX @DPTR,A
LCALL _printfLCD
;
; // Enable the following lines if you plan to use the DisconnectOnDemand feature
; // and if you have the HW modifications on your DK3200 kit (see appnote).
;
; #ifdef DisconnectOnDemand
; // DisconnectOnDemand feature
; if ((UPSD_xreg.DATAIN_B & 0x04)==0) // check Swith ONE
; {
; ReConnectUSB(); // Disconnect USB when pressed
; }
; #endif
;
; }
; SOURCE LINE # 798
SJMP ?C0062
; END OF main
CSEG AT 00033H
LJMP UsbIsr
; }
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -