📄 usbd_udp.lst
字号:
\ 00000094 041096E5 LDR R1,[R6, #+4]
\ 00000098 000091E0 ADDS R0,R1,R0
\ 0000009C 080086E5 STR R0,[R6, #+8]
463 transfer->buffered = 0;
\ 000000A0 0000A0E3 MOV R0,#+0
\ 000000A4 040086E5 STR R0,[R6, #+4]
464
465 // Disable interrupt if this is not a control endpoint
466 if ((status & AT91C_UDP_EPTYPE) != AT91C_UDP_EPTYPE_CTRL) {
\ 000000A8 700E17E3 TST R7,#0x700
\ 000000AC 0500000A BEQ ??UDP_EndpointHandler_5
467
468 AT91C_BASE_UDP->UDP_IDR |= 1 << eptnum;
\ 000000B0 ........ LDR R0,??DataTable64 ;; 0xfffb0014
\ 000000B4 000090E5 LDR R0,[R0, #+0]
\ 000000B8 0110A0E3 MOV R1,#+1
\ 000000BC 110490E1 ORRS R0,R0,R1, LSL R4
\ 000000C0 ........ LDR R1,??DataTable64 ;; 0xfffb0014
\ 000000C4 000081E5 STR R0,[R1, #+0]
469 }
470
471 UDP_EndOfTransfer(eptnum, USBD_STATUS_SUCCESS);
\ ??UDP_EndpointHandler_5:
\ 000000C8 0010A0E3 MOV R1,#+0
\ 000000CC 0400B0E1 MOVS R0,R4
\ 000000D0 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000000D4 ........ BL UDP_EndOfTransfer
\ 000000D8 360000EA B ??UDP_EndpointHandler_3
472 }
473 else {
474
475 // Transfer remaining data
476 trace_LOG(trace_INFO, "%d ", endpoint->size);
\ ??UDP_EndpointHandler_4:
\ 000000DC B210D5E1 LDRH R1,[R5, #+2]
\ 000000E0 DE0F8FE2 ADR R0,??UDP_EndpointHandler_0 ;; "%d "
\ 000000E4 ........ BL printf
477
478 transfer->transferred += endpoint->size;
\ 000000E8 080096E5 LDR R0,[R6, #+8]
\ 000000EC B210D5E1 LDRH R1,[R5, #+2]
\ 000000F0 000091E0 ADDS R0,R1,R0
\ 000000F4 080086E5 STR R0,[R6, #+8]
479 transfer->buffered -= endpoint->size;
\ 000000F8 040096E5 LDR R0,[R6, #+4]
\ 000000FC B210D5E1 LDRH R1,[R5, #+2]
\ 00000100 010050E0 SUBS R0,R0,R1
\ 00000104 040086E5 STR R0,[R6, #+4]
480
481 // Send next packet
482 if (BOARD_USB_ENDPOINTS_BANKS(eptnum) == 1) {
\ 00000108 FF4014E2 ANDS R4,R4,#0xFF ;; Zero extend
\ 0000010C 000054E3 CMP R4,#+0
\ 00000110 0200000A BEQ ??UDP_EndpointHandler_6
\ 00000114 FF4014E2 ANDS R4,R4,#0xFF ;; Zero extend
\ 00000118 030054E3 CMP R4,#+3
\ 0000011C 0100001A BNE ??UDP_EndpointHandler_7
\ ??UDP_EndpointHandler_6:
\ 00000120 0100A0E3 MOV R0,#+1
\ 00000124 000000EA B ??UDP_EndpointHandler_8
\ ??UDP_EndpointHandler_7:
\ 00000128 0200A0E3 MOV R0,#+2
\ ??UDP_EndpointHandler_8:
\ 0000012C 010050E3 CMP R0,#+1
\ 00000130 1000001A BNE ??UDP_EndpointHandler_9
483
484 // No double buffering
485 UDP_WritePayload(eptnum);
\ 00000134 0400B0E1 MOVS R0,R4
\ 00000138 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 0000013C ........ BL UDP_WritePayload
486 SET_CSR(eptnum, AT91C_UDP_TXPKTRDY);
\ 00000140 0400B0E1 MOVS R0,R4
\ 00000144 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000148 0410A0E3 MOV R1,#+4
\ 0000014C ........ LDR R2,??DataTable70 ;; 0xfffb0030
\ 00000150 912020E0 MLA R0,R1,R0,R2
\ 00000154 000090E5 LDR R0,[R0, #+0]
\ 00000158 100090E3 ORRS R0,R0,#0x10
\ 0000015C 0410B0E1 MOVS R1,R4
\ 00000160 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 00000164 0420A0E3 MOV R2,#+4
\ 00000168 ........ LDR R3,??DataTable70 ;; 0xfffb0030
\ 0000016C 923121E0 MLA R1,R2,R1,R3
\ 00000170 000081E5 STR R0,[R1, #+0]
\ 00000174 0F0000EA B ??UDP_EndpointHandler_3
487 }
488 else {
489
490 // Double buffering
491 SET_CSR(eptnum, AT91C_UDP_TXPKTRDY);
\ ??UDP_EndpointHandler_9:
\ 00000178 0400B0E1 MOVS R0,R4
\ 0000017C FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000180 0410A0E3 MOV R1,#+4
\ 00000184 ........ LDR R2,??DataTable70 ;; 0xfffb0030
\ 00000188 912020E0 MLA R0,R1,R0,R2
\ 0000018C 000090E5 LDR R0,[R0, #+0]
\ 00000190 100090E3 ORRS R0,R0,#0x10
\ 00000194 0410B0E1 MOVS R1,R4
\ 00000198 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 0000019C 0420A0E3 MOV R2,#+4
\ 000001A0 ........ LDR R3,??DataTable70 ;; 0xfffb0030
\ 000001A4 923121E0 MLA R1,R2,R1,R3
\ 000001A8 000081E5 STR R0,[R1, #+0]
492 UDP_WritePayload(eptnum);
\ 000001AC 0400B0E1 MOVS R0,R4
\ 000001B0 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000001B4 ........ BL UDP_WritePayload
493 }
494 }
495 }
496
497 // Acknowledge interrupt
498 CLEAR_CSR(eptnum, AT91C_UDP_TXCOMP);
\ ??UDP_EndpointHandler_3:
\ 000001B8 0400B0E1 MOVS R0,R4
\ 000001BC FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000001C0 0410A0E3 MOV R1,#+4
\ 000001C4 ........ LDR R2,??DataTable70 ;; 0xfffb0030
\ 000001C8 912020E0 MLA R0,R1,R0,R2
\ 000001CC 000090E5 LDR R0,[R0, #+0]
\ 000001D0 0100D0E3 BICS R0,R0,#0x1
\ 000001D4 0410B0E1 MOVS R1,R4
\ 000001D8 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 000001DC 0420A0E3 MOV R2,#+4
\ 000001E0 ........ LDR R3,??DataTable70 ;; 0xfffb0030
\ 000001E4 923121E0 MLA R1,R2,R1,R3
\ 000001E8 000081E5 STR R0,[R1, #+0]
499 }
500
501 // OUT packet received
502 if ((status & UDP_RXDATA) != 0) {
\ ??UDP_EndpointHandler_1:
\ 000001EC 420017E3 TST R7,#0x42
\ 000001F0 4700000A BEQ ??UDP_EndpointHandler_10
503
504 trace_LOG(trace_INFO, "Rd ");
\ 000001F4 9A0F8FE2 ADR R0,??UDP_EndpointHandler_0+0x4 ;; "Rd "
\ 000001F8 ........ BL printf
505
506 // Check that the endpoint is in Receiving state
507 if (endpoint->state != UDP_ENDPOINT_RECEIVING) {
\ 000001FC 0000D5E5 LDRB R0,[R5, #+0]
\ 00000200 040050E3 CMP R0,#+4
\ 00000204 1E00000A BEQ ??UDP_EndpointHandler_11
508
509 // Check if an ACK has been received on a Control endpoint
510 if (((status & AT91C_UDP_EPTYPE) == AT91C_UDP_EPTYPE_CTRL)
511 && ((status & AT91C_UDP_RXBYTECNT) == 0)) {
\ 00000208 5C029FE5 LDR R0,??UDP_EndpointHandler_0+0xC ;; 0x7ff0700
\ 0000020C 070010E1 TST R0,R7
\ 00000210 0900001A BNE ??UDP_EndpointHandler_12
512
513 // Acknowledge the data and finish the current transfer
514 trace_LOG(trace_INFO, "Ack ");
\ 00000214 54029FE5 LDR R0,??UDP_EndpointHandler_0+0x10 ;; `?<Constant "Ack ">`
\ 00000218 ........ BL printf
515 UDP_ClearRxFlag(eptnum);
\ 0000021C 0400B0E1 MOVS R0,R4
\ 00000220 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000224 ........ BL UDP_ClearRxFlag
516 UDP_EndOfTransfer(eptnum, USBD_STATUS_SUCCESS);
\ 00000228 0010A0E3 MOV R1,#+0
\ 0000022C 0400B0E1 MOVS R0,R4
\ 00000230 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000234 ........ BL UDP_EndOfTransfer
\ 00000238 350000EA B ??UDP_EndpointHandler_10
517 }
518 // Check if the data has been STALLed
519 else if ((status & AT91C_UDP_FORCESTALL) != 0) {
\ ??UDP_EndpointHandler_12:
\ 0000023C 200017E3 TST R7,#0x20
\ 00000240 0500000A BEQ ??UDP_EndpointHandler_13
520
521 // Discard STALLed data
522 trace_LOG(trace_INFO, "Disc ");
\ 00000244 ........ LDR R0,??DataTable29 ;; `?<Constant "Disc ">`
\ 00000248 ........ BL printf
523 UDP_ClearRxFlag(eptnum);
\ 0000024C 0400B0E1 MOVS R0,R4
\ 00000250 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000254 ........ BL UDP_ClearRxFlag
\ 00000258 2D0000EA B ??UDP_EndpointHandler_10
524 }
525 // NAK the data
526 else {
527
528 trace_LOG(trace_INFO, "Nak ");
\ ??UDP_EndpointHandler_13:
\ 0000025C 10029FE5 LDR R0,??UDP_EndpointHandler_0+0x14 ;; `?<Constant "Nak ">`
\ 00000260 ........ BL printf
529 AT91C_BASE_UDP->UDP_IDR |= 1 << eptnum;
\ 00000264 ........ LDR R0,??DataTable64 ;; 0xfffb0014
\ 00000268 000090E5 LDR R0,[R0, #+0]
\ 0000026C 0110A0E3 MOV R1,#+1
\ 00000270 110490E1 ORRS R0,R0,R1, LSL R4
\ 00000274 ........ LDR R1,??DataTable64 ;; 0xfffb0014
\ 00000278 000081E5 STR R0,[R1, #+0]
\ 0000027C 240000EA B ??UDP_EndpointHandler_10
\ ??UDP_EndpointHandler_2:
\ 00000280 57722000 DC8 "Wr "
530 }
531 }
532 // Endpoint is in Read state
533 else {
534
535 // Retrieve data and store it into the current transfer buffer
536 unsigned short size = (unsigned short) (status >> 16);
\ ??UDP_EndpointHandler_11:
\ 00000284 2708B0E1 LSRS R0,R7,#+16
\ 00000288 0080B0E1 MOVS R8,R0
537 trace_LOG(trace_INFO, "%d ", size);
\ 0000028C 0810B0E1 MOVS R1,R8
\ 00000290 0118A0E1 MOV R1,R1, LSL #+16
\ 00000294 2118B0E1 MOVS R1,R1, LSR #+16
\ 00000298 700F8FE2 ADR R0,??UDP_EndpointHandler_0 ;; "%d "
\ 0000029C ........ BL printf
538 UDP_ReadPayload(eptnum, size);
\ 000002A0 0810B0E1 MOVS R1,R8
\ 000002A4 0118A0E1 MOV R1,R1, LSL #+16
\ 000002A8 2118B0E1 MOVS R1,R1, LSR #+16
\ 000002AC 0400B0E1 MOVS R0,R4
\ 000002B0 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000002B4 ........ BL UDP_ReadPayload
539 UDP_ClearRxFlag(eptnum);
\ 000002B8 0400B0E1 MOVS R0,R4
\ 000002BC FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 000002C0 ........ BL UDP_ClearRxFlag
540
541 // Check if the transfer is finished
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -