📄 f34x_msd_usb_std_req.src
字号:
; case OUT_INTERFACE: // See if recipient was interface
; SOURCE LINE # 99
?C0008:
; if ((USB_State != DEV_CONFIGURED) ||
; SOURCE LINE # 100
MOV DPTR,#USB_State
MOVX A,@DPTR
CJNE A,#04H,?C0010
MOV DPTR,#Setup+04H
MOVX A,@DPTR
JNZ ?C0010
INC DPTR
MOVX A,@DPTR
JZ ?C0009
?C0010:
; Setup.wIndex.c[MSB] || Setup.wIndex.c[LSB])
; // Only valid if device is configured and non-zero index
; {
; SOURCE LINE # 103
; Force_Stall(); // Otherwise send stall to host
; SOURCE LINE # 104
?C0139:
; }
; SOURCE LINE # 105
SJMP ?C0145
?C0009:
; else
; {
; SOURCE LINE # 107
; Data_Ptr = (BYTE*)&ZERO_PACKET; // Status packet always returns 0x00
; SOURCE LINE # 108
?C0140:
LCALL L?0158
; Data_Size = 2;
; SOURCE LINE # 109
; }
; SOURCE LINE # 110
; break;
; SOURCE LINE # 111
SJMP ?C0144
;
; case OUT_ENDPOINT: // See if recipient was an endpoint
; SOURCE LINE # 113
?C0012:
; if ((USB_State != DEV_CONFIGURED) ||
; SOURCE LINE # 114
MOV DPTR,#USB_State
MOVX A,@DPTR
CJNE A,#04H,?C0014
MOV DPTR,#Setup+04H
MOVX A,@DPTR
JZ ?C0013
?C0014:
; Setup.wIndex.c[MSB]) // Make sure device is configured and index msb = 0x00
; { // otherwise return stall to host
; SOURCE LINE # 116
; Force_Stall();
; SOURCE LINE # 117
?C0141:
; }
; SOURCE LINE # 118
SJMP ?C0145
?C0013:
; else
; {
; SOURCE LINE # 120
; if (Setup.wIndex.c[LSB] == IN_EP1) // Handle case if request is directed to EP 1
; SOURCE LINE # 121
MOV DPTR,#Setup+05H
MOVX A,@DPTR
MOV R7,A
CJNE A,#081H,?C0016
; {
; SOURCE LINE # 122
; if (Ep_Status[1] == EP_HALT)
; SOURCE LINE # 123
MOV DPTR,#Ep_Status+01H
MOVX A,@DPTR
MOV DPTR,#Data_Ptr
CJNE A,#03H,?C0017
; { // If endpoint is halted, return 0x01,0x00
; SOURCE LINE # 124
; Data_Ptr = (BYTE*)&ONES_PACKET;
; SOURCE LINE # 125
LCALL L?0163
; Data_Size = 2;
; SOURCE LINE # 126
; }
; SOURCE LINE # 127
SJMP ?C0137
?C0017:
; else
; {
; SOURCE LINE # 129
; Data_Ptr = (BYTE*)&ZERO_PACKET;// Otherwise return 0x00,0x00 to indicate endpoint active
; SOURCE LINE # 130
LCALL L?0160
?C0137:
?C0142:
; Data_Size = 2;
; SOURCE LINE # 131
; }
; SOURCE LINE # 132
; }
; SOURCE LINE # 133
SJMP ?C0144
?C0016:
; else
; {
; SOURCE LINE # 135
; if (Setup.wIndex.c[LSB] == OUT_EP2)
; SOURCE LINE # 136
MOV A,R7
CJNE A,#01H,?C0020
; // If request is directed to endpoint 2, send either
; { // 0x01,0x00 if endpoint halted or 0x00,0x00 if
; SOURCE LINE # 138
; if (Ep_Status[2] == EP_HALT) // endpoint is active
; SOURCE LINE # 139
MOV DPTR,#Ep_Status+02H
MOVX A,@DPTR
MOV DPTR,#Data_Ptr
CJNE A,#03H,?C0021
; {
; SOURCE LINE # 140
; Data_Ptr = (BYTE*)&ONES_PACKET;
; SOURCE LINE # 141
LCALL L?0163
; Data_Size = 2;
; SOURCE LINE # 142
; }
; SOURCE LINE # 143
SJMP ?C0138
?C0021:
; else
; {
; SOURCE LINE # 145
; Data_Ptr = (BYTE*)&ZERO_PACKET;
; SOURCE LINE # 146
LCALL L?0160
?C0138:
?C0144:
; Data_Size = 2;
; SOURCE LINE # 147
LCALL L?0165
MOV A,#02H
MOVX @DPTR,A
; }
; SOURCE LINE # 148
; }
; SOURCE LINE # 149
SJMP ?C0003
?C0020:
; else
; {
; SOURCE LINE # 151
; Force_Stall(); // Send stall if unexpected data encountered
; SOURCE LINE # 152
?C0143:
; }
; SOURCE LINE # 153
; }
; SOURCE LINE # 154
; }
; SOURCE LINE # 155
; break;
; SOURCE LINE # 156
SJMP ?C0145
;
; default:
; SOURCE LINE # 158
?C0024:
; Force_Stall();
; SOURCE LINE # 159
?C0145:
LCALL Force_Stall
; break;
; SOURCE LINE # 160
; }
; SOURCE LINE # 161
?C0003:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 162
LCALL L?0162
JZ ?C0028
; {
; SOURCE LINE # 163
?C0026:
; POLL_WRITE_BYTE(E0CSR, rbSOPRDY); // Set serviced Setup Packet, Endpoint 0 in
; SOURCE LINE # 164
MOV A,USB0ADR
JB ACC.7,?C0026
?C0027:
; Ep_Status[0] = EP_TX; // transmit mode, and reset Data_Sent counter
; SOURCE LINE # 165
; Data_Sent = 0;
; SOURCE LINE # 166
LCALL L?0156
; }
; SOURCE LINE # 167
; }
; SOURCE LINE # 168
?C0028:
RET
; END OF Get_Status
;
; //----------------------------------------------------------------------------
; // Clear_Feature
; //----------------------------------------------------------------------------
; //
; // This routine can clear Halt Endpoint features
; // on endpoint 1 and 2.
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Clear_Feature()
RSEG ?PR?Clear_Feature?F34X_MSD_USB_STD_REQ
Clear_Feature:
USING 0
; SOURCE LINE # 181
; {
; SOURCE LINE # 182
;
; if ((USB_State != DEV_CONFIGURED) ||// Send procedural stall if device isn't configured
; SOURCE LINE # 184
LCALL L?0171
JNZ ?C0146
MOV DPTR,#Setup
MOVX A,@DPTR
MOV R7,A
JZ ?C0146
XRL A,#01H
JZ ?C0146
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0146
MOV DPTR,#Setup+04H
MOVX A,@DPTR
JNZ ?C0146
MOV DPTR,#Setup+06H
MOVX A,@DPTR
JNZ ?C0146
INC DPTR
MOVX A,@DPTR
JZ ?C0029
?C0030:
; (Setup.bmRequestType == IN_DEVICE) ||// or request is made to host(remote wakeup not supported)
; (Setup.bmRequestType == IN_INTERFACE) ||// or request is made to interface
; Setup.wValue.c[MSB] || Setup.wIndex.c[MSB]||// or msbs of value or index set to non-zero value
; Setup.wLength.c[MSB] || Setup.wLength.c[LSB])// or data length set to non-zero.
; {
; SOURCE LINE # 189
; Force_Stall();
; SOURCE LINE # 190
; }
; SOURCE LINE # 191
SJMP ?C0146
?C0029:
;
; else
; {
; SOURCE LINE # 194
; if ((Setup.bmRequestType == IN_ENDPOINT)&&// Verify that packet was directed at an endpoint
; SOURCE LINE # 195
MOV DPTR,#Setup
MOVX A,@DPTR
XRL A,#02H
JNZ ?C0032
MOV DPTR,#Setup+03H
MOVX A,@DPTR
JNZ ?C0032
MOV DPTR,#Setup+05H
MOVX A,@DPTR
MOV R7,A
XRL A,#081H
JZ ?C0033
MOV A,R7
XRL A,#01H
JNZ ?C0032
?C0033:
; (Setup.wValue.c[LSB] == ENDPOINT_HALT) &&// the feature selected was HALT_ENDPOINT
; ((Setup.wIndex.c[LSB] == IN_EP1) || // and that the request was directed at EP 1 in
; (Setup.wIndex.c[LSB] == OUT_EP2))) // or EP 2 out
; {
; SOURCE LINE # 199
; if (Setup.wIndex.c[LSB] == IN_EP1)
; SOURCE LINE # 200
MOV A,R7
CJNE A,#081H,?C0040
; {
; SOURCE LINE # 201
?C0035:
; POLL_WRITE_BYTE (INDEX, EP1_IN_IDX); // Clear feature endpoint 1 halt
; SOURCE LINE # 202
MOV A,USB0ADR
JB ACC.7,?C0035
?C0036:
LCALL L?0173
?C0037:
; POLL_WRITE_BYTE (EINCSR1, rbInCLRDT);
; SOURCE LINE # 203
MOV A,USB0ADR
JB ACC.7,?C0037
?C0038:
MOV USB0ADR,#011H
MOV USB0DAT,#040H
; Ep_Status[1] = EP_IDLE; // Set endpoint 1 status back to idle
; SOURCE LINE # 204
CLR A
MOV DPTR,#Ep_Status+01H
MOVX @DPTR,A
; }
; SOURCE LINE # 205
SJMP ?C0045
; else
; {
; SOURCE LINE # 207
?C0040:
; POLL_WRITE_BYTE (INDEX, EP2_OUT_IDX); // Clear feature endpoint 2 halt
; SOURCE LINE # 208
MOV A,USB0ADR
JB ACC.7,?C0040
?C0041:
MOV USB0ADR,#0EH
MOV USB0DAT,#02H
?C0042:
; POLL_WRITE_BYTE (EOUTCSR1, rbOutCLRDT);
; SOURCE LINE # 209
MOV A,USB0ADR
JB ACC.7,?C0042
?C0043:
MOV USB0ADR,#014H
MOV USB0DAT,#080H
; Ep_Status[2] = EP_IDLE; // Set endpoint 2 status back to idle
; SOURCE LINE # 210
CLR A
MOV DPTR,#Ep_Status+02H
MOVX @DPTR,A
; }
; SOURCE LINE # 211
; }
; SOURCE LINE # 212
SJMP ?C0045
?C0032:
; else
; {
; SOURCE LINE # 214
; Force_Stall(); // Send procedural stall
; SOURCE LINE # 215
?C0146:
LCALL Force_Stall
; }
; SOURCE LINE # 216
; }
; SOURCE LINE # 217
?C0045:
; POLL_WRITE_BYTE(INDEX, EP0_IDX); // Reset Index to 0
; SOURCE LINE # 218
MOV A,USB0ADR
JB ACC.7,?C0045
?C0046:
; if (Ep_Status[0] != EP_STALL)
; SOURCE LINE # 219
LCALL L?0161
JZ ?C0050
; {
; SOURCE LINE # 220
?C0048:
; POLL_WRITE_BYTE(E0CSR, (rbSOPRDY | rbDATAEND));
; SOURCE LINE # 221
MOV A,USB0ADR
JB ACC.7,?C0048
?C0049:
LCALL L?0167
; // Set Serviced Out packet ready and data end to
; // indicate transaction is over
; }
; SOURCE LINE # 224
; }
; SOURCE LINE # 225
?C0050:
RET
; END OF Clear_Feature
;
; //----------------------------------------------------------------------------
; // Set_Feature
; //----------------------------------------------------------------------------
; //
; // This routine will set the EP Halt feature for
; // endpoints 1 and 2
; //
; // Parameters :
; // Return Value :
; //----------------------------------------------------------------------------
;
; void Set_Feature(void)
RSEG ?PR?Set_Feature?F34X_MSD_USB_STD_REQ
Set_Feature:
USING 0
; SOURCE LINE # 238
; {
; SOURCE LINE # 239
;
; if ((USB_State != DEV_CONFIGURED) ||// Make sure device is configured, setup data
; SOURCE LINE # 241
LCALL L?0171
JNZ ?C0147
MOV DPTR,#Setup
MOVX A,@DPTR
MOV R7,A
JZ ?C0147
XRL A,#01H
JZ ?C0147
MOV DPTR,#Setup+02H
MOVX A,@DPTR
JNZ ?C0147
MOV DPTR,#Setup+04H
MOVX A,@DPTR
JNZ ?C0147
MOV DPTR,#Setup+06H
MOVX A,@DPTR
JNZ ?C0147
INC DPTR
MOVX A,@DPTR
JZ ?C0051
?C0052:
; (Setup.bmRequestType == IN_DEVICE) ||// is all valid and that request is directed at
; (Setup.bmRequestType == IN_INTERFACE) ||// an endpoint
; Setup.wValue.c[MSB] || Setup.wIndex.c[MSB]||
; Setup.wLength.c[MSB] || Setup.wLength.c[LSB])
; {
; SOURCE LINE # 246
; Force_Stall(); // Otherwise send stall to host
; SOURCE LINE # 247
; }
; SOURCE LINE # 248
SJMP ?C0147
?C0051:
;
; else
; {
; SOURCE LINE # 251
; if ((Setup.bmRequestType == IN_ENDPOINT)&&// Make sure endpoint exists and that halt
; SOURCE LINE # 252
MOV DPTR,#Setup
MOVX A,@DPTR
XRL A,#02H
JNZ ?C0054
MOV DPTR,#Setup+03H
MOVX A,@DPTR
JNZ ?C0054
MOV DPTR,#Setup+05H
MOVX A,@DPTR
MOV R7,A
XRL A,#081H
JZ ?C0055
MOV A,R7
XRL A,#01H
JNZ ?C0054
?C0055:
; (Setup.wValue.c[LSB] == ENDPOINT_HALT) &&// endpoint feature is selected
; ((Setup.wIndex.c[LSB] == IN_EP1) ||
; (Setup.wIndex.c[LSB] == OUT_EP2)))
; {
; SOURCE LINE # 256
; if (Setup.wIndex.c[LSB] == IN_EP1)
; SOURCE LINE # 257
MOV A,R7
CJNE A,#081H,?C0062
; {
; SOURCE LINE # 258
?C0057:
; POLL_WRITE_BYTE (INDEX, EP1_IN_IDX); // Set feature endpoint 1 halt
; SOURCE LINE # 259
MOV A,USB0ADR
JB ACC.7,?C0057
?C0058:
LCALL L?0173
?C0059:
; POLL_WRITE_BYTE (EINCSR1, rbInSDSTL);
; SOURCE LINE # 260
MOV A,USB0ADR
JB ACC.7,?C0059
?C0060:
MOV USB0ADR,#011H
MOV USB0DAT,#010H
; Ep_Status[1] = EP_HALT;
; SOURCE LINE # 261
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -