📄 flash.cod
字号:
001e0 e59d2014 ldr r2, [sp, #0x14]
001e4 e3a0360d mov r3, #0xD, 12
001e8 e38330d0 orr r3, r3, #0xD0
001ec e5823000 str r3, [r2]
; 401 :
; 402 : // DelayInuSec(500);
; 403 :
; 404 : //
; 405 : // Occasionally write out a dot so they don't think
; 406 : // the system is dead.
; 407 : //
; 408 : if(((ULONG)&pulDest[ulCount>>2] & (FLASH_BLOCK_SIZE - 1)) == 0)
001f0 e59d3018 ldr r3, [sp, #0x18]
001f4 e1a01123 mov r1, r3, lsr #2
001f8 e3a03004 mov r3, #4
001fc e0020391 mul r2, r1, r3
00200 e59d300c ldr r3, [sp, #0xC]
00204 e0832002 add r2, r3, r2
00208 e3a03701 mov r3, #1, 14
0020c e2433001 sub r3, r3, #1
00210 e1120003 tst r2, r3
00214 1a000001 bne |$L38179|
; 409 : {
; 410 : EdbgOutputDebugString(".");
00218 e59f00b4 ldr r0, [pc, #0xB4]
0021c eb000000 bl EdbgOutputDebugString
00220 |$L38179|
; 411 : }
; 412 : //
; 413 : // Wait for the Flash block command to succeed.
; 414 : //
; 415 : bSuccess = WaitForReady(pulBlockAddress, 6000, EXT_STATUS_WBUFFER_READY);
00220 e3a03502 mov r3, #2, 10
00224 e3832080 orr r2, r3, #0x80
00228 e3a03d5d mov r3, #0x5D, 26
0022c e3831030 orr r1, r3, #0x30
00230 e59d0014 ldr r0, [sp, #0x14]
00234 eb000000 bl WaitForReady
00238 e58d0034 str r0, [sp, #0x34]
0023c e59d3034 ldr r3, [sp, #0x34]
00240 e58d3004 str r3, [sp, #4]
; 416 : if(!bSuccess)
00244 e59d3004 ldr r3, [sp, #4]
00248 e3530000 cmp r3, #0
0024c 1a000011 bne |$L38180|
; 417 : {
; 418 : EdbgOutputDebugString("FLASH_BLOCK_PROGRAM_RESUME - Failed\n.");
00250 e59f0078 ldr r0, [pc, #0x78]
00254 eb000000 bl EdbgOutputDebugString
; 419 : EdbgOutputDebugString("pulBlockAddress = %x.\n",(ULONG)pulBlockAddress);
00258 e59d1014 ldr r1, [sp, #0x14]
0025c e59f0068 ldr r0, [pc, #0x68]
00260 eb000000 bl EdbgOutputDebugString
; 420 : EdbgOutputDebugString("*pulBlockAddress = %x.\n",(ULONG)*pulBlockAddress);
00264 e59d3014 ldr r3, [sp, #0x14]
00268 e5931000 ldr r1, [r3]
0026c e59f0054 ldr r0, [pc, #0x54]
00270 eb000000 bl EdbgOutputDebugString
; 421 : *pulBlockAddress = FLASH_READ_STATUS;
00274 e59d2014 ldr r2, [sp, #0x14]
00278 e3a03607 mov r3, #7, 12
0027c e3833070 orr r3, r3, #0x70
00280 e5823000 str r3, [r2]
; 422 : EdbgOutputDebugString("*FLASH_READ_STATUS pulBlockAddress = %x.\n",(ULONG)*pulBlockAddress);
00284 e59d3014 ldr r3, [sp, #0x14]
00288 e5931000 ldr r1, [r3]
0028c e59f0030 ldr r0, [pc, #0x30]
00290 eb000000 bl EdbgOutputDebugString
00294 |$L38186|
; 423 : while(1);
00294 eafffffe b |$L38186|
00298 |$L38180|
; 424 : break;
; 425 : }
; 426 : }
00298 eaffff62 b |$L38152|
0029c |$L38153|
; 427 : *pulBlockAddress = FLASH_READ_MODE;
0029c e59d2014 ldr r2, [sp, #0x14]
002a0 e3a038ff mov r3, #0xFF, 16
002a4 e38330ff orr r3, r3, #0xFF
002a8 e5823000 str r3, [r2]
; 428 : return TRUE;
002ac e3a03001 mov r3, #1
002b0 e58d3028 str r3, [sp, #0x28]
; 371 : return FALSE;
002b4 e59d0028 ldr r0, [sp, #0x28]
; 429 : }
002b8 e28dd038 add sp, sp, #0x38
002bc e89d6000 ldmia sp, {sp, lr}
002c0 e12fff1e bx lr
002c4 |$L38409|
002c4 00000000 DCD |??_C@_0CK@IHGKIHOF@?$CKFLASH_READ_STATUS?5pulBlockAddre@|
002c8 00000000 DCD |??_C@_0BI@DAENKHLI@?$CKpulBlockAddress?5?$DN?5?$CFx?4?6?$AA@|
002cc 00000000 DCD |??_C@_0BI@NJPDFMHF@pulBlockAddress?5?5?$DN?5?$CFx?4?6?$AA@|
002d0 00000000 DCD |??_C@_0CG@GDOOMMMM@FLASH_BLOCK_PROGRAM_RESUME?5?9?5Fai@|
002d4 00000000 DCD |??_C@_01LFCBOECM@?4?$AA@|
002d8 00000000 DCD |??_C@_0CB@BBCEBAHK@FLASH_WRITE_TO_BUFFER?5?9?5Failed?6?4@|
002dc |$M38405|
ENDP ; |WriteFlashJ3_2x16|
EXPORT |??_C@_0BH@OIHBLNMB@?$CKpFlash?5?5?5?5?5?5?5?5?$DN?5?$CFx?5?4?6?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |WaitForReady| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$WaitForReady|, PDATA, SELECTION=5, ASSOC=|.text| { |WaitForReady| } ; comdat associative
|$T38416| DCD |$L38415|
DCD 0x40002c04
00000 AREA |.rdata| { |??_C@_0BH@OIHBLNMB@?$CKpFlash?5?5?5?5?5?5?5?5?$DN?5?$CFx?5?4?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BH@OIHBLNMB@?$CKpFlash?5?5?5?5?5?5?5?5?$DN?5?$CFx?5?4?6?$AA@| DCB "*"
DCB "pFlash = %x .", 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |WaitForReady| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |WaitForReady| PROC
; 445 : {
00000 |$L38415|
00000 e1a0c00d mov r12, sp
00004 e92d0007 stmdb sp!, {r0 - r2}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd018 sub sp, sp, #0x18
00010 |$M38413|
; 446 : ULONG ulStart;
; 447 : ULONG ulCurrent;
; 448 : BOOL bSuccess = FALSE;
00010 e3a03000 mov r3, #0
00014 e58d3000 str r3, [sp]
; 449 :
; 450 : ulStart = GetSystemTimeInMsec();
00018 eb000000 bl GetSystemTimeInMsec
0001c e58d0010 str r0, [sp, #0x10]
00020 e59d3010 ldr r3, [sp, #0x10]
00024 e58d3008 str r3, [sp, #8]
00028 |$L38198|
; 451 : do
; 452 : {
; 453 : //
; 454 : // See if there are errors.
; 455 : //
; 456 : if((*pFlash & ulBitField)== ulBitField)
00028 e59d3020 ldr r3, [sp, #0x20]
0002c e5932000 ldr r2, [r3]
00030 e59d3028 ldr r3, [sp, #0x28]
00034 e0022003 and r2, r2, r3
00038 e59d3028 ldr r3, [sp, #0x28]
0003c e1520003 cmp r2, r3
00040 1a000002 bne |$L38201|
; 457 : {
; 458 : bSuccess = TRUE;
00044 e3a03001 mov r3, #1
00048 e58d3000 str r3, [sp]
; 459 : break;
0004c ea000009 b |$L38200|
00050 |$L38201|
; 460 : }
; 461 :
; 462 : //
; 463 : // Get the current time.
; 464 : //
; 465 : ulCurrent = GetSystemTimeInMsec();
00050 eb000000 bl GetSystemTimeInMsec
00054 e58d0014 str r0, [sp, #0x14]
00058 e59d3014 ldr r3, [sp, #0x14]
0005c e58d3004 str r3, [sp, #4]
; 466 : } while(ulCurrent<ulStart + ulTimeoutInMsec);
00060 e59d2008 ldr r2, [sp, #8]
00064 e59d3024 ldr r3, [sp, #0x24]
00068 e0822003 add r2, r2, r3
0006c e59d3004 ldr r3, [sp, #4]
00070 e1530002 cmp r3, r2
00074 3affffeb bcc |$L38198|
00078 |$L38200|
; 467 :
; 468 : if(!bSuccess)
00078 e59d3000 ldr r3, [sp]
0007c e3530000 cmp r3, #0
00080 1a000003 bne |$L38202|
; 469 : {
; 470 : EdbgOutputDebugString("*pFlash = %x .\n",(ULONG)*pFlash);
00084 e59d3020 ldr r3, [sp, #0x20]
00088 e5931000 ldr r1, [r3]
0008c e59f0018 ldr r0, [pc, #0x18]
00090 eb000000 bl EdbgOutputDebugString
00094 |$L38202|
; 471 : }
; 472 :
; 473 : return bSuccess;
00094 e59d3000 ldr r3, [sp]
00098 e58d300c str r3, [sp, #0xC]
0009c e59d000c ldr r0, [sp, #0xC]
; 474 : }
000a0 e28dd018 add sp, sp, #0x18
000a4 e89d6000 ldmia sp, {sp, lr}
000a8 e12fff1e bx lr
000ac |$L38418|
000ac 00000000 DCD |??_C@_0BH@OIHBLNMB@?$CKpFlash?5?5?5?5?5?5?5?5?$DN?5?$CFx?5?4?6?$AA@|
000b0 |$M38414|
ENDP ; |WaitForReady|
EXPORT |InitializeFlash|
EXPORT |??_C@_0BI@OJJDFABG@2X16?5J3?5Flash?5Defined?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0BM@BMFHPIME@Initialize?5Flash?0?5succeed?$AN?6?$AA@| [ DATA ] ; `string'
; File c:\wince500\platform\ep93xx\src\bootloader\common\flash.c
00000 AREA |.text| { |InitializeFlash| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$InitializeFlash|, PDATA, SELECTION=5, ASSOC=|.text| { |InitializeFlash| } ; comdat associative
|$T38425| DCD |$L38424|
DCD 0x40004602
00000 AREA |.rdata| { |??_C@_0BM@BMFHPIME@Initialize?5Flash?0?5succeed?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BM@BMFHPIME@Initialize?5Flash?0?5succeed?$AN?6?$AA@| DCB "Initial"
DCB "ize Flash, succeed", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BI@OJJDFABG@2X16?5J3?5Flash?5Defined?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BI@OJJDFABG@2X16?5J3?5Flash?5Defined?$AN?6?$AA@| DCB "2X16 J3 Fla"
DCB "sh Defined", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |InitializeFlash| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitializeFlash| PROC
; 84 : {
00000 |$L38424|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd010 sub sp, sp, #0x10
00008 |$M38422|
; 85 : ULONG ulSMC=0;
00008 e3a03000 mov r3, #0
0000c e58d3000 str r3, [sp]
; 86 : int wait1;
; 87 : int wait2;
; 88 :
; 89 : //for WAIT_STATES(A), the largest value of 'A' should be 500, when A is 500,
; 90 : //WAIT_STATES(A) is 31, which has reached the largest value of WAIT_STATES(A).
; 91 : #if (EP93XX_FLASH_TYPE==FLASH_TYPE_C3)
; 92 :
; 93 : wait2=0x1F;
; 94 : wait1=0x1F;
; 95 :
; 96 : #elif (EP93XX_FLASH_TYPE == FLASH_TYPE_AMD)
; 97 :
; 98 : wait2=0x1F;
; 99 : wait1=0x1F;
; 100 :
; 101 : #elif (EP93XX_FLASH_TYPE == FLASH_TYPE_P3)
; 102 :
; 103 : wait2=0x1F;
; 104 : wait1=0x1F;
; 105 :
; 106 : #elif (EP93XX_FLASH_TYPE == FLASH_TYPE_J3)
; 107 :
; 108 : wait2=WAIT_STATES(35);
00010 e3a03003 mov r3, #3
00014 e58d3004 str r3, [sp, #4]
; 109 : wait1=WAIT_STATES(150);
00018 e3a0300e mov r3, #0xE
0001c e58d3008 str r3, [sp, #8]
; 110 :
; 111 : #else //The lowest value
; 112 : wait2=0x1F;
; 113 : wait1=0x1F;
; 114 : #endif
; 115 : //
; 116 : ulSMC = (( wait2 <<SMCBCR_WST2_SHIFT) & SMCBCR_WST2_MASK) |
; 117 : (( wait1 <<SMCBCR_WST1_SHIFT) & SMCBCR_WST1_MASK);
00020 e59d3004 ldr r3, [sp, #4]
00024 e1a03583 mov r3, r3, lsl #11
00028 e2032b3e and r2, r3, #0x3E, 22
0002c e59d3008 ldr r3, [sp, #8]
00030 e1a03283 mov r3, r3, lsl #5
00034 e2033e3e and r3, r3, #0x3E, 28
00038 e1823003 orr r3, r2, r3
0003c e58d3000 str r3, [sp]
; 118 :
; 119 : //Add other values:
; 120 : *FLASH_SMC = ulSMC | ( 1 & SMCBCR_IDCY_MASK ) |SMCBCR_WP | SMCBCR_PME | SMCBCR_RBLE
; 121 :
; 122 : #if EP93XX_FLASH_WIDTH==16
; 123 : | SMCBCR_MW_16BIT
; 124 : #else
; 125 : | SMCBCR_MW_32BIT
; 126 : #endif
; 127 : ;
00040 e59d3000 ldr r3, [sp]
00044 e3833001 orr r3, r3, #1
00048 e3833301 orr r3, r3, #1, 6
0004c e3833302 orr r3, r3, #2, 6
00050 e3833b01 orr r3, r3, #1, 22
00054 e3832202 orr r2, r3, #2, 4
00058 e59f30b4 ldr r3, [pc, #0xB4]
0005c e5832000 str r2, [r3]
; 128 :
; 129 :
; 130 : ulSMC = *FLASH_SMC;
00060 e59f30ac ldr r3, [pc, #0xAC]
00064 e5933000 ldr r3, [r3]
00068 e58d3000 str r3, [sp]
; 131 : ulSMC |= SMCBCR_WPERR;
0006c e59d3000 ldr r3, [sp]
00070 e3833402 orr r3, r3, #2, 8
00074 e58d3000 str r3, [sp]
; 132 : ulSMC &= ~SMCBCR_WP;
00078 e59d2000 ldr r2, [sp]
0007c e3e03301 mvn r3, #1, 6
00080 e0023003 and r3, r2, r3
00084 e58d3000 str r3, [sp]
; 133 : *FLASH_SMC = ulSMC ;
00088 e59f2084 ldr r2, [pc, #0x84]
0008c e59d3000 ldr r3, [sp]
00090 e5823000 str r3, [r2]
; 134 :
; 135 : //
; 136 : // Fill in the pointers for the following.
; 137 : //
; 138 :
; 139 : #if (EP93XX_FLASH_WIDTH==16)
; 140 :
; 141 : EdbgOutputDebugString("16 bit flash\r\n");
; 142 :
; 143 : #if (EP93XX_FLASH_TYPE==FLASH_TYPE_C3)
; 144 :
; 145 : EdbgOutputDebugString("1X16 C3 Flash Defined\r\n" );
; 146 : if( !QueryIntelFlashC3_1x16() ){
; 147 : EdbgOutputDebugString("Defined C3 Flash, but not found. stop.\r\n" );
; 148 : EdbgOutputDebugString("Defined C3 Flash, but not found. stop.\r\n" );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -