📄 memory.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\memory.o --depend=.\Obj\memory.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\memory.crf ..\..\source\memory.c]
THUMB
AREA ||i.Read_Memory||, CODE, READONLY, ALIGN=2
Read_Memory PROC
;;;57 void Read_Memory(u8 lun, u32 Memory_Offset, u32 Transfer_Length)
;;;58 {
000000 b570 PUSH {r4-r6,lr}
;;;59 static u32 Offset, Length;
;;;60
;;;61 if (TransferState == TXFR_IDLE )
000002 4c2a LDR r4,|L1.172|
000004 4605 MOV r5,r0 ;58
000006 7820 LDRB r0,[r4,#0] ; TransferState
000008 4e29 LDR r6,|L1.176|
00000a b940 CBNZ r0,|L1.30|
;;;62 {
;;;63 Offset = Memory_Offset * Mass_Block_Size[lun];
00000c f856f856 LDR r0,[r6,r5,LSL #2]
000010 4341 MULS r1,r0,r1
;;;64 Length = Transfer_Length * Mass_Block_Size[lun];
000012 4350 MULS r0,r2,r0
;;;65 TransferState = TXFR_ONGOING;
000014 e9c4e9c4 STRD r1,r0,[r4,#0xc]
000018 2001 MOVS r0,#1
00001a 7020 STRB r0,[r4,#0] ; TransferState
00001c e001 B |L1.34|
|L1.30|
;;;66 }
;;;67
;;;68 if (TransferState == TXFR_ONGOING )
00001e 2801 CMP r0,#1
000020 d135 BNE |L1.142|
|L1.34|
;;;69 {
;;;70 if (!Block_Read_count)
000022 6860 LDR r0,[r4,#4] ; Block_Read_count
000024 b990 CBNZ r0,|L1.76|
;;;71 {
;;;72 MAL_Read(lun ,
000026 f856f856 LDR r0,[r6,r5,LSL #2]
00002a 4a22 LDR r2,|L1.180|
00002c b283 UXTH r3,r0
00002e 4628 MOV r0,r5
000030 68e1 LDR r1,[r4,#0xc] ; Offset@Read_Memory_0
000032 f7fff7ff BL MAL_Read
;;;73 Offset ,
;;;74 Data_Buffer,
;;;75 Mass_Block_Size[lun]);
;;;76
;;;77 UserToPMABufferCopy((u8 *)Data_Buffer, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
000036 2240 MOVS r2,#0x40
000038 2198 MOVS r1,#0x98
00003a 481e LDR r0,|L1.180|
00003c f7fff7ff BL UserToPMABufferCopy
;;;78 Block_Read_count = Mass_Block_Size[lun] - BULK_MAX_PACKET_SIZE;
000040 f856f856 LDR r0,[r6,r5,LSL #2]
000044 3840 SUBS r0,r0,#0x40
000046 6060 STR r0,[r4,#4] ; Block_Read_count
;;;79 Block_offset = BULK_MAX_PACKET_SIZE;
000048 2040 MOVS r0,#0x40
00004a e00b B |L1.100|
|L1.76|
;;;80 }
;;;81 else
;;;82 {
;;;83 UserToPMABufferCopy((u8 *)Data_Buffer + Block_offset, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
00004c 4819 LDR r0,|L1.180|
00004e 69e1 LDR r1,[r4,#0x1c] ; Block_offset
000050 2240 MOVS r2,#0x40
000052 4408 ADD r0,r0,r1
000054 2198 MOVS r1,#0x98
000056 f7fff7ff BL UserToPMABufferCopy
;;;84 Block_Read_count -= BULK_MAX_PACKET_SIZE;
00005a 6860 LDR r0,[r4,#4] ; Block_Read_count
00005c 3840 SUBS r0,r0,#0x40
00005e 6060 STR r0,[r4,#4] ; Block_Read_count
;;;85 Block_offset += BULK_MAX_PACKET_SIZE;
000060 69e0 LDR r0,[r4,#0x1c] ; Block_offset
000062 3040 ADDS r0,r0,#0x40
|L1.100|
000064 61e0 STR r0,[r4,#0x1c] ; Block_offset
;;;86 }
;;;87
;;;88 SetEPTxCount(ENDP1, BULK_MAX_PACKET_SIZE);
000066 2140 MOVS r1,#0x40
000068 2001 MOVS r0,#1
00006a f7fff7ff BL SetEPTxCount
;;;89 SetEPTxStatus(ENDP1, EP_TX_VALID);
00006e 2130 MOVS r1,#0x30
000070 2001 MOVS r0,#1
000072 f7fff7ff BL SetEPTxStatus
;;;90 Offset += BULK_MAX_PACKET_SIZE;
000076 68e0 LDR r0,[r4,#0xc] ; Offset@Read_Memory_0
000078 3040 ADDS r0,r0,#0x40
;;;91 Length -= BULK_MAX_PACKET_SIZE;
00007a 60e0 STR r0,[r4,#0xc] ; Offset@Read_Memory_0
00007c 6920 LDR r0,[r4,#0x10] ; Length@Read_Memory_1
00007e 3840 SUBS r0,r0,#0x40
;;;92
;;;93 CSW.dDataResidue -= BULK_MAX_PACKET_SIZE;
000080 6120 STR r0,[r4,#0x10] ; Length@Read_Memory_1
000082 480d LDR r0,|L1.184|
000084 6881 LDR r1,[r0,#8] ; CSW
000086 3940 SUBS r1,r1,#0x40
;;;94 Led_RW_ON();
000088 6081 STR r1,[r0,#8] ; CSW
00008a f7fff7ff BL Led_RW_ON
|L1.142|
;;;95 }
;;;96 if (Length == 0)
00008e 6920 LDR r0,[r4,#0x10] ; Length@Read_Memory_1
000090 2800 CMP r0,#0
000092 d10a BNE |L1.170|
;;;97 {
;;;98 Block_Read_count = 0;
000094 6060 STR r0,[r4,#4] ; Block_Read_count
;;;99 Block_offset = 0;
000096 61e0 STR r0,[r4,#0x1c] ; Block_offset
;;;100 Offset = 0;
;;;101 Bot_State = BOT_DATA_IN_LAST;
000098 4a08 LDR r2,|L1.188|
00009a 2103 MOVS r1,#3
00009c 60e0 STR r0,[r4,#0xc] ; Offset@Read_Memory_0
00009e 7011 STRB r1,[r2,#0] ; Bot_State
;;;102 TransferState = TXFR_IDLE;
0000a0 7020 STRB r0,[r4,#0] ; TransferState
;;;103 Led_RW_OFF();
0000a2 e8bde8bd POP {r4-r6,lr}
0000a6 f7fff7ff B.W Led_RW_OFF
|L1.170|
;;;104 }
;;;105 }
0000aa bd70 POP {r4-r6,pc}
;;;106
ENDP
|L1.172|
0000ac 00000000 DCD ||.data||
|L1.176|
0000b0 00000000 DCD Mass_Block_Size
|L1.180|
0000b4 00000000 DCD ||.bss||
|L1.184|
0000b8 00000000 DCD ||CSW||
|L1.188|
0000bc 00000000 DCD Bot_State
AREA ||i.Write_Memory||, CODE, READONLY, ALIGN=2
Write_Memory PROC
;;;114 void Write_Memory(u8 lun, u32 Memory_Offset, u32 Transfer_Length)
;;;115 {
000000 e92de92d PUSH {r4-r8,lr}
;;;116
;;;117 static u32 W_Offset, W_Length;
;;;118
;;;119 u32 temp = Counter + 64;
000004 4c2c LDR r4,|L2.184|
000006 68a7 LDR r7,[r4,#8] ; Counter
;;;120
;;;121 if (TransferState == TXFR_IDLE )
000008 7823 LDRB r3,[r4,#0] ; TransferState
00000a 3740 ADDS r7,r7,#0x40 ;119
00000c f8dff8df LDR r12,|L2.188|
000010 2600 MOVS r6,#0 ;119
000012 b943 CBNZ r3,|L2.38|
;;;122 {
;;;123 W_Offset = Memory_Offset * Mass_Block_Size[lun];
000014 f85cf85c LDR r3,[r12,r0,LSL #2]
000018 4359 MULS r1,r3,r1
;;;124 W_Length = Transfer_Length * Mass_Block_Size[lun];
00001a 4353 MULS r3,r2,r3
;;;125 TransferState = TXFR_ONGOING;
00001c e9c4e9c4 STRD r1,r3,[r4,#0x14]
000020 2101 MOVS r1,#1
000022 7021 STRB r1,[r4,#0] ; TransferState
000024 e001 B |L2.42|
|L2.38|
;;;126 }
;;;127
;;;128 if (TransferState == TXFR_ONGOING )
000026 2b01 CMP r3,#1
000028 d133 BNE |L2.146|
|L2.42|
;;;129 {
;;;130
;;;131 for (Idx = 0 ; Counter < temp; Counter++)
00002a f8dff8df LDR lr,|L2.192|
00002e 4a25 LDR r2,|L2.196|
000030 6226 STR r6,[r4,#0x20] ; Idx
000032 e009 B |L2.72|
|L2.52|
;;;132 {
;;;133 *((u8 *)Data_Buffer + Counter) = Bulk_Data_Buff[Idx++];
000034 6a21 LDR r1,[r4,#0x20] ; Idx
000036 68a5 LDR r5,[r4,#8] ; Counter
000038 f81ef81e LDRB r3,[lr,r1]
00003c 1c49 ADDS r1,r1,#1
00003e 5553 STRB r3,[r2,r5]
000040 6221 STR r1,[r4,#0x20] ;131 ; Idx
000042 68a1 LDR r1,[r4,#8] ;131 ; Counter
000044 1c49 ADDS r1,r1,#1 ;131
000046 60a1 STR r1,[r4,#8] ;131 ; Counter
|L2.72|
000048 68a1 LDR r1,[r4,#8] ;131 ; Counter
00004a 42b9 CMP r1,r7 ;131
00004c d3f2 BCC |L2.52|
;;;134 }
;;;135
;;;136 W_Offset += Data_Len;
00004e 4d1e LDR r5,|L2.200|
000050 6962 LDR r2,[r4,#0x14] ; W_Offset@Write_Memory_0
000052 8829 LDRH r1,[r5,#0] ; Data_Len
000054 4623 MOV r3,r4
000056 1857 ADDS r7,r2,r1
;;;137 W_Length -= Data_Len;
000058 6167 STR r7,[r4,#0x14] ; W_Offset@Write_Memory_0
00005a 69a2 LDR r2,[r4,#0x18] ; W_Length@Write_Memory_1
00005c 1a52 SUBS r2,r2,r1
;;;138
;;;139 if (!(W_Length % Mass_Block_Size[lun]))
00005e 61a2 STR r2,[r4,#0x18] ; W_Length@Write_Memory_1
000060 f85cf85c LDR r1,[r12,r0,LSL #2]
000064 fbb2fbb2 UDIV r12,r2,r1
000068 fb01fb01 MLS r2,r1,r12,r2
00006c b92a CBNZ r2,|L2.122|
;;;140 {
;;;141 Counter = 0;
00006e 609e STR r6,[r3,#8] ; Counter
;;;142 MAL_Write(lun ,
000070 b28b UXTH r3,r1
000072 1a79 SUBS r1,r7,r1
000074 4a13 LDR r2,|L2.196|
000076 f7fff7ff BL MAL_Write
|L2.122|
;;;143 W_Offset - Mass_Block_Size[lun],
;;;144 Data_Buffer,
;;;145 Mass_Block_Size[lun]);
;;;146 }
;;;147
;;;148 CSW.dDataResidue -= Data_Len;
00007a 4814 LDR r0,|L2.204|
00007c 882a LDRH r2,[r5,#0] ; Data_Len
00007e 6881 LDR r1,[r0,#8] ; CSW
000080 1a89 SUBS r1,r1,r2
;;;149 SetEPRxStatus(ENDP2, EP_RX_VALID); /* enable the next transaction*/
000082 6081 STR r1,[r0,#8] ; CSW
000084 f44ff44f MOV r1,#0x3000
000088 2002 MOVS r0,#2
00008a f7fff7ff BL SetEPRxStatus
;;;150
;;;151 Led_RW_ON();
00008e f7fff7ff BL Led_RW_ON
|L2.146|
;;;152 }
;;;153
;;;154 if ((W_Length == 0) || (Bot_State == BOT_CSW_Send))
000092 69a0 LDR r0,[r4,#0x18] ; W_Length@Write_Memory_1
000094 b118 CBZ r0,|L2.158|
000096 480e LDR r0,|L2.208|
000098 7800 LDRB r0,[r0,#0] ; Bot_State
00009a 2804 CMP r0,#4
00009c d109 BNE |L2.178|
|L2.158|
;;;155 {
;;;156 Counter = 0;
00009e 60a6 STR r6,[r4,#8] ; Counter
;;;157 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
0000a0 2101 MOVS r1,#1
0000a2 2000 MOVS r0,#0
0000a4 f7fff7ff BL Set_CSW
;;;158 TransferState = TXFR_IDLE;
0000a8 7026 STRB r6,[r4,#0] ; TransferState
;;;159 Led_RW_OFF();
0000aa e8bde8bd POP {r4-r8,lr}
0000ae f7fff7ff B.W Led_RW_OFF
|L2.178|
;;;160 }
;;;161 }
0000b2 e8bde8bd POP {r4-r8,pc}
;;;162
ENDP
0000b6 0000 DCW 0x0000
|L2.184|
0000b8 00000000 DCD ||.data||
|L2.188|
0000bc 00000000 DCD Mass_Block_Size
|L2.192|
0000c0 00000000 DCD Bulk_Data_Buff
|L2.196|
0000c4 00000000 DCD ||.bss||
|L2.200|
0000c8 00000000 DCD Data_Len
|L2.204|
0000cc 00000000 DCD ||CSW||
|L2.208|
0000d0 00000000 DCD Bot_State
AREA ||.data||, DATA, ALIGN=2
TransferState
000000 00000000 DCB 0x00,0x00,0x00,0x00
Block_Read_count
000004 00000000 DCD 0x00000000
Counter
000008 00000000 DCD 0x00000000
||Offset@Read_Memory_0||
00000c 00000000 DCD 0x00000000
||Length@Read_Memory_1||
000010 00000000 DCD 0x00000000
||W_Offset@Write_Memory_0||
000014 00000000 DCD 0x00000000
||W_Length@Write_Memory_1||
000018 00000000 DCD 0x00000000
Block_offset
00001c 00000000 DCD 0x00000000
Idx
000020 00000000 DCD 0x00000000
AREA ||.bss||, DATA, NOINIT, ALIGN=2
Data_Buffer
% 512
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -