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

📄 usbd_udp.lst

📁 本代bootloader通过usb下载代码首先存放在sdram中
💻 LST
📖 第 1 页 / 共 5 页
字号:
    289                  }
    290              }
    291              else {
    292          
    293                  CLEAR_CSR(bEndpoint, AT91C_UDP_RX_DATA_BK1);
   \                     ??UDP_ClearRxFlag_0:
   \   00000078   4020C2E3           BIC      R2,R2,#0x40
   \   0000007C   00208DE5           STR      R2,[SP, #+0]
   \   00000080   0020A0E1           MOV      R2,R0
   \   00000084   00C09DE5           LDR      R12,[SP, #+0]
   \   00000088   02C183E7           STR      R12,[R3, +R2, LSL #+2]
   \                     ??UDP_ClearRxFlag_4:
   \   0000008C   0020A0E1           MOV      R2,R0
   \   00000090   022193E7           LDR      R2,[R3, +R2, LSL #+2]
   \   00000094   400012E3           TST      R2,#0x40
   \   00000098   FBFFFF1A           BNE      ??UDP_ClearRxFlag_4
    294                  pEndpoint->bank = 0;
   \   0000009C   0000A0E3           MOV      R0,#+0
   \                     ??UDP_ClearRxFlag_3:
   \   000000A0   0100C1E5           STRB     R0,[R1, #+1]
    295              }
    296          }
   \                     ??UDP_ClearRxFlag_2:
   \   000000A4   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   000000A8   1EFF2FE1           BX       LR               ;; return
    297          
    298          //------------------------------------------------------------------------------
    299          /// Transfers a data payload from the current tranfer buffer to the endpoint
    300          /// FIFO
    301          /// \param bEndpoint Number of the endpoint which is sending data.
    302          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    303          static void UDP_WritePayload(unsigned char bEndpoint)
    304          {
   \                     UDP_WritePayload:
   \   00000000   01402DE9           PUSH     {R0,LR}
    305              Endpoint *pEndpoint = &(endpoints[bEndpoint]);
   \   00000004   1C30A0E3           MOV      R3,#+28
   \   00000008   ........           LDR      R2,??DataTable60  ;; endpoints
   \   0000000C   932022E0           MLA      R2,R3,R0,R2
    306              Transfer *pTransfer = &(pEndpoint->transfer);
   \   00000010   041082E2           ADD      R1,R2,#+4
    307              signed int size;
    308          
    309              // Get the number of bytes to send
    310              size = pEndpoint->size;
   \   00000014   B220D2E1           LDRH     R2,[R2, #+2]
    311              if (size > pTransfer->remaining) {
   \   00000018   0C3091E5           LDR      R3,[R1, #+12]
   \   0000001C   020053E1           CMP      R3,R2
    312          
    313                  size = pTransfer->remaining;
   \   00000020   0C2091B5           LDRLT    R2,[R1, #+12]
    314              }
    315          
    316              // Update transfer descriptor information
    317              pTransfer->buffered += size;
   \   00000024   043091E5           LDR      R3,[R1, #+4]
   \   00000028   033082E0           ADD      R3,R2,R3
   \   0000002C   043081E5           STR      R3,[R1, #+4]
    318              pTransfer->remaining -= size;
   \   00000030   0C3091E5           LDR      R3,[R1, #+12]
   \   00000034   023043E0           SUB      R3,R3,R2
   \   00000038   0C3081E5           STR      R3,[R1, #+12]
   \   0000003C   010052E3           CMP      R2,#+1
   \   00000040   ........           LDR      R12,??DataTable10  ;; 0xfffb0050
   \   00000044   090000BA           BLT      ??UDP_WritePayload_0
    319          
    320              // Write packet in the FIFO buffer
    321              while (size > 0) {
    322          
    323                  AT91C_BASE_UDP->UDP_FDR[bEndpoint] = *(pTransfer->pData);
   \                     ??UDP_WritePayload_1:
   \   00000048   0030A0E1           MOV      R3,R0
   \   0000004C   00E091E5           LDR      LR,[R1, #+0]
   \   00000050   00E0DEE5           LDRB     LR,[LR, #+0]
   \   00000054   03E18CE7           STR      LR,[R12, +R3, LSL #+2]
    324                  pTransfer->pData++;
   \   00000058   003091E5           LDR      R3,[R1, #+0]
   \   0000005C   013083E2           ADD      R3,R3,#+1
   \   00000060   003081E5           STR      R3,[R1, #+0]
    325                  size--;
   \   00000064   012042E2           SUB      R2,R2,#+1
    326              }
   \   00000068   010052E3           CMP      R2,#+1
   \   0000006C   F5FFFFAA           BGE      ??UDP_WritePayload_1
    327          }
   \                     ??UDP_WritePayload_0:
   \   00000070   0050BDE8           POP      {R12,LR}
   \   00000074   1EFF2FE1           BX       LR               ;; return
    328          
    329          
    330          //------------------------------------------------------------------------------
    331          /// Transfers a data payload from an endpoint FIFO to the current transfer buffer
    332          /// \param bEndpoint Endpoint number.
    333          /// \param wPacketSize Size of received data packet
    334          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    335          static void UDP_ReadPayload(unsigned char bEndpoint, int wPacketSize)
    336          {
    337              Endpoint *pEndpoint = &(endpoints[bEndpoint]);
    338              Transfer *pTransfer = &(pEndpoint->transfer);
   \                     UDP_ReadPayload:
   \   00000000   0020A0E1           MOV      R2,R0
   \   00000004   1C30A0E3           MOV      R3,#+28
   \   00000008   ........           LDR      R12,??DataTable60  ;; endpoints
   \   0000000C   93C222E0           MLA      R2,R3,R2,R12
   \   00000010   042082E2           ADD      R2,R2,#+4
    339          
    340              // Check that the requested size is not bigger than the remaining transfer
    341              if (wPacketSize > pTransfer->remaining) {
   \   00000014   0C3092E5           LDR      R3,[R2, #+12]
   \   00000018   010053E1           CMP      R3,R1
   \   0000001C   050000AA           BGE      ??UDP_ReadPayload_0
    342          
    343                  pTransfer->buffered += wPacketSize - pTransfer->remaining;
                                                                                  ^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
          undefined in this statement
   \   00000020   043092E5           LDR      R3,[R2, #+4]
   \   00000024   031081E0           ADD      R1,R1,R3
   \   00000028   0C3092E5           LDR      R3,[R2, #+12]
   \   0000002C   031041E0           SUB      R1,R1,R3
   \   00000030   041082E5           STR      R1,[R2, #+4]
    344                  wPacketSize = pTransfer->remaining;
   \   00000034   0C1092E5           LDR      R1,[R2, #+12]
    345              }
    346          
    347              // Update transfer descriptor information
    348              pTransfer->remaining -= wPacketSize;
   \                     ??UDP_ReadPayload_0:
   \   00000038   0C3092E5           LDR      R3,[R2, #+12]
   \   0000003C   013043E0           SUB      R3,R3,R1
   \   00000040   0C3082E5           STR      R3,[R2, #+12]
    349              pTransfer->transferred += wPacketSize;
   \   00000044   083092E5           LDR      R3,[R2, #+8]
   \   00000048   033081E0           ADD      R3,R1,R3
   \   0000004C   083082E5           STR      R3,[R2, #+8]
   \   00000050   010051E3           CMP      R1,#+1
   \   00000054   1EFF2FB1           BXLT     LR
    350          
    351              // Retrieve packet
    352              while (wPacketSize > 0) {
    353          
    354                  *(pTransfer->pData) = (char) AT91C_BASE_UDP->UDP_FDR[bEndpoint];
   \                     ??UDP_ReadPayload_1:
   \   00000058   0030A0E1           MOV      R3,R0
   \   0000005C   ........           LDR      R12,??DataTable10  ;; 0xfffb0050
   \   00000060   03319CE7           LDR      R3,[R12, +R3, LSL #+2]
   \   00000064   00C092E5           LDR      R12,[R2, #+0]
   \   00000068   0030CCE5           STRB     R3,[R12, #+0]
    355                  pTransfer->pData++;
   \   0000006C   003092E5           LDR      R3,[R2, #+0]
   \   00000070   013083E2           ADD      R3,R3,#+1
   \   00000074   003082E5           STR      R3,[R2, #+0]
    356                  wPacketSize--;
   \   00000078   011041E2           SUB      R1,R1,#+1
    357              }
   \   0000007C   010051E3           CMP      R1,#+1
   \   00000080   F4FFFFAA           BGE      ??UDP_ReadPayload_1
    358          }
   \   00000084   1EFF2FE1           BX       LR               ;; return
    359          
    360          //------------------------------------------------------------------------------
    361          /// Received SETUP packet from endpoint 0 FIFO
    362          /// \param pRequest Generic USB SETUP request sent over Control endpoints
    363          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    364          static void UDP_ReadRequest(USBGenericRequest *pRequest)
    365          {
    366              unsigned char *pData = (unsigned char *)pRequest;
    367              unsigned int i;
    368          
    369              // Copy packet
    370              for (i = 0; i < 8; i++) {
   \                     UDP_ReadRequest:
   \   00000000   0810A0E3           MOV      R1,#+8
    371          
    372                  *pData = (unsigned char) AT91C_BASE_UDP->UDP_FDR[0];
   \                     ??UDP_ReadRequest_0:
   \   00000004   ........           LDR      R2,??DataTable10  ;; 0xfffb0050
   \   00000008   002092E5           LDR      R2,[R2, #+0]
   \   0000000C   0120C0E4           STRB     R2,[R0], #+1
    373                  pData++;
    374              }
   \   00000010   011051E2           SUBS     R1,R1,#+1
   \   00000014   FAFFFF1A           BNE      ??UDP_ReadRequest_0
    375          }
   \   00000018   1EFF2FE1           BX       LR               ;; return
    376          
    377          //------------------------------------------------------------------------------
    378          /// Reset all endpoint transfer descriptors
    379          //------------------------------------------------------------------------------

   \                                 In section .text, align 4, keep-with-next
    380          static void UDP_ResetEndpoints( void )
    381          {
    382              Endpoint *pEndpoint;
    383              Transfer *pTransfer;
    384              unsigned char bEndpoint;
    385          
    386              // Reset the transfer descriptor of every endpoint
    387              for (bEndpoint = 0; bEndpoint < BOARD_USB_NUMENDPOINTS; bEndpoint++) {
   \                     UDP_ResetEndpoints:
   \   00000000   0000A0E3           MOV      R0,#+0
   \   00000004   ........           LDR      R1,??DataTable60  ;; endpoints
    388          
    389                  pEndpoint = &(endpoints[bEndpoint]);
    390                  pTransfer = &(pEndpoint->transfer);
   \                     ??UDP_ResetEndpoints_0:
   \   00000008   042081E2           ADD      R2,R1,#+4
    391          
    392                  // Reset endpoint transfer descriptor
    393                  pTransfer->pData = 0;
   \   0000000C   0030A0E3           MOV      R3,#+0
   \   00000010   003082E5           STR      R3,[R2, #+0]
    394                  pTransfer->transferred = -1;
   \   00000014   0330E0E1           MVN      R3,R3
   \   00000018   083082E5           STR      R3,[R2, #+8]
    395                  pTransfer->buffered = -1;
   \   0000001C   043082E5           STR      R3,[R2, #+4]
    396                  pTransfer->remaining = -1;
   \   00000020   0C3082E5           STR      R3,[R2, #+12]
    397                  pTransfer->fCallback = 0;
   \   00000024   0030A0E3           MOV      R3,#+0
   \   00000028   103082E5           STR      R3,[R2, #+16]
    398                  pTransfer->pArgument = 0;
   \   0000002C   143082E5           STR      R3,[R2, #+20]

⌨️ 快捷键说明

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