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

📄 usbd_udp.lst

📁 本代bootloader通过usb下载代码首先存放在sdram中
💻 LST
📖 第 1 页 / 共 5 页
字号:
    399          
    400                  // Reset endpoint state
    401                  pEndpoint->bank = 0;
   \   00000030   0020A0E3           MOV      R2,#+0
   \   00000034   0120C1E5           STRB     R2,[R1, #+1]
    402                  pEndpoint->state = UDP_ENDPOINT_DISABLED;
   \   00000038   1C20C1E4           STRB     R2,[R1], #+28
    403              }
   \   0000003C   010080E2           ADD      R0,R0,#+1
   \   00000040   FF2000E2           AND      R2,R0,#0xFF
   \   00000044   080052E3           CMP      R2,#+8
   \   00000048   EEFFFF3A           BCC      ??UDP_ResetEndpoints_0
    404          }
   \   0000004C   1EFF2FE1           BX       LR               ;; return
    405          
    406          //------------------------------------------------------------------------------
    407          /// Disable all endpoints (except control endpoint 0), aborting current 
    408          /// transfers if necessary
    409          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    410          static void UDP_DisableEndpoints( void )
    411          
    412          {
   \                     UDP_DisableEndpoints:
   \   00000000   31402DE9           PUSH     {R0,R4,R5,LR}
    413              unsigned char bEndpoint;
    414          
    415              // Disable each endpoint, terminating any pending transfer
    416              // Control endpoint 0 is not disabled
    417              for (bEndpoint = 1; bEndpoint < BOARD_USB_NUMENDPOINTS; bEndpoint++) {
   \   00000004   0140A0E3           MOV      R4,#+1
   \   00000008   28509FE5           LDR      R5,??UDP_DisableEndpoints_0  ;; endpoints + 28
    418          
    419                  UDP_EndOfTransfer(bEndpoint, USBD_STATUS_ABORTED);
   \                     ??UDP_DisableEndpoints_1:
   \   0000000C   0210A0E3           MOV      R1,#+2
   \   00000010   FF0004E2           AND      R0,R4,#0xFF
   \   00000014   ........           BL       UDP_EndOfTransfer
    420                  endpoints[bEndpoint].state = UDP_ENDPOINT_DISABLED;
   \   00000018   0000A0E3           MOV      R0,#+0
   \   0000001C   1C00C5E4           STRB     R0,[R5], #+28
    421              }
   \   00000020   014084E2           ADD      R4,R4,#+1
   \   00000024   FF0004E2           AND      R0,R4,#0xFF
   \   00000028   080050E3           CMP      R0,#+8
   \   0000002C   F6FFFF3A           BCC      ??UDP_DisableEndpoints_1
    422          }
   \   00000030   3840BDE8           POP      {R3-R5,LR}
   \   00000034   1EFF2FE1           BX       LR               ;; return
   \                     ??UDP_DisableEndpoints_0:
   \   00000038   ........           DC32     endpoints + 28
    423          
    424          //------------------------------------------------------------------------------
    425          /// Checks if an ongoing transfer on an endpoint has been completed.
    426          /// \param bEndpoint Endpoint number.
    427          /// \return 1 if the current transfer on the given endpoint is complete;
    428          ///         otherwise 0.
    429          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    430          static unsigned char UDP_IsTransferFinished(unsigned char bEndpoint)
    431          {
    432              Endpoint *pEndpoint = &(endpoints[bEndpoint]);
   \                     UDP_IsTransferFinished:
   \   00000000   0010A0E1           MOV      R1,R0
   \   00000004   1C20A0E3           MOV      R2,#+28
   \   00000008   ........           LDR      R3,??DataTable60  ;; endpoints
   \   0000000C   923121E0           MLA      R1,R2,R1,R3
    433              Transfer *pTransfer = &(pEndpoint->transfer);
   \   00000010   042081E2           ADD      R2,R1,#+4
    434          
    435              // Check if it is a Control endpoint
    436              //  -> Control endpoint must always finish their transfer with a zero-length
    437              //     packet
    438              if ((AT91C_BASE_UDP->UDP_CSR[bEndpoint] & AT91C_UDP_EPTYPE)
    439                  == AT91C_UDP_EPTYPE_CTRL) {
   \   00000014   ........           LDR      R3,??DataTable61  ;; 0xfffb0030
   \   00000018   000193E7           LDR      R0,[R3, +R0, LSL #+2]
   \   0000001C   700E10E3           TST      R0,#0x700
   \   00000020   0500001A           BNE      ??UDP_IsTransferFinished_0
    440          
    441                  return (pTransfer->buffered < pEndpoint->size);
                                                                       ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement
   \   00000024   040092E5           LDR      R0,[R2, #+4]
   \   00000028   B210D1E1           LDRH     R1,[R1, #+2]
   \   0000002C   010050E1           CMP      R0,R1
   \   00000030   0A0000AA           BGE      ??UDP_IsTransferFinished_1
   \   00000034   0100A0E3           MOV      R0,#+1
   \   00000038   1EFF2FE1           BX       LR
    442              }
    443              // Other endpoints only need to transfer all the data
    444              else {
    445          
    446                  return (pTransfer->buffered <= pEndpoint->size)
    447                         && (pTransfer->remaining == 0);
                                                              ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement
   \                     ??UDP_IsTransferFinished_0:
   \   0000003C   B200D1E1           LDRH     R0,[R1, #+2]
   \   00000040   041092E5           LDR      R1,[R2, #+4]
   \   00000044   010050E1           CMP      R0,R1
   \   00000048   040000BA           BLT      ??UDP_IsTransferFinished_1
   \   0000004C   0C0092E5           LDR      R0,[R2, #+12]
   \   00000050   000050E3           CMP      R0,#+0
   \   00000054   0000A013           MOVNE    R0,#+0
   \   00000058   0100A003           MOVEQ    R0,#+1
   \   0000005C   1EFF2FE1           BX       LR
   \                     ??UDP_IsTransferFinished_1:
   \   00000060   0000A0E3           MOV      R0,#+0
   \   00000064   1EFF2FE1           BX       LR               ;; return
    448              }
    449          }
    450          
    451          //------------------------------------------------------------------------------
    452          /// Endpoint interrupt handler.
    453          /// Handle IN/OUT transfers, received SETUP packets and STALLing
    454          /// \param bEndpoint Index of endpoint
    455          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    456          static void UDP_EndpointHandler(unsigned char bEndpoint)
    457          {
   \                     UDP_EndpointHandler:
   \   00000000   FF412DE9           PUSH     {R0-R8,LR}
   \   00000004   0040A0E1           MOV      R4,R0
    458              Endpoint *pEndpoint = &(endpoints[bEndpoint]);
   \   00000008   1C10A0E3           MOV      R1,#+28
   \   0000000C   ........           LDR      R2,??DataTable60  ;; endpoints
   \   00000010   912025E0           MLA      R5,R1,R0,R2
    459              Transfer *pTransfer = &(pEndpoint->transfer);
   \   00000014   046085E2           ADD      R6,R5,#+4
    460              unsigned int status = AT91C_BASE_UDP->UDP_CSR[bEndpoint];
   \   00000018   ........           LDR      R1,??DataTable61  ;; 0xfffb0030
   \   0000001C   007191E7           LDR      R7,[R1, +R0, LSL #+2]
    461              unsigned short wPacketSize;
    462              USBGenericRequest request;
    463          
    464              TRACE_DEBUG_WP("E%d ", bEndpoint);
    465              TRACE_DEBUG_WP("st:0x%X ", status);
    466          
    467              // Handle interrupts
    468              // IN packet sent
    469              if ((status & AT91C_UDP_TXCOMP) != 0) {
   \   00000020   010017E3           TST      R7,#0x1
   \   00000024   7C00000A           BEQ      ??UDP_EndpointHandler_0
    470          
    471                  TRACE_DEBUG_WP("Wr ");
    472          
    473                  // Check that endpoint was in Sending state
    474                  if (pEndpoint->state == UDP_ENDPOINT_SENDING) {
   \   00000028   0000D5E5           LDRB     R0,[R5, #+0]
   \   0000002C   030050E3           CMP      R0,#+3
   \   00000030   6600001A           BNE      ??UDP_EndpointHandler_1
    475          
    476                      // End of transfer ?
    477                      if (UDP_IsTransferFinished(bEndpoint)) {
   \   00000034   0400A0E1           MOV      R0,R4
   \   00000038   ........           BL       UDP_IsTransferFinished
   \   0000003C   000050E3           CMP      R0,#+0
   \   00000040   080096E5           LDR      R0,[R6, #+8]
   \   00000044   1E00000A           BEQ      ??UDP_EndpointHandler_2
    478          
    479                          pTransfer->transferred += pTransfer->buffered;
                                                                              ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement
   \   00000048   041096E5           LDR      R1,[R6, #+4]
   \   0000004C   000081E0           ADD      R0,R1,R0
   \   00000050   080086E5           STR      R0,[R6, #+8]
    480                          pTransfer->buffered = 0;
   \   00000054   0000A0E3           MOV      R0,#+0
   \   00000058   040086E5           STR      R0,[R6, #+4]
    481          
    482                          // Disable interrupt if this is not a control endpoint
    483                          if ((status & AT91C_UDP_EPTYPE) != AT91C_UDP_EPTYPE_CTRL) {
   \   0000005C   700E17E3           TST      R7,#0x700
    484          
    485                              AT91C_BASE_UDP->UDP_IDR = 1 << bEndpoint;
   \   00000060   0100A013           MOVNE    R0,#+1
   \   00000064   1004A011           LSLNE    R0,R0,R4
   \   00000068   ........           LDRNE    R1,??DataTable22  ;; 0xfffb0014
   \   0000006C   00008115           STRNE    R0,[R1, #+0]
    486                          }
    487          
    488                          UDP_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);
   \   00000070   0010A0E3           MOV      R1,#+0
   \   00000074   0400A0E1           MOV      R0,R4
   \   00000078   ........           BL       UDP_EndOfTransfer
    489                          CLEAR_CSR(bEndpoint, AT91C_UDP_TXCOMP);
   \   0000007C   0400A0E1           MOV      R0,R4
   \   00000080   ........           LDR      R1,??DataTable61  ;; 0xfffb0030
   \                     ??UDP_EndpointHandler_3:
   \   00000084   000191E7           LDR      R0,[R1, +R0, LSL #+2]
   \   00000088   00008DE5           STR      R0,[SP, #+0]
   \   0000008C   00009DE5           LDR      R0,[SP, #+0]
   \   00000090   4F0080E3           ORR      R0,R0,#0x4F
   \   00000094   00008DE5           STR      R0,[SP, #+0]
   \   00000098   00009DE5           LDR      R0,[SP, #+0]
   \   0000009C   0100C0E3           BIC      R0,R0,#0x1
   \   000000A0   00008DE5           STR      R0,[SP, #+0]
   \   000000A4   0400A0E1           MOV      R0,R4
   \   000000A8   00209DE5           LDR      R2,[SP, #+0]
   \   000000AC   002181E7           STR      R2,[R1, +R0, LSL #+2]
   \                     ??UDP_EndpointHandler_4:
   \   000000B0   0400A0E1           MOV      R0,R4
   \   000000B4   000191E7           LDR      R0,[R1, +R0, LSL #+2]
   \   000000B8   010010E3           TST      R0,#0x1
   \   000000BC   FBFFFF1A           BNE      ??UDP_EndpointHandler_4
   \   000000C0   550000EA           B        ??UDP_EndpointHandler_0
    490                      }
    491                      else {
    492          
    493                          // Transfer remaining data
    494                          TRACE_DEBUG_WP(" %d ", pEndpoint->size);
    495          
    496                          pTransfer->transferred += pEndpoint->size;
                                                                          ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement
   \                     ??UDP_EndpointHandler_2:
   \   000000C4   B210D5E1           LDRH     R1,[R5, #+2]
   \   000000C8   000081E0           ADD      R0,R1,R0
   \   000000CC   080086E5           STR      R0,[R6, #+8]
    497                          pTransfer->buffered -= pEndpoint->size;
                                                                       ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -