📄 usb_scsi.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_scsi.o --depend=.\Obj\usb_scsi.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_scsi.crf Code\USBMassStorage\SRC\usb_scsi.c]
THUMB
AREA ||i.SCSI_Inquiry_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Inquiry_Cmd PROC
;;;51
;;;52 if (CBW.CB[1] & 0x01)/*Evpd is set*/
000000 4906 LDR r1,|L1.28|
000002 7c08 LDRB r0,[r1,#0x10] ; CBW
000004 07c0 LSLS r0,r0,#31
000006 d002 BEQ |L1.14|
;;;53 {
;;;54 Inquiry_Data = Page00_Inquiry_Data;
000008 4805 LDR r0,|L1.32|
;;;55 Inquiry_Data_Length = 5;
00000a 2105 MOVS r1,#5
00000c e004 B |L1.24|
|L1.14|
;;;56 }
;;;57 else
;;;58 {
;;;59 Inquiry_Data = Standard_Inquiry_Data;
;;;60 if (CBW.CB[4] <= STANDARD_INQUIRY_DATA_LEN)
00000e 7cc9 LDRB r1,[r1,#0x13] ; CBW
000010 4804 LDR r0,|L1.36|
000012 2924 CMP r1,#0x24
000014 d900 BLS |L1.24|
;;;61 Inquiry_Data_Length = CBW.CB[4];
;;;62 else
;;;63 Inquiry_Data_Length = STANDARD_INQUIRY_DATA_LEN;
000016 2124 MOVS r1,#0x24
|L1.24|
;;;64 }
;;;65 Transfer_Data_Request(Inquiry_Data, Inquiry_Data_Length);
000018 f7ffbffe B.W Transfer_Data_Request
;;;66 }
;;;67
ENDP
|L1.28|
00001c 00000000 DCD ||CBW||
|L1.32|
000020 00000000 DCD Page00_Inquiry_Data
|L1.36|
000024 00000000 DCD Standard_Inquiry_Data
AREA ||i.SCSI_ReadFormatCapacity_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ReadFormatCapacity_Cmd PROC
;;;76 {
;;;77 ReadFormatCapacity_Data[4] = (u8)(Mass_Block_Count >> 24);
000000 4809 LDR r0,|L2.40|
000002 6801 LDR r1,[r0,#0] ; Mass_Block_Count
000004 4809 LDR r0,|L2.44|
000006 0e0a LSRS r2,r1,#24
000008 7102 STRB r2,[r0,#4] ; ReadFormatCapacity_Data
;;;78 ReadFormatCapacity_Data[5] = (u8)(Mass_Block_Count >> 16);
00000a 0c0a LSRS r2,r1,#16
00000c 7142 STRB r2,[r0,#5] ; ReadFormatCapacity_Data
;;;79 ReadFormatCapacity_Data[6] = (u8)(Mass_Block_Count >> 8);
00000e 0a0a LSRS r2,r1,#8
000010 7182 STRB r2,[r0,#6] ; ReadFormatCapacity_Data
;;;80 ReadFormatCapacity_Data[7] = (u8)(Mass_Block_Count);
000012 71c1 STRB r1,[r0,#7] ; ReadFormatCapacity_Data
;;;81
;;;82 ReadFormatCapacity_Data[9] = (u8)(Mass_Block_Size >> 16);
000014 4906 LDR r1,|L2.48|
000016 6809 LDR r1,[r1,#0] ; Mass_Block_Size
000018 0c0a LSRS r2,r1,#16
00001a 7242 STRB r2,[r0,#9] ; ReadFormatCapacity_Data
;;;83 ReadFormatCapacity_Data[10] = (u8)(Mass_Block_Size >> 8);
00001c 0a0a LSRS r2,r1,#8
00001e 7282 STRB r2,[r0,#0xa] ; ReadFormatCapacity_Data
;;;84 ReadFormatCapacity_Data[11] = (u8)(Mass_Block_Size);
000020 72c1 STRB r1,[r0,#0xb] ; ReadFormatCapacity_Data
;;;85 Transfer_Data_Request(ReadFormatCapacity_Data, READ_FORMAT_CAPACITY_DATA_LEN);
000022 210c MOVS r1,#0xc
000024 f7ffbffe B.W Transfer_Data_Request
;;;86 }
;;;87
ENDP
|L2.40|
000028 00000000 DCD Mass_Block_Count
|L2.44|
00002c 00000000 DCD ReadFormatCapacity_Data
|L2.48|
000030 00000000 DCD Mass_Block_Size
AREA ||i.SCSI_ReadCapacity10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ReadCapacity10_Cmd PROC
;;;96 {
;;;97 ReadCapacity10_Data[0] = (u8)(Mass_Block_Count - 1 >> 24);
000000 480b LDR r0,|L3.48|
000002 6801 LDR r1,[r0,#0] ; Mass_Block_Count
000004 480b LDR r0,|L3.52|
000006 1e49 SUBS r1,r1,#1
000008 0e0a LSRS r2,r1,#24
00000a 7002 STRB r2,[r0,#0] ; ReadCapacity10_Data
;;;98 ReadCapacity10_Data[1] = (u8)(Mass_Block_Count - 1 >> 16);
00000c 0c0a LSRS r2,r1,#16
00000e 7042 STRB r2,[r0,#1] ; ReadCapacity10_Data
;;;99 ReadCapacity10_Data[2] = (u8)(Mass_Block_Count - 1 >> 8);
000010 0a0a LSRS r2,r1,#8
000012 7082 STRB r2,[r0,#2] ; ReadCapacity10_Data
;;;100 ReadCapacity10_Data[3] = (u8)(Mass_Block_Count - 1);
000014 70c1 STRB r1,[r0,#3] ; ReadCapacity10_Data
;;;101
;;;102 ReadCapacity10_Data[4] = (u8)(Mass_Block_Size >> 24);
000016 4908 LDR r1,|L3.56|
000018 6809 LDR r1,[r1,#0] ; Mass_Block_Size
00001a 0e0a LSRS r2,r1,#24
00001c 7102 STRB r2,[r0,#4] ; ReadCapacity10_Data
;;;103 ReadCapacity10_Data[5] = (u8)(Mass_Block_Size >> 16);
00001e 0c0a LSRS r2,r1,#16
000020 7142 STRB r2,[r0,#5] ; ReadCapacity10_Data
;;;104 ReadCapacity10_Data[6] = (u8)(Mass_Block_Size >> 8);
000022 0a0a LSRS r2,r1,#8
000024 7182 STRB r2,[r0,#6] ; ReadCapacity10_Data
;;;105 ReadCapacity10_Data[7] = (u8)(Mass_Block_Size);
000026 71c1 STRB r1,[r0,#7] ; ReadCapacity10_Data
;;;106 Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);
000028 2108 MOVS r1,#8
00002a f7ffbffe B.W Transfer_Data_Request
;;;107 }
;;;108
ENDP
00002e 0000 DCW 0x0000
|L3.48|
000030 00000000 DCD Mass_Block_Count
|L3.52|
000034 00000000 DCD ReadCapacity10_Data
|L3.56|
000038 00000000 DCD Mass_Block_Size
AREA ||i.SCSI_ModeSense6_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ModeSense6_Cmd PROC
;;;117 {
;;;118 Transfer_Data_Request(Mode_Sense6_data, MODE_SENSE6_DATA_LEN);
000000 2104 MOVS r1,#4
000002 4801 LDR r0,|L4.8|
000004 f7ffbffe B.W Transfer_Data_Request
;;;119 }
;;;120
ENDP
|L4.8|
000008 00000000 DCD Mode_Sense6_data
AREA ||i.SCSI_ModeSense10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_ModeSense10_Cmd PROC
;;;129 {
;;;130 Transfer_Data_Request(Mode_Sense10_data, MODE_SENSE10_DATA_LEN);
000000 2108 MOVS r1,#8
000002 4801 LDR r0,|L5.8|
000004 f7ffbffe B.W Transfer_Data_Request
;;;131 }
;;;132
ENDP
|L5.8|
000008 00000000 DCD Mode_Sense10_data
AREA ||i.SCSI_RequestSense_Cmd||, CODE, READONLY, ALIGN=2
SCSI_RequestSense_Cmd PROC
;;;143
;;;144 if (CBW.CB[4] <= REQUEST_SENSE_DATA_LEN)
000000 4803 LDR r0,|L6.16|
000002 7cc1 LDRB r1,[r0,#0x13] ; CBW
000004 2912 CMP r1,#0x12
000006 d900 BLS |L6.10|
;;;145 {
;;;146 Request_Sense_data_Length = CBW.CB[4];
;;;147 }
;;;148 else
;;;149 {
;;;150 Request_Sense_data_Length = REQUEST_SENSE_DATA_LEN;
000008 2112 MOVS r1,#0x12
|L6.10|
;;;151 }
;;;152 Transfer_Data_Request(Scsi_Sense_Data, Request_Sense_data_Length);
00000a 4802 LDR r0,|L6.20|
00000c f7ffbffe B.W Transfer_Data_Request
;;;153 }
;;;154
ENDP
|L6.16|
000010 00000000 DCD ||CBW||
|L6.20|
000014 00000000 DCD Scsi_Sense_Data
AREA ||i.Set_Scsi_Sense_Data||, CODE, READONLY, ALIGN=2
Set_Scsi_Sense_Data PROC
000000 4a01 LDR r2,|L7.8|
000002 7090 STRB r0,[r2,#2] ; Scsi_Sense_Data
000004 7311 STRB r1,[r2,#0xc] ; Scsi_Sense_Data
000006 4770 BX lr
ENDP
|L7.8|
000008 00000000 DCD Scsi_Sense_Data
AREA ||i.SCSI_Start_Stop_Unit_Cmd||, CODE, READONLY, ALIGN=1
SCSI_Start_Stop_Unit_Cmd PROC
;;;177 {
;;;178 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
000000 2101 MOVS r1,#1
000002 2000 MOVS r0,#0
000004 f7ffbffe B.W Set_CSW
;;;179 }
;;;180
ENDP
AREA ||i.SCSI_Read10_Cmd||, CODE, READONLY, ALIGN=2
SCSI_Read10_Cmd PROC
;;;188 void SCSI_Read10_Cmd(void)
;;;189 {
000000 b510 PUSH {r4,lr}
;;;190
;;;191 if (Bot_State == BOT_IDLE)
000002 4c12 LDR r4,|L9.76|
000004 7820 LDRB r0,[r4,#0] ; Bot_State
000006 b9c8 CBNZ r0,|L9.60|
;;;192 {
;;;193 if (!(Address_Management_Test(SCSI_READ10)))/*address out of range*/
000008 2028 MOVS r0,#0x28
00000a f7fffffe BL Address_Management_Test
00000e 2800 CMP r0,#0
000010 d01a BEQ |L9.72|
;;;194 {
;;;195 return;
;;;196 }
;;;197
;;;198 if ((CBW.bmFlags & 0x80) != 0)
000012 480f LDR r0,|L9.80|
000014 7b00 LDRB r0,[r0,#0xc] ; CBW
000016 0600 LSLS r0,r0,#24
;;;199 {
;;;200 Bot_State = BOT_DATA_IN;
000018 f04f0002 MOV r0,#2
00001c d501 BPL |L9.34|
00001e 7020 STRB r0,[r4,#0] ; Bot_State
;;;201 Read_Memory();
000020 e00e B |L9.64|
|L9.34|
;;;202 }
;;;203 else
;;;204 {
;;;205 Bot_Abort(BOTH_DIR);
000022 f7fffffe BL Bot_Abort
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -