📄 flash.cod
字号:
; 401 : // Put each block back into read mode
; 402 : for (j = 0; j < num_blocks; j++)
003ac e3550000 cmp r5, #0
003b0 0a00000d beq |$L40114|
003b4 e59f3094 ldr r3, [pc, #0x94]
003b8 e59de000 ldr lr, [sp]
003bc e3a008ff mov r0, #0xFF, 16
003c0 e5933000 ldr r3, [r3]
003c4 e38000ff orr r0, r0, #0xFF
003c8 e1a0112e mov r1, lr, lsr #2
003cc e1a03123 mov r3, r3, lsr #2
003d0 |$L40112|
; 403 : {
; 404 : *pFlash = 0x00FF00FF;
; 405 :
; 406 : if ( num_l3_blocks_erased )
003d0 e35a0000 cmp r10, #0
003d4 e5820000 str r0, [r2]
; 407 : {
; 408 : pFlash += (L3_BLOCK_SIZE / 4);
003d8 10822103 addne r2, r2, r3, lsl #2
; 409 : num_l3_blocks_erased--;
; 410 : }
; 411 : else
; 412 : {
; 413 : pFlash += (BLOCK_SIZE / 4);
003dc 00822101 addeq r2, r2, r1, lsl #2
003e0 124aa001 subne r10, r10, #1
003e4 e2555001 subs r5, r5, #1
003e8 1afffff8 bne |$L40112|
003ec |$L40114|
; 414 : }
; 415 : }
; 416 : // Now reset the flash pointer
; 417 : pFlash = (volatile UINT32 *)(FlashStart);
003ec e1a02007 mov r2, r7
003f0 |$L40118|
; 422 : }
; 423 :
; 424 : // Flash erase verification.
; 425 : for (i = 0; i < FlashLength / 4; i++)
003f0 e59d3010 ldr r3, [sp, #0x10]
003f4 e3a01000 mov r1, #0
003f8 e1b00123 movs r0, r3, lsr #2
003fc 0a000005 beq |$L40121|
00400 |$L40119|
; 426 : {
; 427 : if (*pFlash++ != 0xFFFFFFFF)
00400 e4923004 ldr r3, [r2], #4
00404 e3730001 cmn r3, #1
00408 1a000006 bne |$L40341|
0040c e2811001 add r1, r1, #1
00410 e1510000 cmp r1, r0
00414 3afffff9 bcc |$L40119|
00418 |$L40121|
; 432 : }
; 433 : }
; 434 :
; 435 :
; 436 : return(TRUE);
00418 e3a00001 mov r0, #1
0041c |$L40035|
; 437 : }
0041c e28dd014 add sp, sp, #0x14
00420 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00424 e12fff1e bx lr
00428 |$L40341|
; 428 : {
; 429 : EdbgOutputDebugString("ERROR: FlashErase: erase verification failure at address 0x%X Data 0x%X.\r\n", pFlash-1, *(pFlash-1));
00428 e2421004 sub r1, r2, #4
0042c e5912000 ldr r2, [r1]
00430 e59f0014 ldr r0, [pc, #0x14]
00434 eb000000 bl EdbgOutputDebugString
00438 |$L40101|
; 430 : EdbgOutputDebugString("ERROR: FlashErase: unrecoverable failure encountered while erasing flash.\r\n");
00438 e59f0008 ldr r0, [pc, #8]
0043c |$L40372|
0043c eb000000 bl EdbgOutputDebugString
; 431 : return(FALSE);
00440 e3a00000 mov r0, #0
00444 eafffff4 b |$L40035|
00448 |$L40378|
00448 00000000 DCD |??_C@_0EM@NACFEOGP@ERROR?3?5FlashErase?3?5unrecoverable@|
0044c 00000000 DCD |??_C@_0EL@DOJKFNA@ERROR?3?5FlashErase?3?5erase?5verific@|
00450 00000000 DCD |L3_BLOCK_SIZE|
00454 00000000 DCD |??_C@_0EF@CDGLJFKL@ERROR?3?5FlashErase?3?5block?5erase?5f@|
00458 00000000 DCD |??_C@_0EF@BGCELHEH@ERROR?3?5FlashErase?3?5block?5erase?5f@|
0045c 00000000 DCD |??_C@_02PCIJFNDE@?$AN?6?$AA@|
00460 00000000 DCD |g_FlashDeviceType|
00464 00000000 DCD |??_C@_01LFCBOECM@?4?$AA@|
00468 00000000 DCD |??_C@_0DN@CNHGHOKP@INFO?3?5FlashErase?3?5erasing?5flash?5@|
0046c 00000000 DCD |??_C@_0FM@DKNOGHIG@ERROR?3?5FlashErase?3?5unrecoverable@|
00470 00000000 DCD |??_C@_0DD@CNMLMBBN@ERROR?3?5FlashErase?3?5status?5regist@|
00474 00000000 DCD |??_C@_0DM@LJJPKICB@ERROR?3?5FlashErase?3?5clear?5lock?5bi@|
00478 00000000 DCD |??_C@_0DM@MGNKKOMD@ERROR?3?5FlashErase?3?5clear?5lock?5bi@|
0047c 00000000 DCD |??_C@_0DN@DBAEMJLA@ERROR?3?5FlashErase?3?5command?5seque@|
00480 00000000 DCD |??_C@_0DN@EOEBMPFC@ERROR?3?5FlashErase?3?5command?5seque@|
00484 00000000 DCD |??_C@_0DK@BGKLKEKO@ERROR?3?5FlashErase?3?5voltage?5range@|
00488 00000000 DCD |??_C@_0DK@GJOOKCEM@ERROR?3?5FlashErase?3?5voltage?5range@|
0048c 00000000 DCD |??_C@_0DN@FJFKBFNH@WARNING?3?5FlashErase?3?5calculation@|
00490 00000000 DCD |??_C@_0CO@LAPCIDHL@ERROR?3?5FlashErase?3?5unrecognized?5@|
00494 |$M40374|
ENDP ; |FlashErase|
EXPORT |FlashInit|
00000 AREA |.text| { |FlashInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FlashInit|, PDATA, SELECTION=5, ASSOC=|.text| { |FlashInit| } ; comdat associative
|$T40402| DCD |$L40401|
DCD 0x40003401
; Function compile flags: /Ogsy
00000 AREA |.text| { |FlashInit| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FlashInit| PROC
; 441 : {
00000 |$L40401|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M40399|
; 442 : // Read the device ID and determine the flash part type.
; 443 : //
; 444 : g_FlashDeviceType = DetectFlashDevice(FlashStart);
00004 e3a03609 mov r3, #9, 12
00008 e3833090 orr r3, r3, #0x90
0000c e5803000 str r3, [r0]
00010 e5903004 ldr r3, [r0, #4]
00014 e3a01cff mov r1, #0xFF, 24
00018 e38110ff orr r1, r1, #0xFF
0001c e3a0eb22 mov lr, #0x22, 22
00020 e0031001 and r1, r3, r1
00024 e38ee00c orr lr, lr, #0xC
00028 e3a028ff mov r2, #0xFF, 16
0002c e041300e sub r3, r1, lr
00030 e38220ff orr r2, r2, #0xFF
00034 e3530003 cmp r3, #3
00038 e5802000 str r2, [r0]
0003c 93a02001 movls r2, #1
00040 9a000018 bls |$L40384|
00044 e3a03b22 mov r3, #0x22, 22
00048 e3833012 orr r3, r3, #0x12
0004c e0413003 sub r3, r1, r3
00050 e3530003 cmp r3, #3
00054 93a02002 movls r2, #2
00058 9a000012 bls |$L40384|
0005c e3a03b22 mov r3, #0x22, 22
00060 e3833001 orr r3, r3, #1
00064 e0413003 sub r3, r1, r3
00068 e3530002 cmp r3, #2
0006c 93a02003 movls r2, #3
00070 9a00000c bls |$L40384|
00074 e3a03b22 mov r3, #0x22, 22
00078 e3833005 orr r3, r3, #5
0007c e0413003 sub r3, r1, r3
00080 e3530002 cmp r3, #2
00084 93a02004 movls r2, #4
00088 9a000006 bls |$L40384|
0008c e2413016 sub r3, r1, #0x16
00090 e3530002 cmp r3, #2
00094 93a02005 movls r2, #5
00098 9a000002 bls |$L40384|
0009c e59f0028 ldr r0, [pc, #0x28]
000a0 eb000000 bl EdbgOutputDebugString
000a4 e3a02000 mov r2, #0
000a8 |$L40384|
000a8 e59f3018 ldr r3, [pc, #0x18]
; 445 :
; 446 : return((g_FlashDeviceType != NONE) ? TRUE : FALSE);
000ac e3520000 cmp r2, #0
000b0 13a00001 movne r0, #1
000b4 e5832000 str r2, [r3]
; 447 : }
000b8 149de004 ldrne lr, [sp], #4
; 445 :
; 446 : return((g_FlashDeviceType != NONE) ? TRUE : FALSE);
000bc 03a00000 moveq r0, #0
; 447 : }
000c0 049de004 ldreq lr, [sp], #4
000c4 e12fff1e bx lr
000c8 |$L40404|
000c8 00000000 DCD |g_FlashDeviceType|
000cc 00000000 DCD |??_C@_0DH@OBMGOPJF@INFO?3?5DetectFlashDevice?3?5flash?5t@|
000d0 |$M40400|
ENDP ; |FlashInit|
EXPORT |FlashRead|
IMPORT |memcpy|
00000 AREA |.text| { |FlashRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FlashRead|, PDATA, SELECTION=5, ASSOC=|.text| { |FlashRead| } ; comdat associative
|$T40416| DCD |$L40415|
DCD 0x40000b01
; Function compile flags: /Ogsy
00000 AREA |.text| { |FlashRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FlashRead| PROC
; 451 : {
00000 |$L40415|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M40413|
00004 e1b03001 movs r3, r1
; 452 : if (!pDataBuffer) return(FALSE);
00008 03a00000 moveq r0, #0
; 458 : }
0000c 049de004 ldreq lr, [sp], #4
00010 012fff1e bxeq lr
; 453 :
; 454 : // TODO - check flash address...
; 455 : memcpy((void *)pDataBuffer, (const void *)FlashStart, DataLength);
00014 e1a01000 mov r1, r0
00018 e1a00003 mov r0, r3
0001c eb000000 bl memcpy
; 456 :
; 457 : return(TRUE);
00020 e3a00001 mov r0, #1
; 458 : }
00024 e49de004 ldr lr, [sp], #4
00028 e12fff1e bx lr
0002c |$M40414|
ENDP ; |FlashRead|
EXPORT |??_C@_0DB@PKAGHONA@?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?5FlashStart_Addr?5?$DN?50x?$CF@| [ DATA ] ; `string'
EXPORT |??_C@_0CO@BHODJGNH@ERROR?3?5FlashWrite?3?5unrecognized?5@| [ DATA ] ; `string'
EXPORT |??_C@_0CI@KIPMHENK@INFO?3?5FlashWrite?3?5writing?5to?5fla@| [ DATA ] ; `string'
EXPORT |??_C@_0FM@EPPFHNCB@ERROR?3?5FlashWrite?3?5flash?5program@| [ DATA ] ; `string'
EXPORT |??_C@_0DL@HPDDOHNE@INFO?3?5FlashWrite?3?5verifying?5the?5@| [ DATA ] ; `string'
EXPORT |??_C@_0FH@HBFAGKLL@ERROR?3?5FlashWrite?3?5verification?5@| [ DATA ] ; `string'
EXPORT |??_C@_0DD@IDDBKFOE@INFO?3?5FlashWrite?3?5flash?5programm@| [ DATA ] ; `string'
EXPORT |FlashWrite|
00000 AREA |.text| { |FlashWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FlashWrite|, PDATA, SELECTION=5, ASSOC=|.text| { |FlashWrite| } ; comdat associative
|$T40463| DCD |$L40462|
DCD 0x4000af02
00000 AREA |.rdata| { |??_C@_0DD@IDDBKFOE@INFO?3?5FlashWrite?3?5flash?5programm@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DD@IDDBKFOE@INFO?3?5FlashWrite?3?5flash?5programm@| DCB "INFO: Fl"
DCB "ashWrite: flash programmed successfully!", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0FH@HBFAGKLL@ERROR?3?5FlashWrite?3?5verification?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0FH@HBFAGKLL@ERROR?3?5FlashWrite?3?5verification?5@| DCB "ERROR: F"
DCB "lashWrite: verification failure at address 0x%x (expecte"
DCB "d 0x%x actual 0x%x))", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DL@HPDDOHNE@INFO?3?5FlashWrite?3?5verifying?5the?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DL@HPDDOHNE@INFO?3?5FlashWrite?3?5verifying?5the?5@| DCB "INFO: F"
DCB "lashWrite: verifying the data written to flash...", 0xd, 0xa
DCB 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0FM@EPPFHNCB@ERROR?3?5FlashWrite?3?5flash?5program@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0FM@EPPFHNCB@ERROR?3?5FlashWrite?3?5flash?5program@| DCB "ERROR: F"
DCB "lashWrite: flash programming failure at address 0x%x (ex"
DCB "pected 0x%x actual 0x%x).", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CI@KIPMHENK@INFO?3?5FlashWrite?3?5writing?5to?5fla@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CI@KIPMHENK@INFO?3?5FlashWrite?3?5writing?5to?5fla@| DCB "INFO: F"
DCB "lashWrite: writing to flash...", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CO@BHODJGNH@ERROR?3?5FlashWrite?3?5unrecognized?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CO@BHODJGNH@ERROR?3?5FlashWrite?3?5unrecognized?5@| DCB "ERROR: F"
DCB "lashWrite: unrecognized flash part.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DB@PKAGHONA@?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?5FlashStart_Addr?5?$DN?50x?$CF@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@PKAGHONA@?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?$CK?5FlashStart_Addr?5?$DN?50x?$CF@| DCB "*"
DCB "********* FlashStart_Addr = 0x%x ************", 0xd, 0xa
DCB 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |FlashWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FlashWrite| PROC
; 463 : {
00000 |$L40462|
00000 e92d4ff0 stmdb sp!, {r4 - r11, lr}
00004 e24dd01c sub sp, sp, #0x1C
00008 |$M40460|
00008 e1a04002 mov r4, r2
0000c e1a07001 mov r7, r1
; 464 : UINT32 i,j,b;
; 465 : UINT32 sizeFlashCache; // size in bytes of the flash cache
; 466 : UINT32 chunksPerBlock;
; 467 : UINT32 count;
; 468 : UINT32 val = 0;
; 469 : UINT32 dwLength = DataLength;
; 470 :
; 471 : volatile UINT32 FlashStart = (volatile UINT32 *)(Cache_FlashStart | CACHED_TO_UNCACHED_OFFSET); //SG2 ADD
00010 e3803202 orr r3, r0, #2, 4
00014 e58d3000 str r3, [sp]
; 472 :
; 473 : volatile UINT32 *pFlash = (volatile UINT32 *) FlashStart;
; 474 : volatile UINT32 *pBlockAddress = (volatile UINT32 *) (FlashStart);
; 475 : volatile UINT32 *pDeviceAddress = (volatile UINT32 *) FlashStart;
; 476 : volatile UINT32 *pFlashCache = (UINT32 *) pDataBuffer;
; 477 :
; 478 : volatile UINT32 *pdwFlashStart;
; 479 : volatile UINT32 *pdwRamStart;
; 480 :
; 481 : EdbgOutputDebugString("********** FlashStart_Addr = 0x%x ************\r\n",FlashStart);
00018 e59f0298 ldr r0, [pc, #0x298]
0001c e59d3000 ldr r3, [sp]
00020 e59db000 ldr r11, [sp]
00024 e58d4018 str r4, [sp, #0x18]
00028 e58d3014 str r3, [sp, #0x14]
0002c e59d3000 ldr r3, [sp]
00030 e59d1000 ldr r1, [sp]
00034 e58d7008 str r7, [sp, #8]
00038 e58d3010 str r3, [sp, #0x10]
0003c eb000000 bl EdbgOutputDebugString
; 482 :
; 483 : if (g_FlashDeviceType == NONE)
00040 e59f6260 ldr r6, [pc, #0x260]
00044 e5963000 ldr r3, [r6]
00048 e3530000 cmp r3, #0
0004c 1a000003 bne |$L40167|
; 484 : {
; 485 : EdbgOutputDebugString("ERROR: FlashWrite: unrecognized flash part.\r\n");
00050 e59f025c ldr r0, [pc, #0x25C]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -