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

📄 main.src

📁 DK3200 USB DEMO for KEIL C
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	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*)&currentCmd, 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 + -