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

📄 usb_bot.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] 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..\..\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 ..\..\source\usb_bot.c]
                          THUMB

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

                  Bot_Abort PROC
;;;307    *******************************************************************************/
;;;308    void Bot_Abort(u8 Direction)
000000  b510              PUSH     {r4,lr}
;;;309    {
;;;310      switch (Direction)
000002  b178              CBZ      r0,|L1.36|
;;;311      {
;;;312        case DIR_IN :
;;;313          SetEPTxStatus(ENDP1, EP_TX_STALL);
;;;314          break;
;;;315        case DIR_OUT :
;;;316          SetEPRxStatus(ENDP2, EP_RX_STALL);
000004  f44f5480          MOV      r4,#0x1000
000008  2801              CMP      r0,#1                 ;310
00000a  d005              BEQ      |L1.24|
00000c  2802              CMP      r0,#2                 ;310
00000e  d10f              BNE      |L1.48|
;;;317          break;
;;;318        case BOTH_DIR :
;;;319          SetEPTxStatus(ENDP1, EP_TX_STALL);
000010  2110              MOVS     r1,#0x10
000012  2001              MOVS     r0,#1
000014  f7fffffe          BL       SetEPTxStatus
                  |L1.24|
000018  4621              MOV      r1,r4                 ;316
00001a  e8bd4010          POP      {r4,lr}               ;316
00001e  2002              MOVS     r0,#2                 ;316
000020  f7ffbffe          B.W      SetEPRxStatus
                  |L1.36|
000024  2110              MOVS     r1,#0x10              ;313
000026  e8bd4010          POP      {r4,lr}               ;313
00002a  2001              MOVS     r0,#1                 ;313
00002c  f7ffbffe          B.W      SetEPTxStatus
                  |L1.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
;;;119    *******************************************************************************/
;;;120    void CBW_Decode(void)
000000  b570              PUSH     {r4-r6,lr}
;;;121    {
;;;122      u32 Counter;
;;;123    
;;;124      for (Counter = 0; Counter < Data_Len; Counter++)
000002  4b60              LDR      r3,|L2.388|
;;;125      {
;;;126        *((u8 *)&CBW + Counter) = Bulk_Data_Buff[Counter];
000004  4c60              LDR      r4,|L2.392|
000006  2000              MOVS     r0,#0                 ;124
000008  8859              LDRH     r1,[r3,#2]            ;124
00000a  f1a40240          SUB      r2,r4,#0x40
00000e  e002              B        |L2.22|
                  |L2.16|
000010  5c15              LDRB     r5,[r2,r0]
000012  5425              STRB     r5,[r4,r0]
000014  1c40              ADDS     r0,r0,#1              ;124
                  |L2.22|
000016  4288              CMP      r0,r1                 ;124
000018  d3fa              BCC      |L2.16|
;;;127      }
;;;128      CSW.dTag = CBW.dTag;
00001a  485b              LDR      r0,|L2.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      |L2.58|
;;;131      {
;;;132        Bot_Abort(BOTH_DIR);
00002a  2002              MOVS     r0,#2
00002c  f7fffffe          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        |L2.126|
                  |L2.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      |L2.68|
000040  292a              CMP      r1,#0x2a
000042  d10a              BNE      |L2.90|
                  |L2.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  f8d40011          LDR      r0,[r4,#0x11]  ; CBW
000048  7d22              LDRB     r2,[r4,#0x14]  ; CBW
00004a  ba00              REV      r0,r0
00004c  f02000ff          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
                  |L2.90|
;;;146      }
;;;147    
;;;148      if (CBW.dSignature == BOT_CBW_SIGNATURE)
00005a  4a4c              LDR      r2,|L2.396|
00005c  6820              LDR      r0,[r4,#0]  ; CBW
00005e  4290              CMP      r0,r2
000060  d17d              BNE      |L2.350|
;;;149      {
;;;150        /* Valid CBW */
;;;151        if ((CBW.bLUN > Max_Lun) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
000062  4a4b              LDR      r2,|L2.400|
000064  7b60              LDRB     r0,[r4,#0xd]  ; CBW
000066  6812              LDR      r2,[r2,#0]  ; Max_Lun
000068  4290              CMP      r0,r2
00006a  d803              BHI      |L2.116|
00006c  7ba2              LDRB     r2,[r4,#0xe]  ; CBW
00006e  b10a              CBZ      r2,|L2.116|
000070  2a10              CMP      r2,#0x10
000072  d90d              BLS      |L2.144|
                  |L2.116|
;;;152        {
;;;153          Bot_Abort(BOTH_DIR);
000074  2002              MOVS     r0,#2
000076  f7fffffe          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
                  |L2.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;
;;;200              /*Unsupported command*/
;;;201    
;;;202            case SCSI_MODE_SELECT10:
;;;203              SCSI_Mode_Select10_Cmd(CBW.bLUN);
;;;204              break;
;;;205            case SCSI_MODE_SELECT6:
;;;206              SCSI_Mode_Select6_Cmd(CBW.bLUN);
;;;207              break;
;;;208    
;;;209            case SCSI_SEND_DIAGNOSTIC:
;;;210              SCSI_Send_Diagnostic_Cmd(CBW.bLUN);
;;;211              break;
;;;212            case SCSI_READ6:
;;;213              SCSI_Read6_Cmd(CBW.bLUN);
;;;214              break;
;;;215            case SCSI_READ12:
;;;216              SCSI_Read12_Cmd(CBW.bLUN);
;;;217              break;
;;;218            case SCSI_READ16:
;;;219              SCSI_Read16_Cmd(CBW.bLUN);
;;;220              break;
;;;221            case SCSI_READ_CAPACITY16:
;;;222              SCSI_READ_CAPACITY16_Cmd(CBW.bLUN);
;;;223              break;
;;;224            case SCSI_WRITE6:
;;;225              SCSI_Write6_Cmd(CBW.bLUN);
;;;226              break;
;;;227            case SCSI_WRITE12:
;;;228              SCSI_Write12_Cmd(CBW.bLUN);
;;;229              break;
;;;230            case SCSI_WRITE16:
;;;231              SCSI_Write16_Cmd(CBW.bLUN);
;;;232              break;
;;;233            case SCSI_VERIFY12:
;;;234              SCSI_Verify12_Cmd(CBW.bLUN);
;;;235              break;
;;;236            case SCSI_VERIFY16:
;;;237              SCSI_Verify16_Cmd(CBW.bLUN);
;;;238              break;
;;;239    
;;;240            default:
;;;241            {
;;;242              Bot_Abort(BOTH_DIR);
;;;243              Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
;;;244              Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
;;;245            }
;;;246          }
;;;247        }
;;;248      }
;;;249      else
;;;250      {
;;;251        /* Invalid CBW */
;;;252        Bot_Abort(BOTH_DIR);
;;;253        Set_Scsi_Sense_Data(CBW.bLUN, ILLEGAL_REQUEST, INVALID_COMMAND);
00007e  2105              MOVS     r1,#5
000080  f7fffffe          BL       Set_Scsi_Sense_Data
;;;254        Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
000084  e8bd4070          POP      {r4-r6,lr}
000088  2100              MOVS     r1,#0
00008a  2001              MOVS     r0,#1
00008c  f7ffbffe          B.W      Set_CSW
                  |L2.144|
000090  2925              CMP      r1,#0x25              ;159
000092  d05b              BEQ      |L2.332|
000094  dc20              BGT      |L2.216|
000096  2915              CMP      r1,#0x15              ;159
000098  d040              BEQ      |L2.284|
00009a  dc13              BGT      |L2.196|
00009c  2908              CMP      r1,#8                 ;159
00009e  d03d              BEQ      |L2.284|
0000a0  dc08              BGT      |L2.180|
0000a2  b3b1              CBZ      r1,|L2.274|
0000a4  2903              CMP      r1,#3                 ;159
0000a6  d03d              BEQ      |L2.292|
0000a8  2904              CMP      r1,#4                 ;159
0000aa  d165              BNE      |L2.376|
0000ac  e8bd4070          POP      {r4-r6,lr}            ;198
0000b0  f7ffbffe          B.W      SCSI_Format_Cmd
                  |L2.180|
0000b4  290a              CMP      r1,#0xa               ;159
0000b6  d031              BEQ      |L2.284|
0000b8  2912              CMP      r1,#0x12              ;159
0000ba  d15d              BNE      |L2.376|
0000bc  e8bd4070          POP      {r4-r6,lr}            ;165
0000c0  f7ffbffe          B.W      SCSI_Inquiry_Cmd
                  |L2.196|
0000c4  391a              SUBS     r1,r1,#0x1a           ;159
0000c6  290a              CMP      r1,#0xa               ;159
0000c8  d256              BCS      |L2.376|
0000ca  e8dff001          TBB      [pc,r1]               ;159
0000ce  332f              DCB      0x33,0x2f
0000d0  55272f55          DCB      0x55,0x27,0x2f,0x55
0000d4  5555553b          DCB      0x55,0x55,0x55,0x3b
                  |L2.216|
0000d8  298a              CMP      r1,#0x8a              ;159
0000da  d01f              BEQ      |L2.284|
0000dc  dc11              BGT      |L2.258|
0000de  2955              CMP      r1,#0x55              ;159
0000e0  d01c              BEQ      |L2.284|
0000e2  dc09              BGT      |L2.248|
0000e4  2928              CMP      r1,#0x28              ;159
0000e6  d039              BEQ      |L2.348|
0000e8  292a              CMP      r1,#0x2a              ;159
0000ea  d03f              BEQ      |L2.364|
0000ec  292f              CMP      r1,#0x2f              ;159
0000ee  d143              BNE      |L2.376|
0000f0  e8bd4070          POP      {r4-r6,lr}            ;195
0000f4  f7ffbffe          B.W      SCSI_Verify10_Cmd
                  |L2.248|
0000f8  295a              CMP      r1,#0x5a              ;159
0000fa  d01f              BEQ      |L2.316|
0000fc  2988              CMP      r1,#0x88              ;159
0000fe  d13b              BNE      |L2.376|
000100  e00c              B        |L2.284|
                  |L2.258|
000102  29a8              CMP      r1,#0xa8              ;159
000104  d00a              BEQ      |L2.284|
000106  dc05              BGT      |L2.276|
000108  298f              CMP      r1,#0x8f              ;159
00010a  d007              BEQ      |L2.284|
00010c  299e              CMP      r1,#0x9e              ;159
00010e  d133              BNE      |L2.376|
000110  e004              B        |L2.284|
                  |L2.274|
000112  e01f              B        |L2.340|
                  |L2.276|
000114  29aa              CMP      r1,#0xaa              ;159
000116  d001              BEQ      |L2.284|
000118  29af              CMP      r1,#0xaf              ;159

⌨️ 快捷键说明

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