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

📄 usbd_udp.lst

📁 ATmel的AT91sam7SE芯片 USB固件开发源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000004   C00FC0E3           BIC      R0,R0,#0x300
   \   00000008   801EA0E3           MOV      R1,#+2048
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    169          }
   \   00000010   1EFF2FE1           BX       LR               ;; return
    170          

   \                                 In section .text, align 4, keep-with-next
    171          static inline void UDP_DisablePeripheralClock()
    172          {
    173              AT91C_BASE_PMC->PMC_PCDR = 1 << AT91C_ID_UDP;
   \                     UDP_DisablePeripheralClock:
   \   00000000   EB00E0E3           MVN      R0,#+235
   \   00000004   C00FC0E3           BIC      R0,R0,#0x300
   \   00000008   801EA0E3           MOV      R1,#+2048
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    174          }
   \   00000010   1EFF2FE1           BX       LR               ;; return
    175          
    176          /*
    177              Functions: USB clock
    178                  EnableUsbClock - Enables the 48MHz USB clock.
    179                  DisableUsbClock - Disables the 48MHz USB clock.
    180          */

   \                                 In section .text, align 4, keep-with-next
    181          static inline void UDP_EnableUsbClock()
    182          {
    183              AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP;
   \                     UDP_EnableUsbClock:
   \   00000000   FF00E0E3           MVN      R0,#+255
   \   00000004   C00FC0E3           BIC      R0,R0,#0x300
   \   00000008   8010A0E3           MOV      R1,#+128
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    184          }
   \   00000010   1EFF2FE1           BX       LR               ;; return
    185          

   \                                 In section .text, align 4, keep-with-next
    186          static inline void UDP_DisableUsbClock()
    187          {
    188              AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_UDP;
   \                     UDP_DisableUsbClock:
   \   00000000   FB00E0E3           MVN      R0,#+251
   \   00000004   C00FC0E3           BIC      R0,R0,#0x300
   \   00000008   8010A0E3           MOV      R1,#+128
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    189          }
   \   00000010   1EFF2FE1           BX       LR               ;; return
    190          
    191          /*
    192              Functions: Transceiver
    193                  UDP_EnableTransceiver - Enables the UDP transceiver.
    194                  UDP_DisableTransceiver - Disables the UDP transceiver.
    195          */

   \                                 In section .text, align 4, keep-with-next
    196          static inline void UDP_EnableTransceiver()
    197          {
    198              AT91C_BASE_UDP->UDP_TXVC &= ~AT91C_UDP_TXVDIS;
   \                     UDP_EnableTransceiver:
   \   00000000   ........           LDR      R0,??DataTable3  ;; 0xfffb0074
   \   00000004   000090E5           LDR      R0,[R0, #+0]
   \   00000008   400FD0E3           BICS     R0,R0,#0x100
   \   0000000C   ........           LDR      R1,??DataTable3  ;; 0xfffb0074
   \   00000010   000081E5           STR      R0,[R1, #+0]
    199          }
   \   00000014   1EFF2FE1           BX       LR               ;; return
    200          

   \                                 In section .text, align 4, keep-with-next
    201          static inline void UDP_DisableTransceiver()
    202          {
    203              AT91C_BASE_UDP->UDP_TXVC |= AT91C_UDP_TXVDIS;
   \                     UDP_DisableTransceiver:
   \   00000000   ........           LDR      R0,??DataTable3  ;; 0xfffb0074
   \   00000004   000090E5           LDR      R0,[R0, #+0]
   \   00000008   400F90E3           ORRS     R0,R0,#0x100
   \   0000000C   ........           LDR      R1,??DataTable3  ;; 0xfffb0074
   \   00000010   000081E5           STR      R0,[R1, #+0]
    204          }
   \   00000014   1EFF2FE1           BX       LR               ;; return
    205          
    206          /*
    207              Function: UDP_EndOfTransfer
    208                  Handles a completed transfer on the given endpoint, invoking the
    209                  configured callback if any.
    210          
    211              Parameters:
    212                  eptnum - Number of the endpoint for which the transfer has completed.
    213                  status - Result of the USB transfer.
    214          */

   \                                 In section .text, align 4, keep-with-next
    215          static void UDP_EndOfTransfer(unsigned char eptnum, char status)
    216          {
   \                     UDP_EndOfTransfer:
   \   00000000   F1402DE9           PUSH     {R0,R4-R7,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
    217              Endpoint *endpoint = &(endpoints[eptnum]);
   \   0000000C   0400B0E1           MOVS     R0,R4
   \   00000010   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   00000014   1C10A0E3           MOV      R1,#+28
   \   00000018   ........           LDR      R2,??DataTable68  ;; endpoints
   \   0000001C   912020E0           MLA      R0,R1,R0,R2
   \   00000020   0060B0E1           MOVS     R6,R0
    218              Transfer *transfer = &(endpoint->transfer);
   \   00000024   040096E2           ADDS     R0,R6,#+4
   \   00000028   0070B0E1           MOVS     R7,R0
    219          
    220              // Check that endpoint was sending or receiving data
    221              if ((endpoint->state == UDP_ENDPOINT_RECEIVING)
    222                  || (endpoint->state == UDP_ENDPOINT_SENDING)) {
   \   0000002C   0000D6E5           LDRB     R0,[R6, #+0]
   \   00000030   040050E3           CMP      R0,#+4
   \   00000034   0200000A           BEQ      ??UDP_EndOfTransfer_0
   \   00000038   0000D6E5           LDRB     R0,[R6, #+0]
   \   0000003C   030050E3           CMP      R0,#+3
   \   00000040   1000001A           BNE      ??UDP_EndOfTransfer_1
    223          
    224                  trace_LOG(trace_INFO, "EoT ");
   \                     ??UDP_EndOfTransfer_0:
   \   00000044   44009FE5           LDR      R0,??UDP_EndOfTransfer_2  ;; `?<Constant "EoT ">`
   \   00000048   ........           BL       printf
    225          
    226                  // Endpoint returns in Idle state
    227                  endpoint->state = UDP_ENDPOINT_IDLE;
   \   0000004C   0200A0E3           MOV      R0,#+2
   \   00000050   0000C6E5           STRB     R0,[R6, #+0]
    228          
    229                  // Invoke callback is present
    230                  if (transfer->callback != 0) {
   \   00000054   100097E5           LDR      R0,[R7, #+16]
   \   00000058   000050E3           CMP      R0,#+0
   \   0000005C   0900000A           BEQ      ??UDP_EndOfTransfer_1
    231          
    232                      ((TransferCallback) transfer->callback)
    233                          (transfer->argument,
    234                           status,
    235                           transfer->transferred,
    236                           transfer->remaining + transfer->buffered);
   \   00000060   0C0097E5           LDR      R0,[R7, #+12]
   \   00000064   041097E5           LDR      R1,[R7, #+4]
   \   00000068   003091E0           ADDS     R3,R1,R0
   \   0000006C   082097E5           LDR      R2,[R7, #+8]
   \   00000070   0510B0E1           MOVS     R1,R5
   \   00000074   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   00000078   140097E5           LDR      R0,[R7, #+20]
   \   0000007C   10C097E5           LDR      R12,[R7, #+16]
   \   00000080   0FE0A0E1           MOV      LR,PC
   \   00000084   1CFF2FE1           BX       R12
    237                  }
    238              }
    239          }
   \                     ??UDP_EndOfTransfer_1:
   \   00000088   F840BDE8           POP      {R3-R7,LR}
   \   0000008C   1EFF2FE1           BX       LR               ;; return
   \                     ??UDP_EndOfTransfer_2:
   \   00000090   ........           DC32     `?<Constant "EoT ">`
    240          
    241          /*
    242              Function: UDP_ClearRxFlag
    243                  Clears the correct reception flag (bank 0 or bank 1) of an endpoint.
    244          
    245              Parameters:
    246                  eptnum - Number of an endpoint.
    247          */

   \                                 In section .text, align 4, keep-with-next
    248          static void UDP_ClearRxFlag(unsigned char eptnum)
    249          {
   \                     UDP_ClearRxFlag:
   \   00000000   01402DE9           PUSH     {R0,LR}
    250              Endpoint *endpoint = &(endpoints[eptnum]);
   \   00000004   0020B0E1           MOVS     R2,R0
   \   00000008   FF2012E2           ANDS     R2,R2,#0xFF      ;; Zero extend
   \   0000000C   1C30A0E3           MOV      R3,#+28
   \   00000010   ........           LDR      R12,??DataTable68  ;; endpoints
   \   00000014   93C222E0           MLA      R2,R3,R2,R12
   \   00000018   0210B0E1           MOVS     R1,R2
    251          
    252              // Clear flag and change banks
    253              if (endpoint->bank == 0) {
   \   0000001C   0120D1E5           LDRB     R2,[R1, #+1]
   \   00000020   000052E3           CMP      R2,#+0
   \   00000024   1A00001A           BNE      ??UDP_ClearRxFlag_0
    254          
    255                  CLEAR_CSR(eptnum, AT91C_UDP_RX_DATA_BK0);
   \   00000028   0020B0E1           MOVS     R2,R0
   \   0000002C   FF2012E2           ANDS     R2,R2,#0xFF      ;; Zero extend
   \   00000030   0430A0E3           MOV      R3,#+4
   \   00000034   ........           LDR      R12,??DataTable70  ;; 0xfffb0030
   \   00000038   93C222E0           MLA      R2,R3,R2,R12
   \   0000003C   002092E5           LDR      R2,[R2, #+0]
   \   00000040   0220D2E3           BICS     R2,R2,#0x2
   \   00000044   0030B0E1           MOVS     R3,R0
   \   00000048   FF3013E2           ANDS     R3,R3,#0xFF      ;; Zero extend
   \   0000004C   04C0A0E3           MOV      R12,#+4
   \   00000050   ........           LDR      LR,??DataTable70  ;; 0xfffb0030
   \   00000054   9CE323E0           MLA      R3,R12,R3,LR
   \   00000058   002083E5           STR      R2,[R3, #+0]
    256          
    257                  // Swap bank if in dual-fifo mode
    258                  if (BOARD_USB_ENDPOINTS_BANKS(eptnum) > 1) {
   \   0000005C   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   00000060   000050E3           CMP      R0,#+0
   \   00000064   0200000A           BEQ      ??UDP_ClearRxFlag_1
   \   00000068   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   0000006C   030050E3           CMP      R0,#+3
   \   00000070   0100001A           BNE      ??UDP_ClearRxFlag_2
   \                     ??UDP_ClearRxFlag_1:
   \   00000074   0120A0E3           MOV      R2,#+1
   \   00000078   000000EA           B        ??UDP_ClearRxFlag_3
   \                     ??UDP_ClearRxFlag_2:
   \   0000007C   0220A0E3           MOV      R2,#+2
   \                     ??UDP_ClearRxFlag_3:
   \   00000080   020052E3           CMP      R2,#+2
   \   00000084   110000BA           BLT      ??UDP_ClearRxFlag_4
    259          
    260                      endpoint->bank = 1;
   \   00000088   0120A0E3           MOV      R2,#+1
   \   0000008C   0120C1E5           STRB     R2,[R1, #+1]
   \   00000090   0E0000EA           B        ??UDP_ClearRxFlag_4
    261                  }
    262              }
    263              else {
    264          
    265                  CLEAR_CSR(eptnum, AT91C_UDP_RX_DATA_BK1);
   \                     ??UDP_ClearRxFlag_0:
   \   00000094   0020B0E1           MOVS     R2,R0
   \   00000098   FF2012E2           ANDS     R2,R2,#0xFF      ;; Zero extend
   \   0000009C   0430A0E3           MOV      R3,#+4
   \   000000A0   ........           LDR      R12,??DataTable70  ;; 0xfffb0030
   \   000000A4   93C222E0           MLA      R2,R3,R2,R12
   \   000000A8   002092E5           LDR      R2,[R2, #+0]

⌨️ 快捷键说明

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