📄 memory.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] 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..\..\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\memory.c]
THUMB
AREA ||i.Read_Memory||, CODE, READONLY, ALIGN=2
Read_Memory PROC
;;;56 *******************************************************************************/
;;;57 void Read_Memory(u8 lun, u32 Memory_Offset, u32 Transfer_Length)
000000 b570 PUSH {r4-r6,lr}
;;;58 {
;;;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
;;;62 {
;;;63 Offset = Memory_Offset * Mass_Block_Size[lun];
000008 4e29 LDR r6,|L1.176|
00000a b940 CBNZ r0,|L1.30|
00000c f8560025 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 e9c41003 STRD r1,r0,[r4,#0xc]
000018 2001 MOVS r0,#1
00001a 7020 STRB r0,[r4,#0]
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 f8560025 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
000032 f7fffffe 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 f7fffffe BL UserToPMABufferCopy
;;;78 Block_Read_count = Mass_Block_Size[lun] - BULK_MAX_PACKET_SIZE;
000040 f8560025 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 f7fffffe 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 f7fffffe BL SetEPTxCount
;;;89 SetEPTxStatus(ENDP1, EP_TX_VALID);
00006e 2130 MOVS r1,#0x30
000070 2001 MOVS r0,#1
000072 f7fffffe BL SetEPTxStatus
;;;90 Offset += BULK_MAX_PACKET_SIZE;
000076 68e0 LDR r0,[r4,#0xc] ; Offset
;;;91 Length -= BULK_MAX_PACKET_SIZE;
;;;92
;;;93 CSW.dDataResidue -= BULK_MAX_PACKET_SIZE;
000078 490f LDR r1,|L1.184|
00007a 3040 ADDS r0,r0,#0x40 ;90
00007c 60e0 STR r0,[r4,#0xc] ;91 ; Offset
00007e 6920 LDR r0,[r4,#0x10] ;91 ; Length
000080 3840 SUBS r0,r0,#0x40 ;91
000082 6120 STR r0,[r4,#0x10] ; Length
000084 6888 LDR r0,[r1,#8] ; CSW
000086 3840 SUBS r0,r0,#0x40
;;;94 Led_RW_ON();
000088 6088 STR r0,[r1,#8] ; CSW
00008a f7fffffe BL Led_RW_ON
|L1.142|
;;;95 }
;;;96 if (Length == 0)
00008e 6920 LDR r0,[r4,#0x10] ; Length
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
00009e 7011 STRB r1,[r2,#0]
;;;102 TransferState = TXFR_IDLE;
0000a0 7020 STRB r0,[r4,#0]
;;;103 Led_RW_OFF();
0000a2 e8bd4070 POP {r4-r6,lr}
0000a6 f7ffbffe B.W Led_RW_OFF
|L1.170|
;;;104 }
;;;105 }
0000aa bd70 POP {r4-r6,pc}
;;;106
ENDP
|L1.172|
DCD ||.data||
|L1.176|
DCD Mass_Block_Size
|L1.180|
DCD ||.bss||
|L1.184|
DCD ||CSW||
|L1.188|
DCD Bot_State
AREA ||i.Write_Memory||, CODE, READONLY, ALIGN=2
Write_Memory PROC
;;;113 *******************************************************************************/
;;;114 void Write_Memory(u8 lun, u32 Memory_Offset, u32 Transfer_Length)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;115 {
;;;116
;;;117 static u32 W_Offset, W_Length;
;;;118
;;;119 u32 temp = Counter + 64;
000004 4c2e LDR r4,|L2.192|
000006 68a3 LDR r3,[r4,#8] ; Counter
;;;120
;;;121 if (TransferState == TXFR_IDLE )
000008 7825 LDRB r5,[r4,#0] ; TransferState
;;;122 {
;;;123 W_Offset = Memory_Offset * Mass_Block_Size[lun];
00000a f8dfc0b8 LDR r12,|L2.196|
00000e 3340 ADDS r3,r3,#0x40 ;119
000010 f04f0800 MOV r8,#0 ;121
000014 b945 CBNZ r5,|L2.40|
000016 f85c5020 LDR r5,[r12,r0,LSL #2]
00001a 4369 MULS r1,r5,r1
;;;124 W_Length = Transfer_Length * Mass_Block_Size[lun];
00001c 4355 MULS r5,r2,r5
;;;125 TransferState = TXFR_ONGOING;
00001e e9c41505 STRD r1,r5,[r4,#0x14]
000022 2101 MOVS r1,#1
000024 7021 STRB r1,[r4,#0]
000026 e001 B |L2.44|
|L2.40|
;;;126 }
;;;127
;;;128 if (TransferState == TXFR_ONGOING )
000028 2d01 CMP r5,#1
00002a d134 BNE |L2.150|
|L2.44|
;;;129 {
;;;130
;;;131 for (Idx = 0 ; Counter < temp; Counter++)
00002c 46c6 MOV lr,r8
;;;132 {
;;;133 *((u8 *)Data_Buffer + Counter) = Bulk_Data_Buff[Idx++];
00002e 4f26 LDR r7,|L2.200|
000030 4d26 LDR r5,|L2.204|
000032 f8c48020 STR r8,[r4,#0x20] ;131 ; Idx
000036 e008 B |L2.74|
|L2.56|
000038 6a21 LDR r1,[r4,#0x20] ; Idx
00003a 68a6 LDR r6,[r4,#8] ; Counter
00003c 5c7a LDRB r2,[r7,r1]
00003e 1c49 ADDS r1,r1,#1
000040 55aa STRB r2,[r5,r6]
000042 6221 STR r1,[r4,#0x20] ;131 ; Idx
000044 68a1 LDR r1,[r4,#8] ;131 ; Counter
000046 1c49 ADDS r1,r1,#1 ;131
000048 60a1 STR r1,[r4,#8] ;131 ; Counter
|L2.74|
00004a 68a1 LDR r1,[r4,#8] ;131 ; Counter
00004c 4299 CMP r1,r3 ;131
00004e d3f3 BCC |L2.56|
;;;134 }
;;;135
;;;136 W_Offset += Data_Len;
000050 4f1f LDR r7,|L2.208|
000052 6962 LDR r2,[r4,#0x14] ; W_Offset
000054 8839 LDRH r1,[r7,#0] ; Data_Len
000056 4623 MOV r3,r4
000058 1855 ADDS r5,r2,r1
;;;137 W_Length -= Data_Len;
00005a 6165 STR r5,[r4,#0x14] ; W_Offset
00005c 69a2 LDR r2,[r4,#0x18] ; W_Length
00005e 1a52 SUBS r2,r2,r1
;;;138
;;;139 if (!(W_Length % Mass_Block_Size[lun]))
000060 61a2 STR r2,[r4,#0x18] ; W_Length
000062 f85c1020 LDR r1,[r12,r0,LSL #2]
000066 fbb2f6f1 UDIV r6,r2,r1
00006a fb012216 MLS r2,r1,r6,r2
00006e b932 CBNZ r2,|L2.126|
;;;140 {
;;;141 Counter = 0;
000070 f8c3e008 STR lr,[r3,#8] ; Counter
;;;142 MAL_Write(lun ,
000074 b28b UXTH r3,r1
000076 1a69 SUBS r1,r5,r1
000078 4a14 LDR r2,|L2.204|
00007a f7fffffe BL MAL_Write
|L2.126|
;;;143 W_Offset - Mass_Block_Size[lun],
;;;144 Data_Buffer,
;;;145 Mass_Block_Size[lun]);
;;;146 }
;;;147
;;;148 CSW.dDataResidue -= Data_Len;
00007e 4815 LDR r0,|L2.212|
000080 883a LDRH r2,[r7,#0] ; Data_Len
000082 6881 LDR r1,[r0,#8] ; CSW
000084 1a89 SUBS r1,r1,r2
;;;149 SetEPRxStatus(ENDP2, EP_RX_VALID); /* enable the next transaction*/
000086 6081 STR r1,[r0,#8] ; CSW
000088 f44f5140 MOV r1,#0x3000
00008c 2002 MOVS r0,#2
00008e f7fffffe BL SetEPRxStatus
;;;150
;;;151 Led_RW_ON();
000092 f7fffffe BL Led_RW_ON
|L2.150|
;;;152 }
;;;153
;;;154 if ((W_Length == 0) || (Bot_State == BOT_CSW_Send))
000096 69a0 LDR r0,[r4,#0x18] ; W_Length
000098 b118 CBZ r0,|L2.162|
00009a 480f LDR r0,|L2.216|
00009c 7800 LDRB r0,[r0,#0] ; Bot_State
00009e 2804 CMP r0,#4
0000a0 d10b BNE |L2.186|
|L2.162|
;;;155 {
;;;156 Counter = 0;
0000a2 4645 MOV r5,r8
0000a4 f8c48008 STR r8,[r4,#8] ; Counter
;;;157 Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
0000a8 2101 MOVS r1,#1
0000aa 2000 MOVS r0,#0
0000ac f7fffffe BL Set_CSW
;;;158 TransferState = TXFR_IDLE;
0000b0 7025 STRB r5,[r4,#0]
;;;159 Led_RW_OFF();
0000b2 e8bd41f0 POP {r4-r8,lr}
0000b6 f7ffbffe B.W Led_RW_OFF
|L2.186|
;;;160 }
;;;161 }
0000ba e8bd81f0 POP {r4-r8,pc}
;;;162
ENDP
0000be 0000 DCW 0x0000
|L2.192|
DCD ||.data||
|L2.196|
DCD Mass_Block_Size
|L2.200|
DCD Bulk_Data_Buff
|L2.204|
DCD ||.bss||
|L2.208|
DCD Data_Len
|L2.212|
DCD ||CSW||
|L2.216|
DCD Bot_State
AREA ||.bss||, DATA, NOINIT, ALIGN=2
Data_Buffer
% 512
AREA ||.data||, DATA, ALIGN=2
TransferState
000000 00000000 DCB 0x00,0x00,0x00,0x00
Block_Read_count
DCD 0x00000000
Counter
DCD 0x00000000
Offset
DCD 0x00000000
Length
DCD 0x00000000
W_Offset
DCD 0x00000000
W_Length
DCD 0x00000000
Block_offset
DCD 0x00000000
Idx
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -