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

📄 main.src

📁 DK3200 USB DEMO for KEIL C
💻 SRC
📖 第 1 页 / 共 5 页
字号:
?C0017:
; 
;     if (index == 0)         // First segment needs 0 command byte to indicate data
			; SOURCE LINE # 415
	MOV  	DPTR,#index?449
	MOVX 	A,@DPTR
	JNZ  	?C0018
;      {
			; SOURCE LINE # 416
;       cbData = min(currentCmd.u.rw.nBytes, EP0_SIZE - 1);
			; SOURCE LINE # 417
	CLR  	C
	MOV  	DPTR,#currentCmd+05H
	MOVX 	A,@DPTR
	SUBB 	A,#07H
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JNC  	?C0019
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	SJMP 	?C0020
?C0019:
	MOV  	R7,#07H
?C0020:
	MOV  	cbData?450,R7
;       index = 1;
			; SOURCE LINE # 418
	MOV  	DPTR,#index?449
	MOV  	A,#01H
	MOVX 	@DPTR,A
;       txReport.u.cmd = 0;
			; SOURCE LINE # 419
	CLR  	A
	MOV  	DPTR,#txReport
	MOVX 	@DPTR,A
;      }
			; SOURCE LINE # 420
	SJMP 	?C0021
?C0018:
;     else
;      {
			; SOURCE LINE # 422
;       cbData = min(currentCmd.u.rw.nBytes, EP0_SIZE);
			; SOURCE LINE # 423
	CLR  	C
	MOV  	DPTR,#currentCmd+05H
	MOVX 	A,@DPTR
	SUBB 	A,#08H
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JNC  	?C0022
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	SJMP 	?C0023
?C0022:
	MOV  	R7,#08H
?C0023:
	MOV  	cbData?450,R7
;      }
			; SOURCE LINE # 424
?C0021:
; 
;     ReadBufferFromFlash(
			; SOURCE LINE # 426
	MOV  	DPTR,#currentCmd+02H
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#index?449
	MOVX 	A,@DPTR
	ADD  	A,#LOW (txReport)
	MOV  	R1,A
	CLR  	A
	ADDC 	A,#HIGH (txReport)
	MOV  	R2,A
	MOV  	R3,#01H
	MOV  	DPTR,#?_ReadBufferFromFlash?BYTE+05H
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,cbData?450
	MOVX 	@DPTR,A
	LCALL	_ReadBufferFromFlash
;     currentCmd.u.rw.address,
;     txReport.u.buffer + index,
;     cbData);
; 
;     currentCmd.u.rw.address += cbData;
			; SOURCE LINE # 431
	MOV  	R7,cbData?450
	MOV  	R6,#00H
	MOV  	DPTR,#currentCmd+03H
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOVX 	@DPTR,A
	MOV  	DPTR,#currentCmd+02H
	MOVX 	A,@DPTR
	ADDC 	A,R6
	MOVX 	@DPTR,A
;     if ((currentCmd.u.rw.nBytes -= cbData) == 0)
			; SOURCE LINE # 432
	CLR  	C
	MOV  	DPTR,#currentCmd+05H
	MOVX 	A,@DPTR
	SUBB 	A,R7
	MOV  	R7,A
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	SUBB 	A,R6
	MOV  	R6,A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
	ORL  	A,R6
	JNZ  	?C0015
;      {
			; SOURCE LINE # 433
;       currentCmd.u.cmd = 0;                  // All done
			; SOURCE LINE # 434
	MOV  	DPTR,#currentCmd
	MOVX 	@DPTR,A
;      }
			; SOURCE LINE # 435
; 
;     break;
			; SOURCE LINE # 437
	RET  	
; 
;     default:
			; SOURCE LINE # 439
?C0025:
; 
;     for (i = 0; i < EP0_SIZE; i++)
			; SOURCE LINE # 441
	CLR  	A
	MOV  	i?451,A
?C0026:
;      {
			; SOURCE LINE # 442
;       txReport.u.buffer[index + i] = 0;
			; SOURCE LINE # 443
	MOV  	DPTR,#index?449
	MOVX 	A,@DPTR
	ADD  	A,i?451
	ADD  	A,#LOW (txReport)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (txReport)
	MOV  	DPH,A
	CLR  	A
	MOVX 	@DPTR,A
;      }
			; SOURCE LINE # 444
	INC  	i?451
	MOV  	A,i?451
	CJNE 	A,#08H,?C0026
; 
;     break;
			; SOURCE LINE # 446
;    }
			; SOURCE LINE # 447
;  }
			; SOURCE LINE # 448
?C0015:
	RET  	
; END OF _PrepareTransmitSegment

; 
; 
; 
; 
; 
; static void OnReportTransmitted()

	RSEG  ?PR?OnReportTransmitted?MAIN
OnReportTransmitted:
	USING	0
			; SOURCE LINE # 454
; /******************************************************************************
;  Function   : static void OnReportTransmitted()
;  Parameters : none
;  Description: A complete feature report has been successfully transmitted.
;  ******************************************************************************/
;  {
			; SOURCE LINE # 460
;   if (returnStatus)
			; SOURCE LINE # 461
	MOV  	A,returnStatus
	JZ   	?C0029
;    {
			; SOURCE LINE # 462
;     returnStatus = FALSE;
			; SOURCE LINE # 463
	CLR  	A
	MOV  	returnStatus,A
;    }
			; SOURCE LINE # 464
?C0029:
; 
;   if (currentCmd.u.cmd)                      // If there's more data to go ...
			; SOURCE LINE # 466
	MOV  	DPTR,#currentCmd
	MOVX 	A,@DPTR
	JZ   	?C0031
;    {
			; SOURCE LINE # 467
;     PrepareTransmitSegment(0);             // Prepare first segment of next report
			; SOURCE LINE # 468
	CLR  	A
	MOV  	R7,A
	LCALL	_PrepareTransmitSegment
; 
;    }
			; SOURCE LINE # 470
;  }
			; SOURCE LINE # 471
?C0031:
	RET  	
; END OF OnReportTransmitted

; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; static void OnReportSegmentReceived(uchar cbReceived)

	RSEG  ?PR?_OnReportSegmentReceived?MAIN
_OnReportSegmentReceived:
	USING	0
			; SOURCE LINE # 486
;---- Variable 'cbReceived?652' assigned to Register 'R7' ----
; /******************************************************************************
;  Function   : static void OnReportSegmentReceived()
;  Parameters : (uchar cbReceived)
;  Description: Called as each EP0_SIZE segment of a report is received.
;  ******************************************************************************/
;  {
			; SOURCE LINE # 492
;   data uchar cbData;
;   data uchar index;
;                               // If this is data coming in (not a new command) ...
;   if (rcvReport.u.cmd == 0)
			; SOURCE LINE # 496
	MOV  	DPTR,#rcvReport
	MOVX 	A,@DPTR
	JZ   	$ + 5H
	LJMP 	?C0037
;    {
			; SOURCE LINE # 497
;                          // Process the incoming data based on the current command
;     switch (currentCmd.u.cmd)
			; SOURCE LINE # 499
	MOV  	DPTR,#currentCmd
	MOVX 	A,@DPTR
	ADD  	A,#0FDH
	JZ   	$ + 5H
	LJMP 	?C0037
;      {
			; SOURCE LINE # 500
;       case CMD_WRITE:
			; SOURCE LINE # 501
?C0034:
; 
;       if (rcvIndex == 0)                 // Skip over command byte in first packet
			; SOURCE LINE # 503
	MOV  	A,rcvIndex
	JNZ  	?C0035
;        {
			; SOURCE LINE # 504
;         if (cbReceived <= 1)
			; SOURCE LINE # 505
	MOV  	A,R7
	SETB 	C
	SUBB 	A,#01H
	JNC  	$ + 5H
	LJMP 	?C0037
;          {
			; SOURCE LINE # 506
;           return;                            // Error
;          }
			; SOURCE LINE # 508
?C0036:
; 
;         cbData = min(currentCmd.u.rw.nBytes, cbReceived - 1);
			; SOURCE LINE # 510
	MOV  	A,R7
	ADD  	A,#0FFH
	MOV  	R5,A
	CLR  	A
	ADDC 	A,#0FFH
	MOV  	R4,A
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R3,A
	CLR  	C
	SUBB 	A,R5
	MOV  	A,R2
	SUBB 	A,R4
	JNC  	?C0038
	XCH  	A,R4
	MOV  	A,R2
	XCH  	A,R4
	XCH  	A,R5
	MOV  	A,R3
	XCH  	A,R5
	SJMP 	?C0039
?C0038:
	MOV  	A,R7
	ADD  	A,#0FFH
	MOV  	R5,A
?C0039:
	MOV  	cbData?653,R5
;         index = rcvIndex + 1;
			; SOURCE LINE # 511
	MOV  	A,rcvIndex
	INC  	A
	MOV  	index?654,A
;        }
			; SOURCE LINE # 512
	SJMP 	?C0040
?C0035:
;       else
;        {
			; SOURCE LINE # 514
;         cbData = min(currentCmd.u.rw.nBytes, cbReceived);
			; SOURCE LINE # 515
	MOV  	A,R7
	MOV  	R5,A
	CLR  	C
	MOV  	DPTR,#currentCmd+05H
	MOVX 	A,@DPTR
	SUBB 	A,R5
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JNC  	?C0041
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	SJMP 	?C0042
?C0041:
?C0042:
	MOV  	cbData?653,R7
;         index = rcvIndex;
			; SOURCE LINE # 516
	MOV  	index?654,rcvIndex
;        }
			; SOURCE LINE # 517
?C0040:
; 
;       WriteBufferToFlash(
			; SOURCE LINE # 519
	MOV  	DPTR,#currentCmd+02H
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	A,#LOW (rcvReport)
	ADD  	A,index?654
	MOV  	R1,A
	CLR  	A
	ADDC 	A,#HIGH (rcvReport)
	MOV  	R2,A
	MOV  	R3,#01H
	MOV  	DPTR,#?_WriteBufferToFlash?BYTE+06H
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,cbData?653
	MOVX 	@DPTR,A
	MOV  	DPTR,#currentCmd+01H
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_WriteBufferToFlash
;       currentCmd.u.rw.flash,
;       currentCmd.u.rw.address,
;       rcvReport.u.buffer + index,
;       cbData);
; 
;       currentCmd.u.rw.address += cbData;
			; SOURCE LINE # 525
	MOV  	R7,cbData?653
	MOV  	R6,#00H
	MOV  	DPTR,#currentCmd+03H
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOVX 	@DPTR,A
	MOV  	DPTR,#currentCmd+02H
	MOVX 	A,@DPTR
	ADDC 	A,R6
	MOVX 	@DPTR,A
;       currentCmd.u.rw.nBytes -= cbData;
			; SOURCE LINE # 526
	CLR  	C
	MOV  	DPTR,#currentCmd+05H
	MOVX 	A,@DPTR
	SUBB 	A,R7
	MOV  	R7,A
	MOV  	DPTR,#currentCmd+04H
	MOVX 	A,@DPTR
	SUBB 	A,R6
	MOV  	R6,A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;       if (currentCmd.u.rw.nBytes == 0)
			; SOURCE LINE # 527
	ORL  	A,R6
	JNZ  	?C0037
;        {
			; SOURCE LINE # 528
;         currentCmd.u.cmd = 0;                // All done
			; SOURCE LINE # 529
	MOV  	DPTR,#currentCmd
	MOVX 	@DPTR,A
;         if (currentCmd.u.rw.flash == PRIMARY_FLASH)
			; SOURCE LINE # 530
	INC  	DPTR
	MOVX 	A,@DPTR
	JNZ  	?C0044
;          {
			; SOURCE LINE # 531
;           flash_reset();
			; SOURCE LINE # 532
	LJMP 	flash_reset
;          }
			; SOURCE LINE # 533
?C0044:
;         else
;          {
			; SOURCE LINE # 535
;           flash_boot_reset();
			; SOURCE LINE # 536
	LCALL	flash_boot_reset
;          }
			; SOURCE LINE # 537
;        }
			; SOURCE LINE # 538
; 
;       break;
			; SOURCE LINE # 540
; 
;       default:
			; SOURCE LINE # 542
; 
;       break;
			; SOURCE LINE # 544
;      }
			; SOURCE LINE # 545
;    }
			; SOURCE LINE # 546
;  }
			; SOURCE LINE # 547
?C0037:
	RET  	
; END OF _OnReportSegmentReceived

; 
; 
; 
; 
; 
; 
; 
; 
; static void OnReportReceived()

	RSEG  ?PR?OnReportReceived?MAIN
OnReportReceived:
	USING	0
			; SOURCE LINE # 556
; /******************************************************************************
;  Function   : static void OnReportReceived()
;  Parameters : none
;  Description: Called after all segments of a report have been received.
;  ******************************************************************************/
;  {
			; SOURCE LINE # 562
; // Here you can have SRC routine long as you want ..
; 
; 
;   if (rcvReport.u.cmd)                   // If this is a new command coming in ...
			; SOURCE LINE # 566
	MOV  	DPTR,#rcvReport
	MOVX 	A,@DPTR
	JZ   	?C0056
;    {
			; SOURCE LINE # 567
;     if (rcvReport.u.cmd == CMD_STATUS)
			; SOURCE LINE # 568
	CJNE 	A,#05H,?C0048
;      {
			; SOURCE LINE # 569
;                // For CMD_GET_STATUS, don't overwrite current cmd we're working on
;       returnStatus = TRUE;
			; SOURCE LINE # 571
	MOV  	returnStatus,#01H
;      }
			; SOURCE LINE # 572
	SJMP 	?C0049
?C0048:
;     else
;      {
			; SOURCE LINE # 574
;                                     // Copy into 'current command' global variable
;       memcpy(currentCmd.u.buffer, rcvReport.u.buffer, sizeof(rcvReport));
			; SOURCE LINE # 576
	MOV  	R0,#LOW (currentCmd)
	MOV  	R4,#HIGH (currentCmd)
	MOV  	R5,#01H
	MOV  	R3,#01H
	MOV  	R2,#HIGH (rcvReport)
	MOV  	R1,#LOW (rcvReport)
	MOV  	R6,#00H
	MOV  	R7,#040H
	LCALL	?C?COPY
;       memset((uchar*)&status, 0, sizeof(status));
			; SOURCE LINE # 577
	MOV  	R6,#00H
	MOV  	R7,#040H
	MOV  	R5,#00H

⌨️ 快捷键说明

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