📄 usbd_udp.lst
字号:
\ 000000D0 040096E5 LDR R0,[R6, #+4]
\ 000000D4 B210D5E1 LDRH R1,[R5, #+2]
\ 000000D8 010040E0 SUB R0,R0,R1
\ 000000DC 040086E5 STR R0,[R6, #+4]
498
499 // Send next packet
500 if (BOARD_USB_ENDPOINTS_BANKS(bEndpoint) == 1) {
\ 000000E0 000054E3 CMP R4,#+0
\ 000000E4 03005413 CMPNE R4,#+3
\ 000000E8 1400001A BNE ??UDP_EndpointHandler_5
501
502 // No double buffering
503 UDP_WritePayload(bEndpoint);
\ 000000EC 0400A0E1 MOV R0,R4
\ 000000F0 ........ BL UDP_WritePayload
504 SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY);
\ 000000F4 0400A0E1 MOV R0,R4
\ 000000F8 ........ LDR R1,??DataTable61 ;; 0xfffb0030
\ 000000FC 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 00000100 00008DE5 STR R0,[SP, #+0]
\ 00000104 00009DE5 LDR R0,[SP, #+0]
\ 00000108 4F0080E3 ORR R0,R0,#0x4F
\ 0000010C 00008DE5 STR R0,[SP, #+0]
\ 00000110 00009DE5 LDR R0,[SP, #+0]
\ 00000114 100080E3 ORR R0,R0,#0x10
\ 00000118 00008DE5 STR R0,[SP, #+0]
\ 0000011C 0400A0E1 MOV R0,R4
\ 00000120 00209DE5 LDR R2,[SP, #+0]
\ 00000124 002181E7 STR R2,[R1, +R0, LSL #+2]
\ ??UDP_EndpointHandler_6:
\ 00000128 0400A0E1 MOV R0,R4
\ 0000012C 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 00000130 100010E3 TST R0,#0x10
\ 00000134 FBFFFF0A BEQ ??UDP_EndpointHandler_6
505 CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
\ 00000138 0400A0E1 MOV R0,R4
\ 0000013C D0FFFFEA B ??UDP_EndpointHandler_3
506 }
507 else {
508 // Double buffering
509 SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY);
\ ??UDP_EndpointHandler_5:
\ 00000140 0400A0E1 MOV R0,R4
\ 00000144 ........ LDR R1,??DataTable61 ;; 0xfffb0030
\ 00000148 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 0000014C 00008DE5 STR R0,[SP, #+0]
\ 00000150 00009DE5 LDR R0,[SP, #+0]
\ 00000154 4F0080E3 ORR R0,R0,#0x4F
\ 00000158 00008DE5 STR R0,[SP, #+0]
\ 0000015C 00009DE5 LDR R0,[SP, #+0]
\ 00000160 100080E3 ORR R0,R0,#0x10
\ 00000164 00008DE5 STR R0,[SP, #+0]
\ 00000168 0400A0E1 MOV R0,R4
\ 0000016C 00209DE5 LDR R2,[SP, #+0]
\ 00000170 002181E7 STR R2,[R1, +R0, LSL #+2]
\ ??UDP_EndpointHandler_7:
\ 00000174 0400A0E1 MOV R0,R4
\ 00000178 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 0000017C 100010E3 TST R0,#0x10
\ 00000180 FBFFFF0A BEQ ??UDP_EndpointHandler_7
510 CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
\ 00000184 0400A0E1 MOV R0,R4
\ 00000188 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 0000018C 00008DE5 STR R0,[SP, #+0]
\ 00000190 00009DE5 LDR R0,[SP, #+0]
\ 00000194 4F0080E3 ORR R0,R0,#0x4F
\ 00000198 00008DE5 STR R0,[SP, #+0]
\ 0000019C 00009DE5 LDR R0,[SP, #+0]
\ 000001A0 0100C0E3 BIC R0,R0,#0x1
\ 000001A4 00008DE5 STR R0,[SP, #+0]
\ 000001A8 0400A0E1 MOV R0,R4
\ 000001AC 00209DE5 LDR R2,[SP, #+0]
\ 000001B0 002181E7 STR R2,[R1, +R0, LSL #+2]
\ ??UDP_EndpointHandler_8:
\ 000001B4 0400A0E1 MOV R0,R4
\ 000001B8 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 000001BC 010010E3 TST R0,#0x1
\ 000001C0 FBFFFF1A BNE ??UDP_EndpointHandler_8
511 UDP_WritePayload(bEndpoint);
\ 000001C4 0400A0E1 MOV R0,R4
\ 000001C8 ........ BL UDP_WritePayload
\ 000001CC 120000EA B ??UDP_EndpointHandler_0
512 }
513 }
514 }
515 else {
516 // Acknowledge interrupt
517 TRACE_ERROR("Error Wr");
\ ??UDP_EndpointHandler_1:
\ 000001D0 70029FE5 LDR R0,??UDP_EndpointHandler_9 ;; `?<Constant "-E- Error Wr">`
\ 000001D4 ........ BL printf
518 CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
\ 000001D8 0400A0E1 MOV R0,R4
\ 000001DC ........ LDR R1,??DataTable61 ;; 0xfffb0030
\ 000001E0 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 000001E4 00008DE5 STR R0,[SP, #+0]
\ 000001E8 00009DE5 LDR R0,[SP, #+0]
\ 000001EC 4F0080E3 ORR R0,R0,#0x4F
\ 000001F0 00008DE5 STR R0,[SP, #+0]
\ 000001F4 00009DE5 LDR R0,[SP, #+0]
\ 000001F8 0100C0E3 BIC R0,R0,#0x1
\ 000001FC 00008DE5 STR R0,[SP, #+0]
\ 00000200 0400A0E1 MOV R0,R4
\ 00000204 00209DE5 LDR R2,[SP, #+0]
\ 00000208 002181E7 STR R2,[R1, +R0, LSL #+2]
\ ??UDP_EndpointHandler_10:
\ 0000020C 0400A0E1 MOV R0,R4
\ 00000210 000191E7 LDR R0,[R1, +R0, LSL #+2]
\ 00000214 010010E3 TST R0,#0x1
\ 00000218 FBFFFF1A BNE ??UDP_EndpointHandler_10
519 }
520 }
521
522 // OUT packet received
523 if ((status & UDP_RXDATA) != 0) {
\ ??UDP_EndpointHandler_0:
\ 0000021C 420017E3 TST R7,#0x42
\ 00000220 2600000A BEQ ??UDP_EndpointHandler_11
524
525 TRACE_DEBUG_WP("Rd ");
526
527 // Check that the endpoint is in Receiving state
528 if (pEndpoint->state != UDP_ENDPOINT_RECEIVING) {
\ 00000224 0000D5E5 LDRB R0,[R5, #+0]
\ 00000228 040050E3 CMP R0,#+4
\ 0000022C 0F00000A BEQ ??UDP_EndpointHandler_12
529
530 // Check if an ACK has been received on a Control endpoint
531 if (((status & AT91C_UDP_EPTYPE) == AT91C_UDP_EPTYPE_CTRL)
532 && ((status & AT91C_UDP_RXBYTECNT) == 0)) {
\ 00000230 14029FE5 LDR R0,??UDP_EndpointHandler_9+0x4 ;; 0x7ff0700
\ 00000234 070010E1 TST R0,R7
\ 00000238 0200001A BNE ??UDP_EndpointHandler_13
533
534 // Acknowledge the data and finish the current transfer
535 UDP_ClearRxFlag(bEndpoint);
\ 0000023C 0400A0E1 MOV R0,R4
\ 00000240 ........ BL UDP_ClearRxFlag
536 UDP_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);
\ 00000244 1A0000EA B ??UDP_EndpointHandler_14
537 }
538 // Check if the data has been STALLed
539 else if ((status & AT91C_UDP_FORCESTALL) != 0) {
\ ??UDP_EndpointHandler_13:
\ 00000248 200017E3 TST R7,#0x20
\ 0000024C 0200000A BEQ ??UDP_EndpointHandler_15
540
541 // Discard STALLed data
542 TRACE_DEBUG_WP("Discard ");
543 UDP_ClearRxFlag(bEndpoint);
\ 00000250 0400A0E1 MOV R0,R4
\ 00000254 ........ BL UDP_ClearRxFlag
\ 00000258 180000EA B ??UDP_EndpointHandler_11
544 }
545 // NAK the data
546 else {
547
548 TRACE_DEBUG_WP("Nak ");
549 AT91C_BASE_UDP->UDP_IDR = 1 << bEndpoint;
\ ??UDP_EndpointHandler_15:
\ 0000025C 0100A0E3 MOV R0,#+1
\ 00000260 1004A0E1 LSL R0,R0,R4
\ 00000264 ........ LDR R1,??DataTable22 ;; 0xfffb0014
\ 00000268 000081E5 STR R0,[R1, #+0]
\ 0000026C 130000EA B ??UDP_EndpointHandler_11
550 }
551 }
552 // Endpoint is in Read state
553 else {
554
555 // Retrieve data and store it into the current transfer buffer
556 wPacketSize = (unsigned short) (status >> 16);
\ ??UDP_EndpointHandler_12:
\ 00000270 2788A0E1 LSR R8,R7,#+16
557 TRACE_DEBUG_WP("%d ", wPacketSize);
558 UDP_ReadPayload(bEndpoint, wPacketSize);
\ 00000274 0810A0E1 MOV R1,R8
\ 00000278 0400A0E1 MOV R0,R4
\ 0000027C ........ BL UDP_ReadPayload
559 UDP_ClearRxFlag(bEndpoint);
\ 00000280 0400A0E1 MOV R0,R4
\ 00000284 ........ BL UDP_ClearRxFlag
560
561 // Check if the transfer is finished
562 if ((pTransfer->remaining == 0) || (wPacketSize < pEndpoint->size)) {
\ 00000288 0C0096E5 LDR R0,[R6, #+12]
\ 0000028C 000050E3 CMP R0,#+0
\ 00000290 0200000A BEQ ??UDP_EndpointHandler_16
\ 00000294 B200D5E1 LDRH R0,[R5, #+2]
\ 00000298 000058E1 CMP R8,R0
\ 0000029C 0700002A BCS ??UDP_EndpointHandler_11
563
564 // Disable interrupt if this is not a control endpoint
565 if ((status & AT91C_UDP_EPTYPE) != AT91C_UDP_EPTYPE_CTRL) {
\ ??UDP_EndpointHandler_16:
\ 000002A0 700E17E3 TST R7,#0x700
566
567 AT91C_BASE_UDP->UDP_IDR = 1 << bEndpoint;
\ 000002A4 0100A013 MOVNE R0,#+1
\ 000002A8 1004A011 LSLNE R0,R0,R4
\ 000002AC ........ LDRNE R1,??DataTable22 ;; 0xfffb0014
\ 000002B0 00008115 STRNE R0,[R1, #+0]
568 }
569 UDP_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);
\ ??UDP_EndpointHandler_14:
\ 000002B4 0010A0E3 MOV R1,#+0
\ 000002B8 0400A0E1 MOV R0,R4
\ 000002BC ........ BL UDP_EndOfTransfer
570 }
571 }
572 }
573
574 // STALL sent
575 if ((status & AT91C_UDP_STALLSENT) != 0) {
\ ??UDP_EndpointHandler_11:
\ 000002C0 080017E3 TST R7,#0x8
\ 000002C4 2A00000A BEQ ??UDP_EndpointHandler_17
576
577 TRACE_WARNING( "Sta 0x%X [%d] ", status, bEndpoint);
\ 000002C8 0420A0E1 MOV R2,R4
\ 000002CC 0710A0E1 MOV R1,R7
\ 000002D0 78019FE5 LDR R0,??UDP_EndpointHandler_9+0x8 ;; `?<Constant "-W- Sta 0x%X [%d] ">`
\ 000002D4 ........ BL printf
578
579 // If the endpoint is not halted, clear the STALL condition
580 CLEAR_CSR(bEndpoint, AT91C_UDP_STALLSENT);
\ 000002D8 0400A0E1 MOV R0,R4
\ 000002DC ........ LDR R1,??DataTable61 ;; 0xfffb0030
\ 000002E0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -