📄 usbddriver.lst
字号:
\ 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 + -