📄 fw.src
字号:
?C0032:
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 258
?C0076:
; }
; SOURCE LINE # 259
; break;
; SOURCE LINE # 260
LJMP ?C0083
; case SC_GET_INTERFACE: // *** Get Interface
; SOURCE LINE # 261
?C0033:
; DR_GetInterface();
; SOURCE LINE # 262
LCALL DR_GetInterface
; break;
; SOURCE LINE # 263
LJMP ?C0021
; case SC_SET_INTERFACE: // *** Set Interface
; SOURCE LINE # 264
?C0034:
; DR_SetInterface();
; SOURCE LINE # 265
LCALL DR_SetInterface
; break;
; SOURCE LINE # 266
LJMP ?C0021
; case SC_SET_CONFIGURATION: // *** Set Configuration
; SOURCE LINE # 267
?C0035:
; DR_SetConfiguration();
; SOURCE LINE # 268
LCALL DR_SetConfiguration
; break;
; SOURCE LINE # 269
LJMP ?C0021
; case SC_GET_CONFIGURATION: // *** Get Configuration
; SOURCE LINE # 270
?C0036:
; DR_GetConfiguration();
; SOURCE LINE # 271
LCALL DR_GetConfiguration
; break;
; SOURCE LINE # 272
LJMP ?C0021
; case SC_GET_STATUS: // *** Get Status
; SOURCE LINE # 273
?C0037:
; if(DR_GetStatus())
; SOURCE LINE # 274
LCALL DR_GetStatus
JC $ + 5H
LJMP ?C0021
; switch(SETUPDAT[0])
; SOURCE LINE # 275
MOV DPTR,#SETUPDAT
MOVX A,@DPTR
ADD A,#07FH
JZ ?C0041
DEC A
JZ ?C0042
ADD A,#02H
JNZ ?C0045
; {
; SOURCE LINE # 276
; case GS_DEVICE: // Device
; SOURCE LINE # 277
?C0040:
; EP0BUF[0] = ((BYTE)Rwuen << 1) | (BYTE)Selfpwr;
; SOURCE LINE # 278
MOV C,Rwuen
CLR A
RLC A
ADD A,ACC
MOV R7,A
MOV C,Selfpwr
CLR A
RLC A
ORL A,R7
; EP0BUF[1] = 0;
; SOURCE LINE # 279
; EP0BCH = 0;
; SOURCE LINE # 280
; EP0BCL = 2;
; SOURCE LINE # 281
; break;
; SOURCE LINE # 282
SJMP ?C0078
; case GS_INTERFACE: // Interface
; SOURCE LINE # 283
?C0041:
; EP0BUF[0] = 0;
; SOURCE LINE # 284
CLR A
MOV DPTR,#EP0BUF
MOVX @DPTR,A
; EP0BUF[1] = 0;
; SOURCE LINE # 285
; EP0BCH = 0;
; SOURCE LINE # 286
; EP0BCL = 2;
; SOURCE LINE # 287
; break;
; SOURCE LINE # 288
SJMP ?C0079
; case GS_ENDPOINT: // End Point
; SOURCE LINE # 289
?C0042:
; EP0BUF[0] = *(BYTE xdata *) epcs(SETUPDAT[4]) & bmEPSTALL;
; SOURCE LINE # 290
MOV DPTR,#SETUPDAT+04H
MOVX A,@DPTR
ANL A,#07EH
MOV R7,A
MOV R6,#00H
MOVX A,@DPTR
SETB C
SUBB A,#080H
MOV R4,#00H
JC ?C0043
MOV R5,#01H
SJMP ?C0044
?C0043:
MOV R5,#00H
?C0044:
MOV A,R4
ORL A,R6
MOV R6,A
MOV A,R5
ORL A,R7
ADD A,#LOW (EPCS_Offset_Lookup_Table)
MOV DPL,A
MOV A,#HIGH (EPCS_Offset_Lookup_Table)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
RLC A
SUBB A,ACC
MOV R6,A
MOV A,R7
ADD A,#0A1H
MOV R7,A
MOV A,R6
ADDC A,#0E6H
MOV DPL,R7
MOV DPH,A
MOVX A,@DPTR
ANL A,#01H
?C0078:
MOV DPTR,#EP0BUF
MOVX @DPTR,A
; EP0BUF[1] = 0;
; SOURCE LINE # 291
CLR A
?C0079:
INC DPTR
MOVX @DPTR,A
; EP0BCH = 0;
; SOURCE LINE # 292
MOV DPTR,#EP0BCH
MOVX @DPTR,A
; EP0BCL = 2;
; SOURCE LINE # 293
MOV DPTR,#EP0BCL
MOV A,#02H
MOVX @DPTR,A
; break;
; SOURCE LINE # 294
LJMP ?C0021
; default: // Invalid Command
; SOURCE LINE # 295
?C0045:
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 296
?C0077:
; }
; SOURCE LINE # 297
; break;
; SOURCE LINE # 298
LJMP ?C0083
; case SC_CLEAR_FEATURE: // *** Clear Feature
; SOURCE LINE # 299
?C0046:
; if(DR_ClearFeature())
; SOURCE LINE # 300
LCALL DR_ClearFeature
JC $ + 5H
LJMP ?C0021
; switch(SETUPDAT[0])
; SOURCE LINE # 301
MOV DPTR,#SETUPDAT
MOVX A,@DPTR
ADD A,#0FEH
JZ ?C0052
ADD A,#02H
JZ $ + 5H
LJMP ?C0021
; {
; SOURCE LINE # 302
; case FT_DEVICE: // Device
; SOURCE LINE # 303
?C0049:
; if(SETUPDAT[2] == 1)
; SOURCE LINE # 304
MOV DPTR,#SETUPDAT+02H
MOVX A,@DPTR
CJNE A,#01H,?C0050
; Rwuen = FALSE; // Disable Remote Wakeup
; SOURCE LINE # 305
CLR Rwuen
LJMP ?C0021
?C0050:
; else
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 307
?C0080:
; break;
; SOURCE LINE # 308
LJMP ?C0083
; case FT_ENDPOINT: // End Point
; SOURCE LINE # 309
?C0052:
; if(SETUPDAT[2] == 0)
; SOURCE LINE # 310
MOV DPTR,#SETUPDAT+02H
MOVX A,@DPTR
JNZ ?C0053
; {
; SOURCE LINE # 311
; *(BYTE xdata *) epcs(SETUPDAT[4]) &= ~bmEPSTALL;
; SOURCE LINE # 312
MOV DPTR,#SETUPDAT+04H
MOVX A,@DPTR
ANL A,#07EH
MOV R7,A
MOV R6,#00H
MOVX A,@DPTR
SETB C
SUBB A,#080H
MOV R4,#00H
JC ?C0054
MOV R5,#01H
SJMP ?C0055
?C0054:
MOV R5,#00H
?C0055:
MOV A,R4
ORL A,R6
MOV R6,A
MOV A,R5
ORL A,R7
ADD A,#LOW (EPCS_Offset_Lookup_Table)
MOV DPL,A
MOV A,#HIGH (EPCS_Offset_Lookup_Table)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
RLC A
SUBB A,ACC
MOV R6,A
MOV A,R7
ADD A,#0A1H
MOV R7,A
MOV A,R6
ADDC A,#0E6H
MOV DPL,R7
MOV DPH,A
MOVX A,@DPTR
ANL A,#0FEH
MOVX @DPTR,A
; EZUSB_RESET_DATA_TOGGLE( SETUPDAT[4] );
; SOURCE LINE # 313
MOV DPTR,#SETUPDAT+04H
MOVX A,@DPTR
ANL A,#080H
RRC A
RRC A
RRC A
ANL A,#01FH
MOV R7,A
MOVX A,@DPTR
ANL A,#0FH
ADD A,R7
MOV DPTR,#TOGCTL
MOVX @DPTR,A
MOVX A,@DPTR
ORL A,#020H
MOVX @DPTR,A
; }
; SOURCE LINE # 314
SJMP ?C0021
?C0053:
; else
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 316
?C0081:
; break;
; SOURCE LINE # 317
SJMP ?C0083
; }
; SOURCE LINE # 318
; break;
; SOURCE LINE # 319
; case SC_SET_FEATURE: // *** Set Feature
; SOURCE LINE # 320
?C0057:
; if(DR_SetFeature())
; SOURCE LINE # 321
LCALL DR_SetFeature
JNC ?C0021
; switch(SETUPDAT[0])
; SOURCE LINE # 322
MOV DPTR,#SETUPDAT
MOVX A,@DPTR
ADD A,#0FEH
JZ ?C0065
ADD A,#02H
JNZ ?C0021
; {
; SOURCE LINE # 323
; case FT_DEVICE: // Device
; SOURCE LINE # 324
?C0060:
; if(SETUPDAT[2] == 1)
; SOURCE LINE # 325
MOV DPTR,#SETUPDAT+02H
MOVX A,@DPTR
CJNE A,#01H,?C0061
; Rwuen = TRUE; // Enable Remote Wakeup
; SOURCE LINE # 326
SETB Rwuen
SJMP ?C0021
?C0061:
; else if(SETUPDAT[2] == 2)
; SOURCE LINE # 327
MOV DPTR,#SETUPDAT+02H
MOVX A,@DPTR
XRL A,#02H
JZ ?C0021
; // Set Feature Test Mode. The core handles this request. However, it is
; // necessary for the firmware to complete the handshake phase of the
; // control transfer before the chip will enter test mode. It is also
; // necessary for FX2 to be physically disconnected (D+ and D-)
; // from the host before it will enter test mode.
; break;
; SOURCE LINE # 333
?C0063:
; else
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 335
?C0082:
; break;
; SOURCE LINE # 336
SJMP ?C0083
; case FT_ENDPOINT: // End Point
; SOURCE LINE # 337
?C0065:
; *(BYTE xdata *) epcs(SETUPDAT[4]) |= bmEPSTALL;
; SOURCE LINE # 338
MOV DPTR,#SETUPDAT+04H
MOVX A,@DPTR
ANL A,#07EH
MOV R7,A
MOV R6,#00H
MOVX A,@DPTR
SETB C
SUBB A,#080H
MOV R4,#00H
JC ?C0066
MOV R5,#01H
SJMP ?C0067
?C0066:
MOV R5,#00H
?C0067:
MOV A,R4
ORL A,R6
MOV R6,A
MOV A,R5
ORL A,R7
ADD A,#LOW (EPCS_Offset_Lookup_Table)
MOV DPL,A
MOV A,#HIGH (EPCS_Offset_Lookup_Table)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
RLC A
SUBB A,ACC
MOV R6,A
MOV A,R7
ADD A,#0A1H
MOV R7,A
MOV A,R6
ADDC A,#0E6H
MOV DPL,R7
MOV DPH,A
; break;
; SOURCE LINE # 339
SJMP ?C0084
; }
; SOURCE LINE # 340
; break;
; SOURCE LINE # 341
; default: // *** Invalid Command
; SOURCE LINE # 342
?C0068:
; if(DR_VendorCmnd())
; SOURCE LINE # 343
LCALL DR_VendorCmnd
JNC ?C0021
; EZUSB_STALL_EP0(); // Stall End Point 0
; SOURCE LINE # 344
?C0083:
MOV DPTR,#EP0CS
?C0084:
MOVX A,@DPTR
ORL A,#01H
MOVX @DPTR,A
; }
; SOURCE LINE # 345
?C0021:
;
; // Acknowledge handshake phase of device request
; EP0CS |= bmHSNAK;
; SOURCE LINE # 348
MOV DPTR,#EP0CS
MOVX A,@DPTR
ORL A,#080H
MOVX @DPTR,A
; }
; SOURCE LINE # 349
RET
; END OF SetupCommand
CSEG AT 00033H
LJMP resume_isr
;
; // Wake-up interrupt handler
; void resume_isr(void) interrupt WKUP_VECT
RSEG ?PR?resume_isr?FW
USING 0
resume_isr:
; SOURCE LINE # 352
; {
; EZUSB_CLEAR_RSMIRQ();
; SOURCE LINE # 354
ANL EICON,#0EFH
; }
; SOURCE LINE # 355
RETI
; END OF resume_isr
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -