📄 cdc_enumerate.lst
字号:
285 002e 1B02 b .L55
286 0030 0B63 .L53:
287 0032 7AE1 .loc 1 228 0
288 ldr r3, [sp, #4]
289 mov r2, #1
290 0034 019B tst r3, r2
291 0036 0122 bne .LCB295
292 0038 1342 b .L55 @long jump
293 003a 00D1 .LCB295:
294 003c 75E1 .loc 1 229 0
295 str r2, [r1, #32]
296 .LBB4:
297 003e 0A62 .LBB5:
298 .loc 1 376 0
299 ldr r4, [r0]
369:cdc_enumerate.c ****
370:cdc_enumerate.c **** //*----------------------------------------------------------------------------
371:cdc_enumerate.c **** //* \fn AT91F_CDC_Enumerate
372:cdc_enumerate.c **** //* \brief This function is a callback invoked when a SETUP packet is received
373:cdc_enumerate.c **** //*----------------------------------------------------------------------------
374:cdc_enumerate.c **** static void AT91F_CDC_Enumerate(AT91PS_CDC pCdc)
375:cdc_enumerate.c **** {
376:cdc_enumerate.c **** AT91PS_UDP pUDP = pCdc->pUdp;
300 CB306
301 0040 0468 b .L55 @long jump
302 .LCB306:
377:cdc_enumerate.c **** uchar bmRequestType, bRequest;
378:cdc_enumerate.c **** ushort wValue, wIndex, wLength, wStatus;
379:cdc_enumerate.c ****
380:cdc_enumerate.c ****
381:cdc_enumerate.c **** if ( !(pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) )
303 L18:
304 0042 236B .loc 1 384 0
305 0044 5807 ldr r0, [r4, #80]
306 0046 00D4 lsl r0, r0, #24
307 0048 6FE1 .loc 1 385 0
308 ldr r6, [r4, #80]
309 .loc 1 386 0
382:cdc_enumerate.c **** return;
383:cdc_enumerate.c ****
384:cdc_enumerate.c **** bmRequestType = pUDP->UDP_FDR[0];
310 , [r4, #80]
311 004a 206D mov r1, #255
312 004c 0006 .LVL19:
385:cdc_enumerate.c **** bRequest = pUDP->UDP_FDR[0];
313 d r2, r2, r1
314 004e 266D .LVL20:
386:cdc_enumerate.c **** wValue = (pUDP->UDP_FDR[0] & 0xFF);
315 loc 1 387 0
316 0050 226D ldr r3, [r4, #80]
317 0052 FF21 lsl r3, r3, #8
318 orr r2, r2, r3
319 0054 0A40 .LVL21:
320 lsl r2, r2, #16
387:cdc_enumerate.c **** wValue |= (pUDP->UDP_FDR[0] << 8);
321 2, r2, #16
322 0056 236D mov r8, r2
323 0058 1B02 .LVL22:
324 005a 1A43 .loc 1 388 0
325 ldr r3, [r4, #80]
326 005c 1204 and r3, r3, r1
327 005e 120C .LVL23:
328 0060 9046 .loc 1 389 0
329 ldr r2, [r4, #80]
388:cdc_enumerate.c **** wIndex = (pUDP->UDP_FDR[0] & 0xFF);
330 r2, #8
331 0062 236D orr r3, r3, r2
332 0064 0B40 .LVL24:
333 lsl r3, r3, #16
389:cdc_enumerate.c **** wIndex |= (pUDP->UDP_FDR[0] << 8);
334 r3, r3, #16
335 0066 226D mov ip, r3
336 0068 1202 .LVL25:
337 006a 1343 .loc 1 390 0
338 ldr r3, [r4, #80]
339 006c 1B04 and r3, r3, r1
340 006e 1B0C .LVL26:
341 0070 9C46 .loc 1 391 0
342 ldr r2, [r4, #80]
390:cdc_enumerate.c **** wLength = (pUDP->UDP_FDR[0] & 0xFF);
343 r2, #8
344 0072 236D orr r3, r3, r2
345 0074 0B40 .LVL27:
346 lsl r3, r3, #16
391:cdc_enumerate.c **** wLength |= (pUDP->UDP_FDR[0] << 8);
347 r7, r3, #16
348 0076 226D .LVL28:
349 0078 1202 .loc 1 393 0
350 007a 1343 lsr r1, r0, #24
351 .LVL29:
352 007c 1B04 cmp r0, #0
353 007e 1F0C bge .L58
354 .loc 1 394 0
392:cdc_enumerate.c ****
393:cdc_enumerate.c **** if (bmRequestType & 0x80) {
355 [r4, #48]
356 0080 010E mov r2, #128
357 orr r3, r3, r2
358 0082 0028 str r3, [r4, #48]
359 0084 06DA .L60:
394:cdc_enumerate.c **** pUDP->UDP_CSR[0] |= AT91C_UDP_DIR;
360 1 395 0
361 0086 236B ldr r3, [r4, #48]
362 0088 8022 tst r3, r2
363 008a 1343 beq .L60
364 008c 2363 .L58:
365 .loc 1 397 0
395:cdc_enumerate.c **** while ( !(pUDP->UDP_CSR[0] & AT91C_UDP_DIR) );
366 3, [r4, #48]
367 008e 236B mov r2, #4
368 0090 1342 bic r3, r3, r2
369 0092 FCD0 str r3, [r4, #48]
370 .L61:
396:cdc_enumerate.c **** }
397:cdc_enumerate.c **** pUDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
371 1 398 0
372 0094 236B ldr r3, [r4, #48]
373 0096 0422 tst r3, r2
374 0098 9343 bne .L61
375 009a 2363 .loc 1 401 0
376 lsl r3, r6, #24
398:cdc_enumerate.c **** while ( (pUDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) );
377 3, r3, #16
378 009c 236B mov r0, r3
379 009e 1342 orr r0, r0, r1
380 00a0 FCD1 ldr r3, .L129
399:cdc_enumerate.c ****
400:cdc_enumerate.c **** // Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1
401:cdc_enumerate.c **** switch ((bRequest << 8) | bmRequestType) {
381 r0, r3
382 00a2 3306 bne .LCB393
383 00a4 1B0C b .L71 @long jump
384 00a6 181C .LCB393:
385 00a8 0843 cmp r0, r3
386 00aa A34B bgt .L80
387 00ac 9842 mov r3, #128
388 00ae 00D1 lsl r3, r3, #1
389 00b0 D4E0 cmp r0, r3
390 bne .LCB399
391 00b2 9842 b .L67 @long jump
392 00b4 1EDC .LCB399:
393 00b6 8023 cmp r0, r3
394 00b8 5B00 bgt .L81
395 00ba 9842 cmp r0, #129
396 00bc 00D1 bne .LCB403
397 00be E5E0 b .L65 @long jump
398 .LCB403:
399 00c0 9842 cmp r0, #130
400 00c2 09DC bne .LCB405
401 00c4 8128 b .L66 @long jump
402 00c6 00D1 .LCB405:
403 00c8 8EE0 cmp r0, #128
404 beq .LCB407
405 00ca 8228 b .L63 @long jump
406 00cc 00D1 .LCB407:
407 00ce 94E0 b .L64
408 .L81:
409 00d0 8028 mov r3, #129
410 00d2 00D0 lsl r3, r3, #1
411 00d4 1FE1 cmp r0, r3
412 bne .LCB415
413 00d6 7EE0 b .L69 @long jump
414 .LCB415:
415 00d8 8123 cmp r0, r3
416 00da 5B00 bge .LCB417
417 00dc 9842 b .L68 @long jump
418 00de 00D1 .LCB417:
419 00e0 DCE0 mov r3, #192
420 lsl r3, r3, #2
421 00e2 9842 cmp r0, r3
422 00e4 00DA beq .LCB421
423 00e6 D5E0 b .L63 @long jump
424 .LCB421:
425 00e8 C023 b .L70
426 00ea 9B00 .L80:
427 00ec 9842 mov r3, #136
428 00ee 00D0 lsl r3, r3, #4
429 00f0 11E1 cmp r0, r3
430 beq .L75
431 00f2 AFE0 cmp r0, r3
432 bgt .L82
433 00f4 8823 mov r3, #160
434 00f6 1B01 lsl r3, r3, #3
435 00f8 9842 cmp r0, r3
436 00fa 66D0 beq .L73
437 00fc 9842 mov r3, #208
438 00fe 0CDC lsl r3, r3, #3
439 0100 A023 cmp r0, r3
440 0102 DB00 beq .L74
441 0104 9842 ldr r3, .L129+4
442 0106 3DD0 cmp r0, r3
443 0108 D023 beq .LCB442
444 010a DB00 b .L63 @long jump
445 010c 9842 .LCB442:
446 010e 19D0 b .L72
447 0110 8A4B .L82:
448 0112 9842 ldr r3, .L129+8
449 0114 00D0 cmp r0, r3
450 0116 FEE0 bne .LCB449
451 b .L123 @long jump
452 0118 A4E0 .LCB449:
453 cmp r0, r3
454 011a 894B bgt .L83
455 011c 9842 mov r3, #144
456 011e 00D1 lsl r3, r3, #4
457 0120 DEE0 cmp r0, r3
458 beq .LCB455
459 0122 9842 b .L63 @long jump
460 0124 05DC .LCB455:
461 0126 9023 b .L76
462 0128 1B01 .L83:
463 012a 9842 ldr r3, .L129+12
464 012c 00D0 cmp r0, r3
465 012e F2E0 bne .LCB462
466 b .L78 @long jump
467 0130 36E0 .LCB462:
468 add r3, r3, #128
469 0132 844B cmp r0, r3
470 0134 9842 beq .LCB465
471 0136 00D1 b .L63 @long jump
472 0138 DDE0 .LCB465:
473 b .L79
474 013a 8033 .L74:
475 013c 9842 .loc 1 403 0
476 013e 00D0 mov r3, #128
477 0140 E9E0 lsl r3, r3, #1
478 cmp r8, r3
479 0142 E2E0 bne .L84
480 .loc 1 404 0
402:cdc_enumerate.c **** case STD_GET_DESCRIPTOR:
403:cdc_enumerate.c **** if (wValue == 0x100) // Return Device Descriptor
481 0, r4
482 0144 8023 bl AT91F_USB_SendData
483 0146 5B00 .LVL31:
484 0148 9845 b .L55
485 014a 09D1 .LVL32:
404:cdc_enumerate.c **** AT91F_USB_SendData(pUDP, devDescriptor, MIN(sizeof(devDescriptor), wLength));
486
487 014c 122F .loc 1 405 0
488 014e 01D9 mov r3, #128
489 0150 1222 lsl r3, r3, #2
490 0152 00E0 cmp r8, r3
491 bne .L89
492 0154 3A1C .loc 1 406 0
493 cmp r7, #67
494 0156 7C49 bls .L91
495 mov r2, #67
496 0158 201C b .L93
497 015a FFF7FEFF .L91:
498 mov r2, r7
499 015e E4E0 .L93:
500 ldr r1, .L129+20
501 .LVL33:
405:cdc_enumerate.c **** else if (wValue == 0x200) // Return Configuration Descriptor
502 AT91F_USB_SendData
503 0160 8023 .LVL34:
504 0162 9B00 b .L55
505 0164 9845 .LVL35:
506 0166 09D1 .L89:
406:cdc_enumerate.c **** AT91F_USB_SendData(pUDP, cfgDescriptor, MIN(sizeof(cfgDescriptor), wLength));
507 1 408 0
508 0168 432F mov r0, r4
509 016a 01D9 bl AT91F_USB_SendStall
510 016c 4322 .LVL36:
511 016e 00E0 b .L55
512 .LVL37:
513 0170 3A1C .L73:
514 .loc 1 411 0
515 0172 7649 mov r0, r4
516 bl AT91F_USB_SendZlp
517 0174 201C .LVL38:
518 0176 FFF7FEFF .loc 1 412 0
519 mov r3, #128
520 017a D6E0 lsl r3, r3, #1
521 mov r2, r8
522 orr r3, r3, r2
407:cdc_enumerate.c **** else
408:cdc_enumerate.c **** AT91F_USB_SendStall(pUDP);
523 ]
524 017c 201C mov r3, #0
525 017e FFF7FEFF cmp r2, #0
526 beq .L94
527 0182 D2E0 mov r3, #1
528 .L94:
529 .loc 1 413 0
409:cdc_enumerate.c **** break;
410:cdc_enumerate.c **** case STD_SET_ADDRESS:
411:cdc_enumerate.c **** AT91F_USB_SendZlp(pUDP);
530 , [r4, #4]
531 0184 201C b .L55
532 0186 FFF7FEFF .LVL39:
533 .L76:
412:cdc_enumerate.c **** pUDP->UDP_FADDR = (AT91C_UDP_FEN | wValue);
534 40:
535 018a 8023 .loc 1 416 0
536 018c 5B00 mov r3, r8
537 018e 4246 strb r3, [r5, #4]
538 0190 1343 .loc 1 417 0
539 0192 A360 mov r0, r4
540 0194 0023 bl AT91F_USB_SendZlp
541 0196 002A .LVL41:
542 0198 00D0 .LVL42:
543 019a 0123 .loc 1 418 0
544 mov r0, r8
413:cdc_enumerate.c **** pUDP->UDP_GLBSTATE = (wValue) ? AT91C_UDP_FADDEN : 0;
545
546 019c 6360 bne .LCB573
547 019e C4E0 b .L95 @long jump
548 .LCB573:
549 mov r3, #2
550 str r3, [r4, #4]
414:cdc_enumerate.c **** break;
415:cdc_enumerate.c **** case STD_SET_CONFIGURATION:
416:cdc_enumerate.c **** pCdc->currentConfiguration = wValue;
551 1 419 0
552 01a0 4346 mov r3, #130
553 01a2 2B71 lsl r3, r3, #8
417:cdc_enumerate.c **** AT91F_USB_SendZlp(pUDP);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -