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

📄 f34x_msd_usb_std_req.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 4 页
字号:
;       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 + -