📄 upsd3400_usb_app.src
字号:
; The TRANSFER LENGTH field specifies the number of contiguous logical blocks of
; data that shall be transferred. A TRANSFER LENGTH of zero indicates that no logical
; blocks shall be transferred. This condition shall not be considered an error.
; Any other value indicates the number of logical blocks that shall be transferred.
; */
; LogicalBlockAddr = *(unsigned long int *)&gbCBWCB[2];
; SOURCE LINE # 513
MOV LogicalBlockAddr?655+03H,gbCBWCB+05H
MOV LogicalBlockAddr?655+02H,gbCBWCB+04H
MOV LogicalBlockAddr?655+01H,gbCBWCB+03H
MOV LogicalBlockAddr?655,gbCBWCB+02H
;
; PhysicalDataAddr = ((unsigned int )(LogicalBlockAddr << 9)) | 0x8000;
; SOURCE LINE # 515
MOV R7,LogicalBlockAddr?655+03H
MOV R6,LogicalBlockAddr?655+02H
MOV R5,LogicalBlockAddr?655+01H
MOV R4,LogicalBlockAddr?655
MOV R0,#09H
LCALL ?C?LSHL
MOV A,R6
ORL A,#080H
MOV PhysicalDataAddr,A
MOV PhysicalDataAddr+01H,R7
; UPSD_xreg.PAGE = (unsigned char)(LogicalBlockAddr >> 6);
; SOURCE LINE # 516
MOV R7,LogicalBlockAddr?655+03H
MOV R6,LogicalBlockAddr?655+02H
MOV R5,LogicalBlockAddr?655+01H
MOV R4,LogicalBlockAddr?655
MOV R0,#06H
LCALL ?C?ULSHR
MOV DPTR,#UPSD_xreg+0E0H
MOV A,R7
MOVX @DPTR,A
; TransferLength = *(unsigned int *)&gbCBWCB[7];
; SOURCE LINE # 517
MOV TransferLength,gbCBWCB+07H
MOV TransferLength+01H,gbCBWCB+08H
; TransferLength = TransferLength*8;
; SOURCE LINE # 518
MOV A,TransferLength+01H
MOV R6,TransferLength
MOV R0,#03H
?C0122:
CLR C
RLC A
XCH A,R6
RLC A
XCH A,R6
DJNZ R0,?C0122
MOV TransferLength+01H,A
MOV TransferLength,R6
;
; gbBulkPipeStage = BS_DATA_PHASE;
; SOURCE LINE # 520
MOV gbBulkPipeStage,#01H
;
; if (gbCBWFlags & 0x80) // READ command
; SOURCE LINE # 522
MOV A,gbCBWFlags
JNB ACC.7,?C0056
; {
; SOURCE LINE # 523
; ReadBufferFromFlash();
; SOURCE LINE # 524
LCALL ReadBufferFromFlash
; }
; SOURCE LINE # 525
; }
; SOURCE LINE # 526
?C0056:
RET
; END OF DoReadWrite
;
; void OnRequestSense(void)
RSEG ?PR?OnRequestSense?UPSD3400_USB_APP
OnRequestSense:
; SOURCE LINE # 528
; /*--------------------------------------------------------------------
; Function : void OnRequestSense()
; Parameters : none
; Description: Handler for RequestSense command
; The REQUEST SENSE command requests that the device server
; transfer sense data to the application client.
; ---------------------------------------------------------------------*/
; {
; SOURCE LINE # 536
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 537
MOV USEL,#01H
;
; USB_FIFO[ 0] = 0x70;
; SOURCE LINE # 539
MOV DPTR,#07000H
MOV A,#070H
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x00;
; SOURCE LINE # 540
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x03; //sense key
; SOURCE LINE # 541
INC DPTR
MOV A,#03H
MOVX @DPTR,A
; USB_FIFO[ 3] = 0x00;
; SOURCE LINE # 542
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 4] = 0x00;
; SOURCE LINE # 543
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 5] = 0x00;
; SOURCE LINE # 544
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 6] = 0x00;
; SOURCE LINE # 545
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 7] = 0x0A; //additional Length
; SOURCE LINE # 546
INC DPTR
MOV A,#0AH
MOVX @DPTR,A
; USB_FIFO[ 8] = 0x00;
; SOURCE LINE # 547
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 9] = 0x00;
; SOURCE LINE # 548
INC DPTR
MOVX @DPTR,A
; USB_FIFO[10] = 0x00;
; SOURCE LINE # 549
INC DPTR
MOVX @DPTR,A
; USB_FIFO[11] = 0x00;
; SOURCE LINE # 550
INC DPTR
MOVX @DPTR,A
; USB_FIFO[12] = 0x30; //ASC
; SOURCE LINE # 551
INC DPTR
MOV A,#030H
MOVX @DPTR,A
; USB_FIFO[13] = 0x01; //ASCQ
; SOURCE LINE # 552
INC DPTR
MOV A,#01H
MOVX @DPTR,A
; USB_FIFO[14] = 0x00;
; SOURCE LINE # 553
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[15] = 0x00;
; SOURCE LINE # 554
INC DPTR
MOVX @DPTR,A
; USB_FIFO[16] = 0x00;
; SOURCE LINE # 555
INC DPTR
MOVX @DPTR,A
; USB_FIFO[17] = 0x00;
; SOURCE LINE # 556
INC DPTR
MOVX @DPTR,A
;
; USIZE = 18;
; SOURCE LINE # 558
MOV USIZE,#012H
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 560
MOV gbBulkPipeStage,#02H
; }
; SOURCE LINE # 561
RET
; END OF OnRequestSense
;
; void OnInquiry(void)
RSEG ?PR?OnInquiry?UPSD3400_USB_APP
OnInquiry:
; SOURCE LINE # 563
; /*--------------------------------------------------------------------
; Function : void OnInquiry()
; Parameters : none
; Description: Handler for Inquiry command
; ---------------------------------------------------------------------*/
; {
; SOURCE LINE # 569
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 570
MOV USEL,#01H
; USB_FIFO[ 0] = 0x00;
; SOURCE LINE # 571
MOV DPTR,#07000H
CLR A
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x80; //b7 = RMB = 1 if the medium is removable
; SOURCE LINE # 572
INC DPTR
MOV A,#080H
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x00;
; SOURCE LINE # 573
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 3] = 0x01;
; SOURCE LINE # 574
INC DPTR
INC A
MOVX @DPTR,A
;
; USB_FIFO[ 4] = 36-4; //additional Length (n-4)
; SOURCE LINE # 576
INC DPTR
MOV A,#020H
MOVX @DPTR,A
; USB_FIFO[ 5] = 0x80;
; SOURCE LINE # 577
INC DPTR
MOV A,#080H
MOVX @DPTR,A
; USB_FIFO[ 6] = 0x00;
; SOURCE LINE # 578
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 7] = 0x01;
; SOURCE LINE # 579
INC DPTR
INC A
MOVX @DPTR,A
;
; #ifdef DK3400
; USB_FIFO[ 8] = 'S'; //Vendor Information
; SOURCE LINE # 582
INC DPTR
MOV A,#053H
MOVX @DPTR,A
; USB_FIFO[ 9] = 'T';
; SOURCE LINE # 583
INC DPTR
INC A
MOVX @DPTR,A
; USB_FIFO[10] = ' ';
; SOURCE LINE # 584
INC DPTR
MOV A,#020H
MOVX @DPTR,A
; USB_FIFO[11] = ' ';
; SOURCE LINE # 585
INC DPTR
MOVX @DPTR,A
; USB_FIFO[12] = ' ';
; SOURCE LINE # 586
INC DPTR
MOVX @DPTR,A
; USB_FIFO[13] = ' ';
; SOURCE LINE # 587
INC DPTR
MOVX @DPTR,A
; USB_FIFO[14] = ' ';
; SOURCE LINE # 588
INC DPTR
MOVX @DPTR,A
; USB_FIFO[15] = ' ';
; SOURCE LINE # 589
INC DPTR
MOVX @DPTR,A
;
; USB_FIFO[16] = 'D'; //Product Identification
; SOURCE LINE # 591
INC DPTR
MOV A,#044H
MOVX @DPTR,A
; USB_FIFO[17] = 'K';
; SOURCE LINE # 592
INC DPTR
MOV A,#04BH
MOVX @DPTR,A
; USB_FIFO[18] = '3';
; SOURCE LINE # 593
INC DPTR
MOV A,#033H
MOVX @DPTR,A
; USB_FIFO[19] = '4';
; SOURCE LINE # 594
INC DPTR
INC A
MOVX @DPTR,A
; USB_FIFO[20] = '0';
; SOURCE LINE # 595
INC DPTR
MOV A,#030H
MOVX @DPTR,A
; USB_FIFO[21] = '0';
; SOURCE LINE # 596
INC DPTR
MOVX @DPTR,A
; USB_FIFO[22] = ' ';
; SOURCE LINE # 597
INC DPTR
MOV A,#020H
MOVX @DPTR,A
; USB_FIFO[23] = 'D';
; SOURCE LINE # 598
INC DPTR
MOV A,#044H
MOVX @DPTR,A
; USB_FIFO[24] = 'e';
; SOURCE LINE # 599
INC DPTR
MOV A,#065H
MOVX @DPTR,A
; USB_FIFO[25] = 'm';
; SOURCE LINE # 600
INC DPTR
MOV A,#06DH
MOVX @DPTR,A
; USB_FIFO[26] = 'o';
; SOURCE LINE # 601
INC DPTR
MOV A,#06FH
MOVX @DPTR,A
; USB_FIFO[27] = ' ';
; SOURCE LINE # 602
INC DPTR
MOV A,#020H
MOVX @DPTR,A
; USB_FIFO[28] = ' ';
; SOURCE LINE # 603
INC DPTR
MOVX @DPTR,A
; USB_FIFO[29] = ' ';
; SOURCE LINE # 604
INC DPTR
MOVX @DPTR,A
; USB_FIFO[30] = ' ';
; SOURCE LINE # 605
INC DPTR
MOVX @DPTR,A
; USB_FIFO[31] = ' ';
; SOURCE LINE # 606
INC DPTR
MOVX @DPTR,A
;
; USB_FIFO[32] = '1'; //Product Revision Level
; SOURCE LINE # 608
INC DPTR
MOV A,#031H
MOVX @DPTR,A
; USB_FIFO[33] = '0';
; SOURCE LINE # 609
INC DPTR
DEC A
MOVX @DPTR,A
; USB_FIFO[34] = '0';
; SOURCE LINE # 610
INC DPTR
MOVX @DPTR,A
; USB_FIFO[35] = '1';
; SOURCE LINE # 611
INC DPTR
INC A
MOVX @DPTR,A
;
; USIZE = 36;
; SOURCE LINE # 613
MOV USIZE,#024H
;
; #else //DK3420
; USB_FIFO[ 8] = 'S'; //Vendor Information
; USB_FIFO[ 9] = 'T';
; USB_FIFO[10] = ' ';
; USB_FIFO[11] = ' ';
; USB_FIFO[12] = ' ';
; USB_FIFO[13] = ' ';
; USB_FIFO[14] = ' ';
; USB_FIFO[15] = ' ';
;
; USB_FIFO[16] = 'D'; //Product Identification
; USB_FIFO[17] = 'K';
; USB_FIFO[18] = '3';
; USB_FIFO[19] = '4';
; USB_FIFO[20] = '2';
; USB_FIFO[21] = '0';
; USB_FIFO[22] = ' ';
; USB_FIFO[23] = 'D';
; USB_FIFO[24] = 'e';
; USB_FIFO[25] = 'm';
; USB_FIFO[26] = 'o';
; USB_FIFO[27] = ' ';
; USB_FIFO[28] = ' ';
; USB_FIFO[29] = ' ';
; USB_FIFO[30] = ' ';
; USB_FIFO[31] = ' ';
;
; USB_FIFO[32] = '1'; //Product Revision Level
; USB_FIFO[33] = '0';
; USB_FIFO[34] = '0';
; USB_FIFO[35] = '1';
;
; USIZE = 36;
; #endif
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 650
MOV gbBulkPipeStage,#02H
; }
; SOURCE LINE # 651
RET
; END OF OnInquiry
;
; void OnModeSelect6(void)
RSEG ?PR?OnModeSelect6?UPSD3400_USB_APP
OnModeSelect6:
; SOURCE LINE # 653
; /******************************************************************************
; Function : void OnModeSelect6()
; Parameters : (void)
; Description: The MODE SELECT(6) command provides a means for
; an initiator to specify device parameters to a RBC device.
; RBC devices shall also implement the MODE SENSE(6) command.
; ******************************************************************************/
; {
; SOURCE LINE # 661
; gbCSWStatus = FAIL;
; SOURCE LINE # 662
MOV gbCSWStatus,#01H
; ReturnCSW(); // return status
; SOURCE LINE # 663
LJMP ReturnCSW
; END OF OnModeSelect6
; }
;
; void OnModeSense6(void)
RSEG ?PR?OnModeSense6?UPSD3400_USB_APP
OnModeSense6:
; SOURCE LINE # 666
; /******************************************************************************
; Function : void OnModeSense6()
; Parameters : none
; Description: Handler for ModeSense6 command
; The MODE SENSE(6) command provides a means for a device server
; to report parameters to an application client.
; It is a complementary command to the MODE SELECT(6) command.
; Device servers that implement the MODE SENSE(6) command
; shall also implement the MODE SELECT(6) command.
; ******************************************************************************/
; {
; SOURCE LINE # 677
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 678
MOV USEL,#01H
;
; USB_FIFO[ 0] = 0x03;
; SOURCE LINE # 680
MOV DPTR,#07000H
MOV A,#03H
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x00;
; SOURCE LINE # 681
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x00;
; SOURCE LINE # 682
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 3] = 0x00;
; SOURCE LINE # 683
INC DPTR
MOVX @DPTR,A
;
; USIZE = 4;
; SOURCE LINE # 685
MOV USIZE,#04H
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 687
MOV gbBulkPipeStage,#02H
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -