📄 f34x_msd_usb_std_req.src
字号:
; {
; SOURCE LINE # 397
?C0097:
; POLL_WRITE_BYTE(E0CSR, rbSOPRDY); // Service Setup Packet
; SOURCE LINE # 398
MOV A,USB0ADR
JB ACC.7,?C0097
?C0098:
; Ep_Status[0] = EP_TX; // Put endpoint in transmit mode
; SOURCE LINE # 399
; Data_Sent = 0; // Reset Data Sent counter
; SOURCE LINE # 400
LCALL L?0156
; }
; SOURCE LINE # 401
; }
; SOURCE LINE # 402
?C0099:
RET
; END OF Get_Descriptor
;
;
; //----------------------------------------------------------------------------
; // Get_Configuration
; //----------------------------------------------------------------------------
; //
; // This routine returns current configuration value
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Get_Configuration(void)
RSEG ?PR?Get_Configuration?F34X_MSD_USB_STD_REQ
Get_Configuration:
USING 0
; SOURCE LINE # 415
; {
; SOURCE LINE # 416
; if ((Setup.bmRequestType != OUT_DEVICE) ||// This request must be directed to the device
; SOURCE LINE # 417
MOV DPTR,#Setup
MOVX A,@DPTR
XRL A,#080H
JNZ ?C0101
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0101
INC DPTR
MOVX A,@DPTR
JNZ ?C0101
INC DPTR
MOVX A,@DPTR
JNZ ?C0101
INC DPTR
MOVX A,@DPTR
JNZ ?C0101
INC DPTR
MOVX A,@DPTR
JNZ ?C0101
INC DPTR
MOVX A,@DPTR
XRL A,#01H
JZ ?C0100
?C0101:
; Setup.wValue.c[MSB] || Setup.wValue.c[LSB]||// with value word set to zero
; Setup.wIndex.c[MSB] || Setup.wIndex.c[LSB]||// and index set to zero
; Setup.wLength.c[MSB] || (Setup.wLength.c[LSB] != 1))// and setup length set to one
; {
; SOURCE LINE # 421
; Force_Stall(); // Otherwise send a stall to host
; SOURCE LINE # 422
LCALL Force_Stall
; }
; SOURCE LINE # 423
SJMP ?C0102
?C0100:
;
; else
; {
; SOURCE LINE # 426
; if (USB_State == DEV_CONFIGURED) // If the device is configured, then return value 0x01
; SOURCE LINE # 427
MOV DPTR,#USB_State
MOVX A,@DPTR
MOV R7,A
CJNE A,#04H,?C0103
; { // since this software only supports one configuration
; SOURCE LINE # 428
; Data_Ptr = (BYTE*)&ONES_PACKET;
; SOURCE LINE # 429
MOV DPTR,#Data_Ptr
LCALL L?0164
; Data_Size = 1;
; SOURCE LINE # 430
LCALL L?0165
INC A
MOVX @DPTR,A
; }
; SOURCE LINE # 431
?C0103:
; if (USB_State == DEV_ADDRESS) // If the device is in address state, it is not
; SOURCE LINE # 432
MOV A,R7
CJNE A,#03H,?C0102
; { // configured, so return 0x00
; SOURCE LINE # 433
; Data_Ptr = (BYTE*)&ZERO_PACKET;
; SOURCE LINE # 434
LCALL L?0158
; Data_Size = 1;
; SOURCE LINE # 435
LCALL L?0166
INC A
MOVX @DPTR,A
; }
; SOURCE LINE # 436
; }
; SOURCE LINE # 437
?C0102:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 438
LCALL L?0162
JZ ?C0108
; {
; SOURCE LINE # 439
?C0106:
; POLL_WRITE_BYTE(E0CSR, rbSOPRDY); // Set Serviced Out Packet bit
; SOURCE LINE # 440
MOV A,USB0ADR
JB ACC.7,?C0106
?C0107:
; Ep_Status[0] = EP_TX; // Put endpoint into transmit mode
; SOURCE LINE # 441
; Data_Sent = 0; // Reset Data Sent counter to zero
; SOURCE LINE # 442
LCALL L?0157
; }
; SOURCE LINE # 443
; }
; SOURCE LINE # 444
?C0108:
RET
; END OF Get_Configuration
;
; //----------------------------------------------------------------------------
; // Set_Configuration
; //----------------------------------------------------------------------------
; //
; // This routine allows host to change current
; // device configuration value
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Set_Configuration(void)
RSEG ?PR?Set_Configuration?F34X_MSD_USB_STD_REQ
Set_Configuration:
USING 0
; SOURCE LINE # 457
; {
; SOURCE LINE # 458
;
; if ((USB_State == DEV_DEFAULT) ||// Device must be addressed before configured
; SOURCE LINE # 460
MOV DPTR,#USB_State
MOVX A,@DPTR
XRL A,#02H
JZ ?C0110
MOV DPTR,#Setup
MOVX A,@DPTR
JNZ ?C0110
MOV DPTR,#Setup+04H
MOVX A,@DPTR
JNZ ?C0110
INC DPTR
MOVX A,@DPTR
JNZ ?C0110
INC DPTR
MOVX A,@DPTR
JNZ ?C0110
INC DPTR
MOVX A,@DPTR
JNZ ?C0110
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0110
INC DPTR
MOVX A,@DPTR
SETB C
SUBB A,#01H
JC ?C0109
?C0110:
; (Setup.bmRequestType != IN_DEVICE) ||// and request recipient must be the device
; Setup.wIndex.c[MSB] || Setup.wIndex.c[LSB]||// the index and length words must be zero
; Setup.wLength.c[MSB] || Setup.wLength.c[LSB] ||
; Setup.wValue.c[MSB] || (Setup.wValue.c[LSB] > 1))// This software only supports config = 0,1
; {
; SOURCE LINE # 465
; Force_Stall(); // Send stall if setup data is invalid
; SOURCE LINE # 466
LCALL Force_Stall
; }
; SOURCE LINE # 467
SJMP ?C0111
?C0109:
;
; else
; {
; SOURCE LINE # 470
; if (Setup.wValue.c[LSB] > 0) // Any positive configuration request
; SOURCE LINE # 471
MOV DPTR,#Setup+03H
MOVX A,@DPTR
SETB C
SUBB A,#00H
JC ?C0112
; { // results in configuration being set to 1
; SOURCE LINE # 472
; USB_State = DEV_CONFIGURED;
; SOURCE LINE # 473
MOV DPTR,#USB_State
MOV A,#04H
MOVX @DPTR,A
; Ep_Status[1] = EP_IDLE; // Set endpoint status to idle (enabled)
; SOURCE LINE # 474
CLR A
MOV DPTR,#Ep_Status+01H
MOVX @DPTR,A
; Ep_Status[2] = EP_IDLE;
; SOURCE LINE # 475
INC DPTR
MOVX @DPTR,A
?C0113:
; POLL_WRITE_BYTE(INDEX, EP1_IN_IDX); // Change index to endpoint 1
; SOURCE LINE # 476
MOV A,USB0ADR
JB ACC.7,?C0113
?C0114:
LCALL L?0174
?C0115:
; POLL_WRITE_BYTE(EINCSR2, rbInDIRSEL); // Set DIRSEL to indicate endpoint 1 is IN
; SOURCE LINE # 477
MOV A,USB0ADR
JB ACC.7,?C0115
?C0116:
MOV USB0ADR,#012H
MOV USB0DAT,#020H
?C0117:
; // Not necessary for Mass Storage Device (bulk data)
; // Handle_In1(); // Put first data packet on fifo
; //
; POLL_WRITE_BYTE(INDEX, EP0_IDX); // Set index back to endpoint 0
; SOURCE LINE # 481
MOV A,USB0ADR
JB ACC.7,?C0117
?C0118:
MOV USB0ADR,#0EH
CLR A
MOV USB0DAT,A
; }
; SOURCE LINE # 482
SJMP ?C0111
?C0112:
; else
; {
; SOURCE LINE # 484
; USB_State = DEV_ADDRESS; // Unconfigures device by setting state to
; SOURCE LINE # 485
MOV DPTR,#USB_State
MOV A,#03H
MOVX @DPTR,A
; Ep_Status[1] = EP_HALT; // address, and changing endpoint 1 and 2
; SOURCE LINE # 486
MOV DPTR,#Ep_Status+01H
MOVX @DPTR,A
; Ep_Status[2] = EP_HALT; // status to halt
; SOURCE LINE # 487
INC DPTR
MOVX @DPTR,A
; }
; SOURCE LINE # 488
; }
; SOURCE LINE # 489
?C0111:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 490
LCALL L?0162
JZ ?C0123
; {
; SOURCE LINE # 491
?C0121:
; POLL_WRITE_BYTE(E0CSR, (rbSOPRDY | rbDATAEND));
; SOURCE LINE # 492
MOV A,USB0ADR
JB ACC.7,?C0121
?C0122:
LCALL L?0168
; // Indicate setup packet has been serviced
; }
; SOURCE LINE # 494
; }
; SOURCE LINE # 495
?C0123:
RET
; END OF Set_Configuration
;
; //----------------------------------------------------------------------------
; // Get_Interface
; //----------------------------------------------------------------------------
; //
; // This routine returns 0x00, since only one interface
; // is supported by this firmware
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Get_Interface(void)
RSEG ?PR?Get_Interface?F34X_MSD_USB_STD_REQ
Get_Interface:
USING 0
; SOURCE LINE # 508
; {
; SOURCE LINE # 509
;
; if ((USB_State != DEV_CONFIGURED) || // If device is not configured
; SOURCE LINE # 511
LCALL L?0172
JNZ ?C0125
MOV DPTR,#Setup
MOVX A,@DPTR
XRL A,#081H
JNZ ?C0125
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0125
INC DPTR
MOVX A,@DPTR
JNZ ?C0125
INC DPTR
MOVX A,@DPTR
JNZ ?C0125
INC DPTR
MOVX A,@DPTR
JNZ ?C0125
INC DPTR
MOVX A,@DPTR
JNZ ?C0125
INC DPTR
MOVX A,@DPTR
XRL A,#01H
JZ ?C0124
?C0125:
; (Setup.bmRequestType != OUT_INTERFACE) || // or recipient is not an interface
; Setup.wValue.c[MSB] ||Setup.wValue.c[LSB] ||// or non-zero value or index fields
; Setup.wIndex.c[MSB] ||Setup.wIndex.c[LSB] ||// or data length not equal to one
; Setup.wLength.c[MSB] ||(Setup.wLength.c[LSB] != 1))
; {
; SOURCE LINE # 516
; Force_Stall(); // Then return stall due to invalid request
; SOURCE LINE # 517
LCALL Force_Stall
; }
; SOURCE LINE # 518
SJMP ?C0126
?C0124:
;
; else
; {
; SOURCE LINE # 521
; Data_Ptr = (BYTE*)&ZERO_PACKET; // Otherwise, return 0x00 to host
; SOURCE LINE # 522
LCALL L?0159
; Data_Size = 1;
; SOURCE LINE # 523
LCALL L?0166
INC A
MOVX @DPTR,A
; }
; SOURCE LINE # 524
?C0126:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 525
LCALL L?0162
JZ ?C0130
; {
; SOURCE LINE # 526
?C0128:
; POLL_WRITE_BYTE(E0CSR, rbSOPRDY); // Set Serviced Setup packet, put endpoint in transmit
; SOURCE LINE # 527
MOV A,USB0ADR
JB ACC.7,?C0128
?C0129:
; Ep_Status[0] = EP_TX; // mode and reset Data sent counter
; SOURCE LINE # 528
; Data_Sent = 0;
; SOURCE LINE # 529
LCALL L?0157
; }
; SOURCE LINE # 530
; }
; SOURCE LINE # 531
?C0130:
RET
; END OF Get_Interface
;
; //----------------------------------------------------------------------------
; // Set_Interface
; //----------------------------------------------------------------------------
; //
; // This function sets interface if it's supported
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Set_Interface(void)
RSEG ?PR?Set_Interface?F34X_MSD_USB_STD_REQ
Set_Interface:
USING 0
; SOURCE LINE # 543
; {
; SOURCE LINE # 544
; if ((Setup.bmRequestType != IN_INTERFACE) ||// Make sure request is directed at interface
; SOURCE LINE # 545
MOV DPTR,#Setup
MOVX A,@DPTR
XRL A,#01H
JNZ ?C0132
MOV DPTR,#Setup+06H
MOVX A,@DPTR
JNZ ?C0132
INC DPTR
MOVX A,@DPTR
JNZ ?C0132
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0132
INC DPTR
MOVX A,@DPTR
JNZ ?C0132
INC DPTR
MOVX A,@DPTR
JNZ ?C0132
INC DPTR
MOVX A,@DPTR
JZ ?C0131
?C0132:
; Setup.wLength.c[MSB] ||Setup.wLength.c[LSB]||// and all other packet values are set to zero
; Setup.wValue.c[MSB] ||Setup.wValue.c[LSB] ||
; Setup.wIndex.c[MSB] ||Setup.wIndex.c[LSB])
; {
; SOURCE LINE # 549
; Force_Stall(); // Othewise send a stall to host
; SOURCE LINE # 550
LCALL Force_Stall
; }
; SOURCE LINE # 551
?C0131:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 552
LCALL L?0162
JZ ?C0136
; {
; SOURCE LINE # 553
?C0134:
; POLL_WRITE_BYTE(E0CSR, (rbSOPRDY | rbDATAEND));
; SOURCE LINE # 554
MOV A,USB0ADR
JB ACC.7,?C0134
?C0135:
LCALL L?0168
; // Indicate setup packet has been serviced
; }
; SOURCE LINE # 556
; }
; SOURCE LINE # 557
?C0136:
RET
; END OF Set_Interface
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -