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

📄 usbddriver.lst

📁 ATmel的AT91sam7SE芯片 USB固件开发源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000030   000050E3           CMP      R0,#+0
   \   00000034   0E00000A           BEQ      ??GetDescriptor_1
    206          
    207                  trace_LOG(trace_DEBUG, "HS ");
   \   00000038   A40F8FE2           ADR      R0,??GetDescriptor_2  ;; "HS "
   \   0000003C   ........           BL       printf
    208                  pDevice = pDriver->pDescriptors->pHsDevice;
   \   00000040   000094E5           LDR      R0,[R4, #+0]
   \   00000044   100090E5           LDR      R0,[R0, #+16]
   \   00000048   0070B0E1           MOVS     R7,R0
    209                  pConfiguration = pDriver->pDescriptors->pHsConfiguration;
   \   0000004C   000094E5           LDR      R0,[R4, #+0]
   \   00000050   140090E5           LDR      R0,[R0, #+20]
   \   00000054   0080B0E1           MOVS     R8,R0
    210                  pQualifier = pDriver->pDescriptors->pHsQualifier;
   \   00000058   000094E5           LDR      R0,[R4, #+0]
   \   0000005C   180090E5           LDR      R0,[R0, #+24]
   \   00000060   0090B0E1           MOVS     R9,R0
    211                  pOtherSpeed = pDriver->pDescriptors->pHsOtherSpeed;
   \   00000064   000094E5           LDR      R0,[R4, #+0]
   \   00000068   1C0090E5           LDR      R0,[R0, #+28]
   \   0000006C   00A0B0E1           MOVS     R10,R0
   \   00000070   0D0000EA           B        ??GetDescriptor_3
    212              }
    213              else {
    214          
    215                  trace_LOG(trace_DEBUG, "FS ");
   \                     ??GetDescriptor_1:
   \   00000074   960F8FE2           ADR      R0,??GetDescriptor_2+0x4  ;; "FS "
   \   00000078   ........           BL       printf
    216                  pDevice = pDriver->pDescriptors->pFsDevice;
   \   0000007C   000094E5           LDR      R0,[R4, #+0]
   \   00000080   000090E5           LDR      R0,[R0, #+0]
   \   00000084   0070B0E1           MOVS     R7,R0
    217                  pConfiguration = pDriver->pDescriptors->pFsConfiguration;
   \   00000088   000094E5           LDR      R0,[R4, #+0]
   \   0000008C   040090E5           LDR      R0,[R0, #+4]
   \   00000090   0080B0E1           MOVS     R8,R0
    218                  pQualifier = pDriver->pDescriptors->pFsQualifier;
   \   00000094   000094E5           LDR      R0,[R4, #+0]
   \   00000098   080090E5           LDR      R0,[R0, #+8]
   \   0000009C   0090B0E1           MOVS     R9,R0
    219                  pOtherSpeed = pDriver->pDescriptors->pFsOtherSpeed;
   \   000000A0   000094E5           LDR      R0,[R4, #+0]
   \   000000A4   0C0090E5           LDR      R0,[R0, #+12]
   \   000000A8   00A0B0E1           MOVS     R10,R0
    220              }
    221          
    222              // Check the descriptor type
    223              switch (type) {
   \                     ??GetDescriptor_3:
   \   000000AC   0800DDE5           LDRB     R0,[SP, #+8]
   \   000000B0   010040E2           SUB      R0,R0,#+1
   \   000000B4   060050E3           CMP      R0,#+6
   \   000000B8   7D00008A           BHI      ??GetDescriptor_4
   \   000000BC   04108FE2           ADR      R1,??GetDescriptor_0
   \   000000C0   0010D1E7           LDRB     R1,[R1, R0]
   \   000000C4   01F18FE0           ADD      PC,PC,R1, LSL #+2
   \                     ??GetDescriptor_0:
   \   000000C8   0114577A           DC8      +1,+20,+87,+122
   \   000000CC   7A273F00           DC8      +122,+39,+63,+0
    224                  
    225                  case USBGenericDescriptor_DEVICE:
    226                      trace_LOG(trace_INFO, "Dev ");
   \                     ??GetDescriptor_5:
   \   000000D0   00029FE5           LDR      R0,??GetDescriptor_2+0x8  ;; `?<Constant "Dev ">`
   \   000000D4   ........           BL       printf
    227          
    228                      // Adjust length and send descriptor
    229                      if (length > USBGenericDescriptor_GetLength((USBGenericDescriptor *) pDevice)) {
   \   000000D8   0700B0E1           MOVS     R0,R7
   \   000000DC   ........           BL       USBGenericDescriptor_GetLength
   \   000000E0   060050E1           CMP      R0,R6
   \   000000E4   0200002A           BCS      ??GetDescriptor_6
    230          
    231                          length = USBGenericDescriptor_GetLength((USBGenericDescriptor *) pDevice);
   \   000000E8   0700B0E1           MOVS     R0,R7
   \   000000EC   ........           BL       USBGenericDescriptor_GetLength
   \   000000F0   0060B0E1           MOVS     R6,R0
    232                      }
    233                      USBD_Write(0, pDevice, length, 0, 0);
   \                     ??GetDescriptor_6:
   \   000000F4   08D04DE2           SUB      SP,SP,#+8
   \   000000F8   0000A0E3           MOV      R0,#+0
   \   000000FC   00008DE5           STR      R0,[SP, #+0]
   \   00000100   0030A0E3           MOV      R3,#+0
   \   00000104   0620B0E1           MOVS     R2,R6
   \   00000108   0710B0E1           MOVS     R1,R7
   \   0000010C   0000A0E3           MOV      R0,#+0
   \   00000110   ........           BL       USBD_Write
   \   00000114   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   00000118   6A0000EA           B        ??GetDescriptor_7
    234                      break;
    235          
    236                  case USBGenericDescriptor_CONFIGURATION:
    237                      trace_LOG(trace_INFO, "Cfg ");
   \                     ??GetDescriptor_8:
   \   0000011C   B8019FE5           LDR      R0,??GetDescriptor_2+0xC  ;; `?<Constant "Cfg ">`
   \   00000120   ........           BL       printf
    238          
    239                      // Adjust length and send descriptor
    240                      if (length > USBConfigurationDescriptor_GetTotalLength(pConfiguration)) {
   \   00000124   0800B0E1           MOVS     R0,R8
   \   00000128   ........           BL       USBConfigurationDescriptor_GetTotalLength
   \   0000012C   060050E1           CMP      R0,R6
   \   00000130   0200002A           BCS      ??GetDescriptor_9
    241          
    242                          length = USBConfigurationDescriptor_GetTotalLength(pConfiguration);
   \   00000134   0800B0E1           MOVS     R0,R8
   \   00000138   ........           BL       USBConfigurationDescriptor_GetTotalLength
   \   0000013C   0060B0E1           MOVS     R6,R0
    243                      }
    244                      USBD_Write(0, pConfiguration, length, 0, 0);
   \                     ??GetDescriptor_9:
   \   00000140   08D04DE2           SUB      SP,SP,#+8
   \   00000144   0000A0E3           MOV      R0,#+0
   \   00000148   00008DE5           STR      R0,[SP, #+0]
   \   0000014C   0030A0E3           MOV      R3,#+0
   \   00000150   0620B0E1           MOVS     R2,R6
   \   00000154   0810B0E1           MOVS     R1,R8
   \   00000158   0000A0E3           MOV      R0,#+0
   \   0000015C   ........           BL       USBD_Write
   \   00000160   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   00000164   570000EA           B        ??GetDescriptor_7
    245                      break;
    246          
    247                  case USBGenericDescriptor_DEVICEQUALIFIER:
    248                      trace_LOG(trace_INFO, "Qua ");
   \                     ??GetDescriptor_10:
   \   00000168   70019FE5           LDR      R0,??GetDescriptor_2+0x10  ;; `?<Constant "Qua ">`
   \   0000016C   ........           BL       printf
    249          
    250                      // Check if descriptor exists
    251                      if (!pQualifier) {
   \   00000170   000059E3           CMP      R9,#+0
   \   00000174   0200001A           BNE      ??GetDescriptor_11
    252          
    253                          USBD_Stall(0);
   \   00000178   0000A0E3           MOV      R0,#+0
   \   0000017C   ........           BL       USBD_Stall
   \   00000180   500000EA           B        ??GetDescriptor_7
    254                      }
    255                      else {
    256                          // Adjust length and send descriptor
    257                          if (length > USBGenericDescriptor_GetLength((USBGenericDescriptor *) pQualifier)) {
   \                     ??GetDescriptor_11:
   \   00000184   0900B0E1           MOVS     R0,R9
   \   00000188   ........           BL       USBGenericDescriptor_GetLength
   \   0000018C   060050E1           CMP      R0,R6
   \   00000190   0200002A           BCS      ??GetDescriptor_12
    258          
    259                              length = USBGenericDescriptor_GetLength((USBGenericDescriptor *) pQualifier);
   \   00000194   0900B0E1           MOVS     R0,R9
   \   00000198   ........           BL       USBGenericDescriptor_GetLength
   \   0000019C   0060B0E1           MOVS     R6,R0
    260                          }
    261                          USBD_Write(0, pQualifier, length, 0, 0);
   \                     ??GetDescriptor_12:
   \   000001A0   08D04DE2           SUB      SP,SP,#+8
   \   000001A4   0000A0E3           MOV      R0,#+0
   \   000001A8   00008DE5           STR      R0,[SP, #+0]
   \   000001AC   0030A0E3           MOV      R3,#+0
   \   000001B0   0620B0E1           MOVS     R2,R6
   \   000001B4   0910B0E1           MOVS     R1,R9
   \   000001B8   0000A0E3           MOV      R0,#+0
   \   000001BC   ........           BL       USBD_Write
   \   000001C0   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   000001C4   3F0000EA           B        ??GetDescriptor_7
    262                      }
    263                      break;
    264          
    265                  case USBGenericDescriptor_OTHERSPEEDCONFIGURATION:
    266                      trace_LOG(trace_INFO, "OSC ");
   \                     ??GetDescriptor_13:
   \   000001C8   14019FE5           LDR      R0,??GetDescriptor_2+0x14  ;; `?<Constant "OSC ">`
   \   000001CC   ........           BL       printf
    267          
    268                      // Check if descriptor exists
    269                      if (!pOtherSpeed) {
   \   000001D0   00005AE3           CMP      R10,#+0
   \   000001D4   0200001A           BNE      ??GetDescriptor_14
    270          
    271                          USBD_Stall(0);
   \   000001D8   0000A0E3           MOV      R0,#+0
   \   000001DC   ........           BL       USBD_Stall
   \   000001E0   380000EA           B        ??GetDescriptor_7
    272                      }
    273                      else {
    274          
    275                          // Adjust length and send descriptor
    276                          if (length > USBConfigurationDescriptor_GetTotalLength(pOtherSpeed)) {
   \                     ??GetDescriptor_14:
   \   000001E4   0A00B0E1           MOVS     R0,R10
   \   000001E8   ........           BL       USBConfigurationDescriptor_GetTotalLength
   \   000001EC   060050E1           CMP      R0,R6
   \   000001F0   0200002A           BCS      ??GetDescriptor_15
    277          
    278                              length = USBConfigurationDescriptor_GetTotalLength(pOtherSpeed);
   \   000001F4   0A00B0E1           MOVS     R0,R10
   \   000001F8   ........           BL       USBConfigurationDescriptor_GetTotalLength
   \   000001FC   0060B0E1           MOVS     R6,R0
    279                          }
    280                          USBD_Write(0, pOtherSpeed, length, 0, 0);
   \                     ??GetDescriptor_15:
   \   00000200   08D04DE2           SUB      SP,SP,#+8
   \   00000204   0000A0E3           MOV      R0,#+0
   \   00000208   00008DE5           STR      R0,[SP, #+0]
   \   0000020C   0030A0E3           MOV      R3,#+0
   \   00000210   0620B0E1           MOVS     R2,R6
   \   00000214   0A10B0E1           MOVS     R1,R10
   \   00000218   0000A0E3           MOV      R0,#+0
   \   0000021C   ........           BL       USBD_Write
   \   00000220   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   00000224   270000EA           B        ??GetDescriptor_7
    281                      }
    282                      break;
    283          
    284                  case USBGenericDescriptor_STRING:
    285                      trace_LOG(trace_INFO, "Str%d ", index);
   \                     ??GetDescriptor_16:
   \   00000228   0510B0E1           MOVS     R1,R5
   \   0000022C   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   00000230   B0009FE5           LDR      R0,??GetDescriptor_2+0x18  ;; `?<Constant "Str%d ">`
   \   00000234   ........           BL       printf

⌨️ 快捷键说明

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