📄 usb_core.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_core.o --depend=.\Obj\usb_core.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\..\USBLib\library\src\usb_core.c]
THUMB
AREA ||i.DataStageIn||, CODE, READONLY, ALIGN=2
DataStageIn PROC
;;;482 *******************************************************************************/
;;;483 void DataStageIn(void)
000000 e92d5ff0 PUSH {r4-r12,lr}
;;;484 {
;;;485 ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info;
000004 f8df9098 LDR r9,|L1.160|
;;;486 u32 save_wLength = pEPinfo->Usb_wLength;
;;;487 u32 ControlState = pInformation->ControlState;
;;;488
;;;489 u8 *DataBuffer;
;;;490 u32 Length;
;;;491
;;;492 if ((save_wLength == 0) && (ControlState == LAST_IN_DATA))
;;;493 {
;;;494 if(Data_Mul_MaxPacketSize == TRUE)
;;;495 {
;;;496 /* No more data to send and empty packet */
;;;497 Send0LengthData();
000008 f8df8098 LDR r8,|L1.164|
00000c f8d91000 LDR r1,[r9,#0] ;485 ; pInformation
000010 f04f0a30 MOV r10,#0x30
000014 8a08 LDRH r0,[r1,#0x10] ;486
000016 7a0e LDRB r6,[r1,#8] ;487
000018 f1010410 ADD r4,r1,#0x10 ;485
00001c b9b0 CBNZ r0,|L1.76|
00001e 2e04 CMP r6,#4 ;492
000020 d114 BNE |L1.76|
000022 4921 LDR r1,|L1.168|
000024 7808 LDRB r0,[r1,#0] ;494 ; Data_Mul_MaxPacketSize
000026 2801 CMP r0,#1 ;494
000028 d10b BNE |L1.66|
00002a 4a20 LDR r2,|L1.172|
00002c 2000 MOVS r0,#0
00002e 6813 LDR r3,[r2,#0]
000030 4a1f LDR r2,|L1.176|
000032 b29b UXTH r3,r3
000034 eb020243 ADD r2,r2,r3,LSL #1
000038 6050 STR r0,[r2,#4]
00003a f8a8a000 STRH r10,[r8,#0]
;;;498 ControlState = LAST_IN_DATA;
;;;499 Data_Mul_MaxPacketSize = FALSE;
00003e 7008 STRB r0,[r1,#0]
000040 e029 B |L1.150|
|L1.66|
;;;500 }
;;;501 else
;;;502 {
;;;503 /* No more data to send so STALL the TX Status*/
;;;504 ControlState = WAIT_STATUS_OUT;
000042 2607 MOVS r6,#7
;;;505 vSetEPTxStatus(EP_TX_STALL);
000044 2110 MOVS r1,#0x10
000046 f8a81000 STRH r1,[r8,#0]
00004a e024 B |L1.150|
|L1.76|
;;;506 }
;;;507
;;;508 goto Expect_Status_Out;
;;;509 }
;;;510
;;;511 Length = pEPinfo->PacketSize;
00004c 88a5 LDRH r5,[r4,#4]
;;;512 ControlState = (save_wLength <= Length) ? LAST_IN_DATA : IN_DATA;
00004e 2604 MOVS r6,#4
000050 42a8 CMP r0,r5
000052 d900 BLS |L1.86|
000054 2602 MOVS r6,#2
|L1.86|
;;;513
;;;514 if (Length > save_wLength)
000056 4285 CMP r5,r0
000058 d900 BLS |L1.92|
;;;515 {
;;;516 Length = save_wLength;
00005a 4605 MOV r5,r0
|L1.92|
;;;517 }
;;;518
;;;519 DataBuffer = (*pEPinfo->CopyData)(Length);
00005c b2a8 UXTH r0,r5
00005e 68a1 LDR r1,[r4,#8]
000060 4607 MOV r7,r0
000062 4788 BLX r1
000064 4683 MOV r11,r0
;;;520
;;;521 UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length);
000066 2000 MOVS r0,#0
000068 f7fffffe BL GetEPTxAddr
00006c 4601 MOV r1,r0
00006e 463a MOV r2,r7
000070 4658 MOV r0,r11
000072 f7fffffe BL UserToPMABufferCopy
;;;522
;;;523 SetEPTxCount(ENDP0, Length);
000076 4639 MOV r1,r7
000078 2000 MOVS r0,#0
00007a f7fffffe BL SetEPTxCount
;;;524
;;;525 pEPinfo->Usb_wLength -= Length;
00007e 8820 LDRH r0,[r4,#0]
;;;526 pEPinfo->Usb_wOffset += Length;
;;;527 vSetEPTxStatus(EP_TX_VALID);
;;;528
;;;529 USB_StatusOut();/* Expect the host to abort the data IN stage */
000080 490c LDR r1,|L1.180|
000082 1b40 SUBS r0,r0,r5 ;525
000084 8020 STRH r0,[r4,#0] ;525
000086 8860 LDRH r0,[r4,#2] ;526
000088 4428 ADD r0,r0,r5 ;526
00008a 8060 STRH r0,[r4,#2] ;526
00008c f8a8a000 STRH r10,[r8,#0] ;527
000090 f44f5040 MOV r0,#0x3000
000094 8008 STRH r0,[r1,#0]
|L1.150|
;;;530
;;;531 Expect_Status_Out:
;;;532 pInformation->ControlState = ControlState;
000096 f8d90000 LDR r0,[r9,#0] ; pInformation
00009a 7206 STRB r6,[r0,#8]
;;;533 }
00009c e8bd9ff0 POP {r4-r12,pc}
;;;534
ENDP
|L1.160|
DCD pInformation
|L1.164|
DCD SaveTState
|L1.168|
DCD ||.data||
|L1.172|
DCD 0x40005c50
|L1.176|
DCD 0x40006000
|L1.180|
DCD SaveRState
AREA ||i.DataStageOut||, CODE, READONLY, ALIGN=2
DataStageOut PROC
;;;425 *******************************************************************************/
;;;426 void DataStageOut(void)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;427 {
;;;428 ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info;
000004 4e23 LDR r6,|L2.148|
;;;429 u32 save_rLength;
;;;430
;;;431 save_rLength = pEPinfo->Usb_rLength;
;;;432
;;;433 if (pEPinfo->CopyData && save_rLength)
;;;434 {
;;;435 u8 *Buffer;
;;;436 u32 Length;
;;;437
;;;438 Length = pEPinfo->PacketSize;
;;;439 if (Length > save_rLength)
;;;440 {
;;;441 Length = save_rLength;
;;;442 }
;;;443
;;;444 Buffer = (*pEPinfo->CopyData)(Length);
;;;445 pEPinfo->Usb_rLength -= Length;
;;;446 pEPinfo->Usb_rOffset += Length;
;;;447
;;;448 PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length);
;;;449 }
;;;450
;;;451 if (pEPinfo->Usb_rLength != 0)
;;;452 {
;;;453 vSetEPRxStatus(EP_RX_VALID);/* re-enable for next data reception */
;;;454 SetEPTxCount(ENDP0, 0);
;;;455 vSetEPTxStatus(EP_TX_VALID);/* Expect the host to abort the data OUT stage */
000006 f8df9090 LDR r9,|L2.152|
00000a 6834 LDR r4,[r6,#0] ;431 ; pInformation
00000c f04f0830 MOV r8,#0x30
000010 f8340f10 LDRH r0,[r4,#0x10]! ;431
000014 68a1 LDR r1,[r4,#8] ;433
000016 b1b1 CBZ r1,|L2.70|
000018 b308 CBZ r0,|L2.94|
00001a 88a5 LDRH r5,[r4,#4] ;438
00001c 4285 CMP r5,r0 ;439
00001e d900 BLS |L2.34|
000020 4605 MOV r5,r0 ;441
|L2.34|
000022 b2a8 UXTH r0,r5 ;444
000024 4607 MOV r7,r0 ;444
000026 4788 BLX r1 ;444
000028 4682 MOV r10,r0 ;444
00002a 8820 LDRH r0,[r4,#0] ;445
00002c 1b40 SUBS r0,r0,r5 ;445
00002e 8020 STRH r0,[r4,#0] ;445
000030 8860 LDRH r0,[r4,#2] ;446
000032 4428 ADD r0,r0,r5 ;446
000034 8060 STRH r0,[r4,#2] ;446
000036 2000 MOVS r0,#0 ;448
000038 f7fffffe BL GetEPRxAddr
00003c 4601 MOV r1,r0 ;448
00003e 463a MOV r2,r7 ;448
000040 4650 MOV r0,r10 ;448
000042 f7fffffe BL PMAToUserBufferCopy
|L2.70|
000046 8820 LDRH r0,[r4,#0] ;451
000048 b148 CBZ r0,|L2.94|
00004a 4914 LDR r1,|L2.156|
00004c f44f5040 MOV r0,#0x3000 ;453
000050 8008 STRH r0,[r1,#0] ;453
000052 2100 MOVS r1,#0 ;454
000054 4608 MOV r0,r1 ;454
000056 f7fffffe BL SetEPTxCount
00005a f8a98000 STRH r8,[r9,#0]
|L2.94|
;;;456 }
;;;457 /* Set the next State*/
;;;458 if (pEPinfo->Usb_rLength >= pEPinfo->PacketSize)
00005e 8820 LDRH r0,[r4,#0]
000060 88a1 LDRH r1,[r4,#4]
000062 4288 CMP r0,r1
000064 d301 BCC |L2.106|
;;;459 {
;;;460 pInformation->ControlState = OUT_DATA;
000066 2003 MOVS r0,#3
000068 e001 B |L2.110|
|L2.106|
;;;461 }
;;;462 else
;;;463 {
;;;464 if (pEPinfo->Usb_rLength > 0)
00006a b120 CBZ r0,|L2.118|
;;;465 {
;;;466 pInformation->ControlState = LAST_OUT_DATA;
00006c 2005 MOVS r0,#5
|L2.110|
00006e 6831 LDR r1,[r6,#0] ;460 ; pInformation
000070 7208 STRB r0,[r1,#8] ;460
|L2.114|
;;;467 }
;;;468 else if (pEPinfo->Usb_rLength == 0)
;;;469 {
;;;470 pInformation->ControlState = WAIT_STATUS_IN;
;;;471 USB_StatusIn();
;;;472 }
;;;473 }
;;;474 }
000072 e8bd87f0 POP {r4-r10,pc}
|L2.118|
000076 6832 LDR r2,[r6,#0] ;470 ; pInformation
000078 2106 MOVS r1,#6 ;470
00007a 4b09 LDR r3,|L2.160|
00007c 7211 STRB r1,[r2,#8] ;470
00007e 681a LDR r2,[r3,#0] ;471
000080 2000 MOVS r0,#0 ;471
000082 4908 LDR r1,|L2.164|
000084 b292 UXTH r2,r2 ;471
000086 eb010142 ADD r1,r1,r2,LSL #1 ;471
00008a 6048 STR r0,[r1,#4] ;471
00008c f8a98000 STRH r8,[r9,#0] ;471
000090 e7ef B |L2.114|
;;;475
ENDP
000092 0000 DCW 0x0000
|L2.148|
DCD pInformation
|L2.152|
DCD SaveTState
|L2.156|
DCD SaveRState
|L2.160|
DCD 0x40005c50
|L2.164|
DCD 0x40006000
AREA ||i.Data_Setup0||, CODE, READONLY, ALIGN=2
Data_Setup0 PROC
;;;665 *******************************************************************************/
;;;666 void Data_Setup0(void)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;667 {
;;;668 u8 *(*CopyRoutine)(u16);
;;;669 RESULT Result;
;;;670 u32 Request_No = pInformation->USBbRequest;
000004 4c5d LDR r4,|L3.380|
;;;671
;;;672 u32 Related_Endpoint, Reserved;
;;;673 u32 wOffset, Status;
;;;674
;;;675
;;;676
;;;677 CopyRoutine = NULL;
;;;678 wOffset = 0;
;;;679
;;;680 if (Request_No == GET_DESCRIPTOR)
;;;681 {
;;;682 if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
;;;683 {
;;;684 u8 wValue1 = pInformation->USBwValue1;
;;;685 if (wValue1 == DEVICE_DESCRIPTOR)
;;;686 {
;;;687 CopyRoutine = pProperty->GetDeviceDescriptor;
000006 4d5e LDR r5,|L3.384|
000008 6820 LDR r0,[r4,#0] ;670 ; pInformation
;;;688 }
;;;689 else if (wValue1 == CONFIG_DESCRIPTOR)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -