📄 usb_task.lst
字号:
189 1 dCBWTag[2] = Usb_read_byte();
190 1 dCBWTag[3] = Usb_read_byte();
191 1 ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
192 1 ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
193 1 ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
194 1 ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
195 1 if (Usb_read_byte() != 0x00) /* store bmCBWFlags.bit7 */
196 1 {
197 2 Usb_CBWFlag_in(); //(bmCBWFlag7 = 1)
198 2 if (cbw_error)
199 2 {
200 3 Usb_clear_RXOUT_PP(); //{if(rx_bank){UEPSTAX&=~MSK_RXOUTB1;}else{UEPSTAX&=(~MSK_RXOUTB0);}rx_bank=~r
-x_bank;}
201 3 Usb_select_ep(EP_IN);
202 3 Usb_set_STALLRQ();
203 3 return;
204 3 }
205 2 }
206 1 else
207 1 {
208 2 Usb_CBWFlag_out(); //(bmCBWFlag7 = 0)
209 2 if (cbw_error)
210 2 {
211 3 Usb_clear_RXOUT_PP();
212 3 Usb_set_STALLRQ();
213 3 return;
214 3 }
215 2 }
216 1 /* only 1 drive supported */
217 1 ACC = Usb_read_byte(); /* dummy LUN read */
218 1 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
219 1 Usb_clear_no_data_phase();
220 1 /* on-board memory */
221 1 Sbc_command_chip();
222 1 }
223
224
225 /*F**************************************************************************
226 * NAME: usb_mass_storage_csw
227 *----------------------------------------------------------------------------
228 * PARAMS:
229 *
230 * return:
231 *----------------------------------------------------------------------------
232 * PURPOSE:
233 * Command Status Wrapper management
234 *----------------------------------------------------------------------------
235 * EXAMPLE:
236 *----------------------------------------------------------------------------
237 * NOTE:
238 *
239 * REQUIREMENTS:
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 5
240 *****************************************************************************/
241 void usb_mass_storage_csw (void)
242 {
243 1 Usb_select_ep(EP_IN);
244 1 while (Usb_STALL_requested())
245 1 {
246 2 Usb_select_ep(EP_CONTROL);
247 2 if (Usb_setup_received())
248 2 {
249 3 usb_enumeration_process();
250 3 }
251 2 Usb_select_ep(EP_IN);
252 2 }
253 1
254 1 Usb_select_ep(EP_OUT);
255 1 while (Usb_STALL_requested())
256 1 {
257 2 Usb_select_ep(EP_CONTROL);
258 2 if (Usb_setup_received())
259 2 {
260 3 usb_enumeration_process();
261 3 }
262 2 Usb_select_ep(EP_OUT);
263 2 }
264 1
265 1 Usb_clear_no_data_phase();
266 1 Usb_clear_status_ready();
267 1 Usb_select_ep(EP_IN);
268 1 Usb_write_byte(0x55);
269 1 Usb_write_byte(0x53);
270 1 Usb_write_byte(0x42);
271 1 Usb_write_byte(0x53);
272 1
273 1 Usb_write_byte(dCBWTag[0]);
274 1 Usb_write_byte(dCBWTag[1]);
275 1 Usb_write_byte(dCBWTag[2]);
276 1 Usb_write_byte(dCBWTag[3]);
277 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
278 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
279 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
280 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
281 1 Usb_write_byte(status);
282 1 Usb_set_TXRDY();
283 1
284 1 Usb_select_ep(EP_IN);
285 1 while (!Usb_tx_complete());
286 1 Usb_clear_TXCMPL();
287 1
288 1 }
289
290
291 /*F**************************************************************************
292 * NAME: usb_mass_storage_reset
293 *----------------------------------------------------------------------------
294 * PARAMS:
295 *
296 * return:
297 *----------------------------------------------------------------------------
298 * PURPOSE:
299 * This function handles the mass storage reset command
300 *----------------------------------------------------------------------------
301 * EXAMPLE:
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 6
302 *----------------------------------------------------------------------------
303 * NOTE:
304 *----------------------------------------------------------------------------
305 * REQUIREMENTS:
306 *****************************************************************************/
307 void usb_mass_storage_reset (void)
308 {
309 1 Usb_clear_RXSETUP();
310 1 Usb_set_TXRDY();
311 1 while (!(Usb_tx_complete()));
312 1 Usb_clear_TXCMPL();
313 1 }
314
315
316 /*F**************************************************************************
317 * NAME: usb_mass_storage_get_lun
318 *----------------------------------------------------------------------------
319 * PARAMS:
320 *
321 * return:
322 *----------------------------------------------------------------------------
323 * PURPOSE:
324 * This function returns the mass storage class specific Logical Unit Number.
325 *----------------------------------------------------------------------------
326 * EXAMPLE:
327 *----------------------------------------------------------------------------
328 * NOTE:
329 *----------------------------------------------------------------------------
330 * REQUIREMENTS:
331 *****************************************************************************/
332 void usb_mass_storage_get_lun (void)
333 {
334 1 Usb_clear_RXSETUP();
335 1 Usb_set_DIR();
336 1 Usb_write_byte(MS_MAX_LUN);
337 1 Usb_set_TXRDY();
338 1 while (!(Usb_tx_complete()));
339 1 Usb_clear_TXCMPL();
340 1 while (!(Usb_rx_complete()));
341 1 Usb_clear_RXOUT();
342 1 Usb_clear_DIR();
343 1 }
344
345
346 /*F**************************************************************************
347 * NAME: usb_it_suspend
348 *----------------------------------------------------------------------------
349 * PARAMS:
350 *
351 * return:
352 *----------------------------------------------------------------------------
353 * PURPOSE:
354 * USB suspend interrupt function -> reset
355 *----------------------------------------------------------------------------
356 * EXAMPLE:
357 *----------------------------------------------------------------------------
358 * NOTE:
359 * IRQ_USB defined in extsnd1.h
360 *----------------------------------------------------------------------------
361 * REQUIREMENTS:
362 *****************************************************************************/
363 Interrupt (usb_it_suspend(void), IRQ_USB)
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 7
364 {
365 1 if (Usb_suspend())
366 1 {
367 2 // while (1);
368 2 }
369 1 }
370
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 401 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = 5 ----
BIT SIZE = 5 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -