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

📄 usb_core.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -