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

📄 usb_bot.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] 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..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\SRAM -I"D:\Program Files\MDK KEIL\ARM\INC\ST\STM32F10x" -D__MICROLIB --omf_browse=.\Obj\usb_bot.crf ..\..\source\usb_bot.c]
                          THUMB

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

                  Set_CSW PROC
;;;285    void Set_CSW (u8 CSW_Status, u8 Send_Permission)
;;;286    {
000000  b510              PUSH     {r4,lr}
000002  460c              MOV      r4,r1
;;;287      CSW.dSignature = BOT_CSW_SIGNATURE;
000004  490e              LDR      r1,|L1.64|
000006  4a0d              LDR      r2,|L1.60|
;;;288      CSW.bStatus = CSW_Status;
000008  600a              STR      r2,[r1,#0]  ; CSW
00000a  7308              STRB     r0,[r1,#0xc]  ; CSW
;;;289    
;;;290      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  f7fff7ff          BL       UserToPMABufferCopy
;;;291    
;;;292      SetEPTxCount(ENDP1, CSW_DATA_LENGTH);
000016  210d              MOVS     r1,#0xd
000018  2001              MOVS     r0,#1
00001a  f7fff7ff          BL       SetEPTxCount
;;;293      Bot_State = BOT_ERROR;
00001e  2105              MOVS     r1,#5
000020  4808              LDR      r0,|L1.68|
;;;294      if (Send_Permission)
000022  2c00              CMP      r4,#0
000024  7001              STRB     r1,[r0,#0]            ;293  ; Bot_State
000026  d007              BEQ      |L1.56|
;;;295      {
;;;296        Bot_State = BOT_CSW_Send;
000028  2104              MOVS     r1,#4
00002a  7001              STRB     r1,[r0,#0]  ; Bot_State
;;;297        SetEPTxStatus(ENDP1, EP_TX_VALID);
00002c  2130              MOVS     r1,#0x30
00002e  e8bde8bd          POP      {r4,lr}
000032  2001              MOVS     r0,#1
000034  f7fff7ff          B.W      SetEPTxStatus
                  |L1.56|
;;;298      }
;;;299    }
000038  bd10              POP      {r4,pc}
;;;300    
                          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
;;;47     void Mass_Storage_In(void)
;;;48     {
000000  b510              PUSH     {r4,lr}
;;;49       switch (Bot_State)
000002  4912              LDR      r1,|L2.76|
000004  7808              LDRB     r0,[r1,#0]  ; Bot_State
000006  2802              CMP      r0,#2
000008  d00a              BEQ      |L2.32|
00000a  f44ff44f          MOV      r4,#0x3000
00000e  2803              CMP      r0,#3
000010  d011              BEQ      |L2.54|
000012  2804              CMP      r0,#4
000014  d001              BEQ      |L2.26|
000016  2805              CMP      r0,#5
000018  d117              BNE      |L2.74|
                  |L2.26|
;;;50       {
;;;51         case BOT_CSW_Send:
;;;52         case BOT_ERROR:
;;;53           Bot_State = BOT_IDLE;
00001a  2000              MOVS     r0,#0
00001c  7008              STRB     r0,[r1,#0]  ; Bot_State
;;;54           SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to recive the next cmd*/
;;;55           break;
00001e  e00e              B        |L2.62|
                  |L2.32|
;;;56         case BOT_DATA_IN:
;;;57           switch (CBW.CB[0])
000020  480b              LDR      r0,|L2.80|
000022  7bc2              LDRB     r2,[r0,#0xf]  ; CBW
000024  2a28              CMP      r2,#0x28
000026  d110              BNE      |L2.74|
;;;58           {
;;;59             case SCSI_READ10:
;;;60               SCSI_Read10_Cmd(CBW.bLUN , SCSI_LBA , SCSI_BlkLen);
000028  e9d1e9d1          LDRD     r1,r2,[r1,#4]
00002c  7b40              LDRB     r0,[r0,#0xd]  ; CBW
00002e  e8bde8bd          POP      {r4,lr}
000032  f7fff7ff          B.W      SCSI_Read10_Cmd
                  |L2.54|
;;;61               break;
;;;62           }
;;;63           break;
;;;64         case BOT_DATA_IN_LAST:
;;;65           Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000036  2101              MOVS     r1,#1
000038  2000              MOVS     r0,#0
00003a  f7fff7ff          BL       Set_CSW
                  |L2.62|
;;;66           SetEPRxStatus(ENDP2, EP_RX_VALID);
00003e  4621              MOV      r1,r4
000040  e8bde8bd          POP      {r4,lr}
000044  2002              MOVS     r0,#2
000046  f7fff7ff          B.W      SetEPRxStatus
                  |L2.74|
;;;67           break;
;;;68     
;;;69         default:
;;;70           break;
;;;71       }
;;;72     }
00004a  bd10              POP      {r4,pc}
;;;73     
                          ENDP

                  |L2.76|
00004c  00000000          DCD      ||.data||
                  |L2.80|
000050  00000040          DCD      ||.bss||+0x40

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

                  Bot_Abort PROC
;;;308    void Bot_Abort(u8 Direction)
;;;309    {
000000  b510              PUSH     {r4,lr}
;;;310      switch (Direction)
000002  b178              CBZ      r0,|L3.36|
000004  f44ff44f          MOV      r4,#0x1000
000008  2801              CMP      r0,#1
00000a  d005              BEQ      |L3.24|
00000c  2802              CMP      r0,#2
00000e  d10f              BNE      |L3.48|
;;;311      {
;;;312        case DIR_IN :
;;;313          SetEPTxStatus(ENDP1, EP_TX_STALL);
;;;314          break;
;;;315        case DIR_OUT :
;;;316          SetEPRxStatus(ENDP2, EP_RX_STALL);
;;;317          break;
;;;318        case BOTH_DIR :
;;;319          SetEPTxStatus(ENDP1, EP_TX_STALL);
000010  2110              MOVS     r1,#0x10
000012  2001              MOVS     r0,#1
000014  f7fff7ff          BL       SetEPTxStatus
                  |L3.24|
000018  4621              MOV      r1,r4                 ;316
00001a  e8bde8bd          POP      {r4,lr}               ;316
00001e  2002              MOVS     r0,#2                 ;316
000020  f7fff7ff          B.W      SetEPRxStatus
                  |L3.36|
000024  2110              MOVS     r1,#0x10              ;313
000026  e8bde8bd          POP      {r4,lr}               ;313
00002a  2001              MOVS     r0,#1                 ;313
00002c  f7fff7ff          B.W      SetEPTxStatus
                  |L3.48|
;;;320          SetEPRxStatus(ENDP2, EP_RX_STALL);
;;;321          break;
;;;322        default:
;;;323          break;
;;;324      }
;;;325    }
000030  bd10              POP      {r4,pc}
;;;326    
                          ENDP


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

                  CBW_Decode PROC
;;;120    void CBW_Decode(void)
;;;121    {
000000  b570              PUSH     {r4-r6,lr}
;;;122      u32 Counter;
;;;123    
;;;124      for (Counter = 0; Counter < Data_Len; Counter++)
000002  4b60              LDR      r3,|L4.388|
000004  4c60              LDR      r4,|L4.392|
000006  2000              MOVS     r0,#0
000008  8859              LDRH     r1,[r3,#2]
00000a  f1a4f1a4          SUB      r2,r4,#0x40
00000e  e002              B        |L4.22|
                  |L4.16|
;;;125      {
;;;126        *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter];
000010  5c15              LDRB     r5,[r2,r0]
000012  5425              STRB     r5,[r4,r0]
000014  1c40              ADDS     r0,r0,#1              ;124
                  |L4.22|
000016  4288              CMP      r0,r1                 ;124
000018  d3fa              BCC      |L4.16|
;;;127      }
;;;128      CSW.dTag = CBW.dTag;
00001a  485b              LDR      r0,|L4.392|
00001c  6862              LDR      r2,[r4,#4]  ; CBW
00001e  3020              ADDS     r0,r0,#0x20
;;;129      CSW.dDataResidue = CBW.dDataLength;
000020  6042              STR      r2,[r0,#4]  ; CSW
000022  68a2              LDR      r2,[r4,#8]  ; CBW
;;;130      if (Data_Len != BOT_CBW_PACKET_LENGTH)
000024  6082              STR      r2,[r0,#8]  ; CSW
000026  291f              CMP      r1,#0x1f
000028  d007              BEQ      |L4.58|
;;;131      {
;;;132        Bot_Abort(BOTH_DIR);
00002a  2002              MOVS     r0,#2
00002c  f7fff7ff          BL       Bot_Abort
;;;133        /* reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset*/
;;;134        CBW.dSignature = 0;
000030  2000              MOVS     r0,#0
;;;135        Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR);
000032  6020              STR      r0,[r4,#0]  ; CBW
000034  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000036  221a              MOVS     r2,#0x1a
;;;136        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;137        return;
000038  e021              B        |L4.126|
                  |L4.58|
;;;138      }
;;;139    
;;;140      if ((CBW.CB[0] == SCSI_READ10 ) || (CBW.CB[0] == SCSI_WRITE10 ))
00003a  7be1              LDRB     r1,[r4,#0xf]  ; CBW
00003c  2928              CMP      r1,#0x28
00003e  d001              BEQ      |L4.68|
000040  292a              CMP      r1,#0x2a
000042  d10a              BNE      |L4.90|
                  |L4.68|
;;;141      {
;;;142        /* Calculate Logical Block Address */
;;;143        SCSI_LBA = (CBW.CB[2] << 24) | (CBW.CB[3] << 16) | (CBW.CB[4] <<  8) | CBW.CB[5];
000044  f8d4f8d4          LDR      r0,[r4,#0x11]  ; CBW
000048  7d22              LDRB     r2,[r4,#0x14]  ; CBW
00004a  ba00              REV      r0,r0
00004c  f020f020          BIC      r0,r0,#0xff
000050  4310              ORRS     r0,r0,r2
;;;144        /* Calculate the Number of Blocks to transfer */
;;;145        SCSI_BlkLen = (CBW.CB[7] <<  8) | CBW.CB[8];
000052  6058              STR      r0,[r3,#4]  ; SCSI_LBA
000054  8ae0              LDRH     r0,[r4,#0x16]  ; CBW
000056  ba40              REV16    r0,r0
000058  6098              STR      r0,[r3,#8]  ; SCSI_BlkLen
                  |L4.90|
;;;146      }
;;;147    
;;;148      if (CBW.dSignature == BOT_CBW_SIGNATURE)
00005a  4a4c              LDR      r2,|L4.396|
00005c  6820              LDR      r0,[r4,#0]  ; CBW
00005e  4290              CMP      r0,r2
000060  d17d              BNE      |L4.350|
;;;149      {
;;;150        /* Valid CBW */
;;;151        if ((CBW.bLUN > Max_Lun) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
000062  4a4b              LDR      r2,|L4.400|
000064  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000066  6812              LDR      r2,[r2,#0]  ; Max_Lun
000068  4290              CMP      r0,r2
00006a  d803              BHI      |L4.116|
00006c  7ba2              LDRB     r2,[r4,#0xe]  ; CBW
00006e  b10a              CBZ      r2,|L4.116|
000070  2a10              CMP      r2,#0x10
000072  d90d              BLS      |L4.144|
                  |L4.116|
;;;152        {
;;;153          Bot_Abort(BOTH_DIR);
000074  2002              MOVS     r0,#2
000076  f7fff7ff          BL       Bot_Abort
;;;154          Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
00007a  7b60              LDRB     r0,[r4,#0xd]  ; CBW
00007c  2224              MOVS     r2,#0x24
                  |L4.126|
;;;155          Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;156        }
;;;157        else
;;;158        {
;;;159          switch (CBW.CB[0])
;;;160          {
;;;161            case SCSI_REQUEST_SENSE:
;;;162              SCSI_RequestSense_Cmd (CBW.bLUN);
;;;163              break;
;;;164            case SCSI_INQUIRY:
;;;165              SCSI_Inquiry_Cmd(CBW.bLUN);
;;;166              break;
;;;167            case SCSI_START_STOP_UNIT:
;;;168              SCSI_Start_Stop_Unit_Cmd(CBW.bLUN);
;;;169              break;
;;;170            case SCSI_ALLOW_MEDIUM_REMOVAL:
;;;171              SCSI_Start_Stop_Unit_Cmd(CBW.bLUN);
;;;172              break;
;;;173            case SCSI_MODE_SENSE6:
;;;174              SCSI_ModeSense6_Cmd (CBW.bLUN);
;;;175              break;
;;;176            case SCSI_MODE_SENSE10:
;;;177              SCSI_ModeSense10_Cmd (CBW.bLUN);
;;;178              break;
;;;179            case SCSI_READ_FORMAT_CAPACITIES:
;;;180              SCSI_ReadFormatCapacity_Cmd(CBW.bLUN);
;;;181              break;
;;;182            case SCSI_READ_CAPACITY10:
;;;183              SCSI_ReadCapacity10_Cmd(CBW.bLUN);
;;;184              break;
;;;185            case SCSI_TEST_UNIT_READY:
;;;186              SCSI_TestUnitReady_Cmd(CBW.bLUN);
;;;187              break;
;;;188            case SCSI_READ10:
;;;189              SCSI_Read10_Cmd(CBW.bLUN, SCSI_LBA , SCSI_BlkLen);
;;;190              break;
;;;191            case SCSI_WRITE10:
;;;192              SCSI_Write10_Cmd(CBW.bLUN, SCSI_LBA , SCSI_BlkLen);
;;;193              break;
;;;194            case SCSI_VERIFY10:
;;;195              SCSI_Verify10_Cmd(CBW.bLUN);
;;;196              break;
;;;197            case SCSI_FORMAT_UNIT:
;;;198              SCSI_Format_Cmd(CBW.bLUN);
;;;199              break;

⌨️ 快捷键说明

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