📄 usb_bot.txt
字号:
; 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 + -