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

📄 usb_bot.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_bot.o --depend=.\Obj\usb_bot.d --device=DARMSTM --apcs=interwork -O3 -I.\Code\FATSystem\INC -I.\Code\Library\INC -I.\Code\SDCard\INC -I.\Code\Speaker\INC -I.\Code\System\INC -I.\Code\USBMassStorage\INC -I.\Code\User\INC -I.\Code\VS1003\INC -ID:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\Obj\usb_bot.crf Code\USBMassStorage\SRC\usb_bot.c]
                          THUMB

                          AREA ||i.Set_CSW||, CODE, READONLY, ALIGN=2

                  Set_CSW PROC
;;;273    void Set_CSW (u8 CSW_Status, u8 Send_Permission)
;;;274    {
000000  b510              PUSH     {r4,lr}
000002  460c              MOV      r4,r1
;;;275      CSW.dSignature = BOT_CSW_SIGNATURE;
000004  490e              LDR      r1,|L1.64|
000006  4a0d              LDR      r2,|L1.60|
;;;276      CSW.bStatus = CSW_Status;
000008  600a              STR      r2,[r1,#0]  ; CSW
00000a  7308              STRB     r0,[r1,#0xc]  ; CSW
;;;277    
;;;278      UserToPMABufferCopy(((u8 *)& CSW), ENDP1_TXADDR, CSW_DATA_LENGTH);
00000c  220d              MOVS     r2,#0xd
00000e  2198              MOVS     r1,#0x98
000010  480b              LDR      r0,|L1.64|
000012  f7fffffe          BL       UserToPMABufferCopy
;;;279    
;;;280      SetEPTxCount(ENDP1, CSW_DATA_LENGTH);
000016  210d              MOVS     r1,#0xd
000018  2001              MOVS     r0,#1
00001a  f7fffffe          BL       SetEPTxCount
;;;281      Bot_State = BOT_ERROR;
00001e  2105              MOVS     r1,#5
000020  4808              LDR      r0,|L1.68|
;;;282      if (Send_Permission)
000022  2c00              CMP      r4,#0
000024  7001              STRB     r1,[r0,#0]            ;281  ; Bot_State
000026  d007              BEQ      |L1.56|
;;;283      {
;;;284        Bot_State = BOT_CSW_Send;
000028  2104              MOVS     r1,#4
00002a  7001              STRB     r1,[r0,#0]  ; Bot_State
;;;285        SetEPTxStatus(ENDP1, EP_TX_VALID);
00002c  2130              MOVS     r1,#0x30
00002e  e8bd4010          POP      {r4,lr}
000032  2001              MOVS     r0,#1
000034  f7ffbffe          B.W      SetEPTxStatus
                  |L1.56|
;;;286      }
;;;287    
;;;288    }
000038  bd10              POP      {r4,pc}
;;;289    
                          ENDP

00003a  0000              DCW      0x0000
                  |L1.60|
00003c  53425355          DCD      0x53425355
                  |L1.64|
000040  00000060          DCD      ||.bss||+0x60
                  |L1.68|
000044  00000000          DCD      ||.data||

                          AREA ||i.Mass_Storage_In||, CODE, READONLY, ALIGN=2

                  Mass_Storage_In PROC
;;;45     void Mass_Storage_In (void)
;;;46     {
000000  b510              PUSH     {r4,lr}
;;;47       switch (Bot_State)
000002  4911              LDR      r1,|L2.72|
000004  7808              LDRB     r0,[r1,#0]  ; Bot_State
000006  2802              CMP      r0,#2
000008  d00a              BEQ      |L2.32|
00000a  f44f5440          MOV      r4,#0x3000
00000e  2803              CMP      r0,#3
000010  d00e              BEQ      |L2.48|
000012  2804              CMP      r0,#4
000014  d001              BEQ      |L2.26|
000016  2805              CMP      r0,#5
000018  d114              BNE      |L2.68|
                  |L2.26|
;;;48       {
;;;49         case BOT_CSW_Send:
;;;50         case BOT_ERROR:
;;;51           Bot_State = BOT_IDLE;
00001a  2000              MOVS     r0,#0
00001c  7008              STRB     r0,[r1,#0]  ; Bot_State
;;;52           SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to recive the next cmd*/
;;;53           break;
00001e  e00b              B        |L2.56|
                  |L2.32|
;;;54         case BOT_DATA_IN:
;;;55           switch (CBW.CB[0])
000020  480a              LDR      r0,|L2.76|
000022  7bc0              LDRB     r0,[r0,#0xf]  ; CBW
000024  2828              CMP      r0,#0x28
000026  d10d              BNE      |L2.68|
;;;56           {
;;;57             case SCSI_READ10:
;;;58               SCSI_Read10_Cmd();
000028  e8bd4010          POP      {r4,lr}
00002c  f7ffbffe          B.W      SCSI_Read10_Cmd
                  |L2.48|
;;;59               break;
;;;60           }
;;;61           break;
;;;62         case BOT_DATA_IN_LAST:
;;;63           Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000030  2101              MOVS     r1,#1
000032  2000              MOVS     r0,#0
000034  f7fffffe          BL       Set_CSW
                  |L2.56|
;;;64           SetEPRxStatus(ENDP2, EP_RX_VALID);
000038  4621              MOV      r1,r4
00003a  e8bd4010          POP      {r4,lr}
00003e  2002              MOVS     r0,#2
000040  f7ffbffe          B.W      SetEPRxStatus
                  |L2.68|
;;;65           break;
;;;66     
;;;67         default:
;;;68           break;
;;;69       }
;;;70     }
000044  bd10              POP      {r4,pc}
;;;71     
                          ENDP

000046  0000              DCW      0x0000
                  |L2.72|
000048  00000000          DCD      ||.data||
                  |L2.76|
00004c  00000040          DCD      ||.bss||+0x40

                          AREA ||i.Bot_Abort||, CODE, READONLY, ALIGN=1

                  Bot_Abort PROC
;;;297    void Bot_Abort(u8 Direction)
;;;298    {
000000  b510              PUSH     {r4,lr}
;;;299      switch (Direction)
000002  b178              CBZ      r0,|L3.36|
000004  f44f5480          MOV      r4,#0x1000
000008  2801              CMP      r0,#1
00000a  d005              BEQ      |L3.24|
00000c  2802              CMP      r0,#2
00000e  d10f              BNE      |L3.48|
;;;300      {
;;;301        case DIR_IN :
;;;302          SetEPTxStatus(ENDP1, EP_TX_STALL);
;;;303          break;
;;;304        case DIR_OUT :
;;;305          SetEPRxStatus(ENDP2, EP_RX_STALL);
;;;306          break;
;;;307        case BOTH_DIR :
;;;308          SetEPTxStatus(ENDP1, EP_TX_STALL);
000010  2110              MOVS     r1,#0x10
000012  2001              MOVS     r0,#1
000014  f7fffffe          BL       SetEPTxStatus
                  |L3.24|
000018  4621              MOV      r1,r4                 ;305
00001a  e8bd4010          POP      {r4,lr}               ;305
00001e  2002              MOVS     r0,#2                 ;305
000020  f7ffbffe          B.W      SetEPRxStatus
                  |L3.36|
000024  2110              MOVS     r1,#0x10              ;302
000026  e8bd4010          POP      {r4,lr}               ;302
00002a  2001              MOVS     r0,#1                 ;302
00002c  f7ffbffe          B.W      SetEPTxStatus
                  |L3.48|
;;;309          SetEPRxStatus(ENDP2, EP_RX_STALL);
;;;310          break;
;;;311        default:
;;;312          break;
;;;313      }
;;;314    }
000030  bd10              POP      {r4,pc}
;;;315    
                          ENDP


                          AREA ||i.CBW_Decode||, CODE, READONLY, ALIGN=2

                  CBW_Decode PROC
;;;118    void CBW_Decode(void)
;;;119    {
000000  b510              PUSH     {r4,lr}
;;;120      u32 Counter;
;;;121    
;;;122      for (Counter = 0; Counter < Data_Len; Counter++)
000002  4953              LDR      r1,|L4.336|
000004  4c53              LDR      r4,|L4.340|
000006  2000              MOVS     r0,#0
000008  8849              LDRH     r1,[r1,#2]
00000a  f1a40240          SUB      r2,r4,#0x40
00000e  e002              B        |L4.22|
                  |L4.16|
;;;123      {
;;;124        *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter];
000010  5c13              LDRB     r3,[r2,r0]
000012  5423              STRB     r3,[r4,r0]
000014  1c40              ADDS     r0,r0,#1              ;122
                  |L4.22|
000016  4288              CMP      r0,r1                 ;122
000018  d3fa              BCC      |L4.16|
;;;125      }
;;;126      CSW.dTag = CBW.dTag;
00001a  484e              LDR      r0,|L4.340|
00001c  6862              LDR      r2,[r4,#4]  ; CBW
00001e  3020              ADDS     r0,r0,#0x20
;;;127      CSW.dDataResidue = CBW.dDataLength;
000020  6042              STR      r2,[r0,#4]  ; CSW
000022  68a2              LDR      r2,[r4,#8]  ; CBW
;;;128      if (Data_Len != BOT_CBW_PACKET_LENGTH)
000024  6082              STR      r2,[r0,#8]  ; CSW
000026  291f              CMP      r1,#0x1f
000028  d006              BEQ      |L4.56|
;;;129      {
;;;130        Bot_Abort(BOTH_DIR);
00002a  2002              MOVS     r0,#2
00002c  f7fffffe          BL       Bot_Abort
;;;131        /* reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset*/
;;;132        CBW.dSignature = 0;
000030  2000              MOVS     r0,#0
;;;133        Set_Scsi_Sense_Data(ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR);
000032  211a              MOVS     r1,#0x1a
;;;134        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;135        return;
000034  6020              STR      r0,[r4,#0]  ; CBW
000036  e00d              B        |L4.84|
                  |L4.56|
;;;136      }
;;;137    
;;;138      if (CBW.dSignature == BOT_CBW_SIGNATURE)
000038  4947              LDR      r1,|L4.344|
00003a  6820              LDR      r0,[r4,#0]  ; CBW
00003c  4288              CMP      r0,r1
00003e  d17d              BNE      |L4.316|
;;;139      {
;;;140        /* Valid CBW */
;;;141        if ((CBW.bLUN != 0) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
000040  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000042  b918              CBNZ     r0,|L4.76|
000044  7ba0              LDRB     r0,[r4,#0xe]  ; CBW
000046  b108              CBZ      r0,|L4.76|
000048  2810              CMP      r0,#0x10
00004a  d90c              BLS      |L4.102|
                  |L4.76|
;;;142        {
;;;143          Bot_Abort(BOTH_DIR);
00004c  2002              MOVS     r0,#2
00004e  f7fffffe          BL       Bot_Abort
;;;144          Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
000052  2124              MOVS     r1,#0x24
                  |L4.84|
;;;145          Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;146        }
;;;147        else
;;;148        {
;;;149          switch (CBW.CB[0])
;;;150          {
;;;151            case SCSI_REQUEST_SENSE:
;;;152              SCSI_RequestSense_Cmd ();
;;;153              break;
;;;154            case SCSI_INQUIRY:
;;;155              SCSI_Inquiry_Cmd();
;;;156              break;
;;;157            case SCSI_START_STOP_UNIT:
;;;158              SCSI_Start_Stop_Unit_Cmd();
;;;159            case SCSI_ALLOW_MEDIUM_REMOVAL:
;;;160              SCSI_Start_Stop_Unit_Cmd();
;;;161              break;
;;;162            case SCSI_MODE_SENSE6:
;;;163              SCSI_ModeSense6_Cmd ();
;;;164              break;
;;;165            case SCSI_MODE_SENSE10:
;;;166              SCSI_ModeSense10_Cmd ();
;;;167              break;
;;;168            case SCSI_READ_FORMAT_CAPACITIES:
;;;169              SCSI_ReadFormatCapacity_Cmd();
;;;170              break;
;;;171            case SCSI_READ_CAPACITY10:
;;;172              SCSI_ReadCapacity10_Cmd();
;;;173              break;
;;;174            case SCSI_TEST_UNIT_READY:
;;;175              SCSI_TestUnitReady_Cmd();
;;;176              break;
;;;177            case SCSI_READ10:
;;;178              SCSI_Read10_Cmd();
;;;179              break;
;;;180            case SCSI_WRITE10:
;;;181              SCSI_Write10_Cmd();
;;;182              break;
;;;183            case SCSI_VERIFY10:
;;;184              SCSI_Verify10_Cmd();
;;;185              break;
;;;186              /*Unsupported command*/
;;;187    
;;;188            case SCSI_MODE_SELECT10:
;;;189              SCSI_Mode_Select10_Cmd();
;;;190              break;
;;;191            case SCSI_MODE_SELECT6:
;;;192              SCSI_Mode_Select6_Cmd();
;;;193              break;
;;;194            case SCSI_FORMAT_UNIT:
;;;195              SCSI_FormatUnit_Cmd();
;;;196              break;
;;;197            case SCSI_SEND_DIAGNOSTIC:

⌨️ 快捷键说明

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