📄 strata16.txt
字号:
;;;161 }
000248 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.588|
00024c 636f6c42 DCB "Bloc"
000250 78255f6b DCB "k_%x"
000254 61724520 DCB " Era"
000258 4f206573 DCB "se O"
00025c 202e4b2e DCB ".K. "
000260 0000000a DCB "\n\0\0\0"
|L1.612|
000264 00000000 DCD ||.bss$2||
ENDP
Strata_BlankCheck PROC
;;;164 int Strata_BlankCheck(int targetAddr,int targetSize)
;;;165 {
000268 e92d40f8 STMFD sp!,{r3-r7,lr}
00026c e1a06000 MOV r6,r0
000270 e1a07001 MOV r7,r1
;;;166 int i,j;
;;;167 for (i=0; i<targetSize; i+=2)
000274 e3a04000 MOV r4,#0
|L1.632|
000278 e1540007 CMP r4,r7
00027c aa00000d BGE |L1.696|
000280 ea000001 B |L1.652|
|L1.644|
000284 e2844002 ADD r4,r4,#2
000288 eafffffa B |L1.632|
;;;168 {
;;;169 j=*((volatile U16 *)(i+targetAddr));
|L1.652|
00028c e19450b6 LDRH r5,[r4,r6]
;;;170 if (j!=0xffff) // In erasure it changes all block dta to 0xff
000290 e245ccff SUB r12,r5,#0xff00
000294 e25cc0ff SUBS r12,r12,#0xff
000298 0a000005 BEQ |L1.692|
;;;171 {
;;;172 Uart_Printf("E : %x = %x\n", (i+targetAddr), j);
00029c e0841006 ADD r1,r4,r6
0002a0 e1a02005 MOV r2,r5
0002a4 e28f0014 ADR r0,|L1.704|
0002a8 ebfffffe BL _printf
;;;173 return 0;
0002ac e3a00000 MOV r0,#0
;;;174 }
;;;175 }
;;;176 return 1;
;;;177 }
|L1.688|
0002b0 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.692|
0002b4 eafffff2 B |L1.644| ;175
|L1.696|
0002b8 e3a00001 MOV r0,#1 ;176
0002bc eafffffb B |L1.688| ;176
|L1.704|
0002c0 203a2045 DCB "E : " ;176
0002c4 3d207825 DCB "%x =" ;176
0002c8 0a782520 DCB " %x\n" ;176
0002cc 00000000 DCB "\0\0\0\0" ;176
ENDP
Strata_ProgFlash PROC
;;;181 int Strata_ProgFlash(U32 realAddr,U16 data)
;;;182 {
0002d0 e92d41f0 STMFD sp!,{r4-r8,lr}
0002d4 e1a04000 MOV r4,r0
0002d8 e1a07001 MOV r7,r1
;;;183 volatile U16 *ptargetAddr;
;;;184 unsigned int ReadStatus, status;
;;;185 unsigned int bSR7,bSR1,bSR4; // Write State Machine Status, 8MB Intel Strate Flash ROM
;;;186
;;;187 ptargetAddr = (volatile U16 *)realAddr;
0002dc e1a08004 MOV r8,r4
;;;188
;;;189
;;;190 _WR(realAddr, 0x0040); // realAddr is any valid adress within the device
0002e0 e3a00040 MOV r0,#0x40
0002e4 e1c400b0 STRH r0,[r4,#0]
;;;191 *ptargetAddr=data; // 16 bit data
0002e8 e1a04008 MOV r4,r8
0002ec e1c870b0 STRH r7,[r8,#0]
;;;192
;;;193 _WR(realAddr, 0x0070); // Read Status Register
0002f0 e3a00070 MOV r0,#0x70
0002f4 e1c400b0 STRH r0,[r4,#0]
;;;194 ReadStatus=_RD(realAddr); // realAddr is any valid address within the device
0002f8 e1d400b0 LDRH r0,[r4,#0]
0002fc e1a05000 MOV r5,r0
;;;195 bSR7=ReadStatus & (1<<7);
000300 e2056080 AND r6,r5,#0x80
;;;196
;;;197 while(!bSR7 )
000304 e1a00000 NOP
|L1.776|
000308 e3560000 CMP r6,#0
00030c 1a000005 BNE |L1.808|
;;;198 {
;;;199 _WR(realAddr, 0x0070); // Read Status Register
000310 e3a00070 MOV r0,#0x70
000314 e1c400b0 STRH r0,[r4,#0]
;;;200 ReadStatus=_RD(realAddr);
000318 e1d400b0 LDRH r0,[r4,#0]
00031c e1a05000 MOV r5,r0
;;;201 bSR7=ReadStatus & (1<<7);
000320 e2056080 AND r6,r5,#0x80
;;;202 }
000324 eafffff7 B |L1.776|
;;;203
;;;204 _WR(realAddr, 0x0070);
|L1.808|
000328 e3a00070 MOV r0,#0x70
00032c e1c400b0 STRH r0,[r4,#0]
;;;205 ReadStatus=_RD(realAddr); // Real Status Register
000330 e1d400b0 LDRH r0,[r4,#0]
000334 e1a05000 MOV r5,r0
;;;206
;;;207 if(ReadStatus&(1<<3))
000338 e3150008 TST r5,#8
00033c 0a000005 BEQ |L1.856|
;;;208 {
;;;209 Uart_Printf("Voltage Range Error\n");
000340 e28f0054 ADR r0,|L1.924|
000344 ebfffffe BL _printf
;;;210 _WR(realAddr, 0x0050); // Clear Status Register
000348 e3a00050 MOV r0,#0x50
00034c e1c400b0 STRH r0,[r4,#0]
;;;211 return 0;
000350 e3a00000 MOV r0,#0
;;;212 }
;;;213 if(ReadStatus&(1<<1))
;;;214 {
;;;215 Uart_Printf("Device Protect Error\n");
;;;216 _WR(realAddr, 0x0050); // Clear Status Register
;;;217 return 0;
;;;218 }
;;;219 if(ReadStatus&(1<<4))
;;;220 {
;;;221 Uart_Printf("Programming Error\n");
;;;222 _WR(realAddr, 0x0050); // Clear Status Register
;;;223 return 0;
;;;224 }
;;;225
;;;226 }
|L1.852|
000354 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.856|
000358 e3150002 TST r5,#2 ;213
00035c 0a000005 BEQ |L1.888| ;213
000360 e28f004c ADR r0,|L1.948| ;215
000364 ebfffffe BL _printf ;215
000368 e3a00050 MOV r0,#0x50 ;216
00036c e1c400b0 STRH r0,[r4,#0] ;216
000370 e3a00000 MOV r0,#0 ;217
000374 eafffff6 B |L1.852| ;217
|L1.888|
000378 e3150010 TST r5,#0x10 ;219
00037c 0a000005 BEQ |L1.920| ;219
000380 e28f0044 ADR r0,|L1.972| ;221
000384 ebfffffe BL _printf ;221
000388 e3a00050 MOV r0,#0x50 ;222
00038c e1c400b0 STRH r0,[r4,#0] ;222
000390 e3a00000 MOV r0,#0 ;223
000394 eaffffee B |L1.852| ;223
|L1.920|
000398 eaffffed B |L1.852|
|L1.924|
00039c 746c6f56 DCB "Volt"
0003a0 20656761 DCB "age "
0003a4 676e6152 DCB "Rang"
0003a8 72452065 DCB "e Er"
0003ac 0a726f72 DCB "ror\n"
0003b0 00000000 DCB "\0\0\0\0"
|L1.948|
0003b4 69766544 DCB "Devi"
0003b8 50206563 DCB "ce P"
0003bc 65746f72 DCB "rote"
0003c0 45207463 DCB "ct E"
0003c4 726f7272 DCB "rror"
0003c8 0000000a DCB "\n\0\0\0"
|L1.972|
0003cc 676f7250 DCB "Prog"
0003d0 6d6d6172 DCB "ramm"
0003d4 20676e69 DCB "ing "
0003d8 6f727245 DCB "Erro"
0003dc 00000a72 DCB "r\n\0\0"
ENDP
InputAddresses PROC
;;;329 static void InputAddresses(void)
;;;330 {
0003e0 e92d4008 STMFD sp!,{r3,lr}
;;;331 Uart_Printf("\n[ 28F128J3A Writing Program ]\n");
0003e4 e28f008c ADR r0,|L1.1144|
0003e8 ebfffffe BL _printf
;;;332
;;;333 Uart_Printf("\nSource size [0x?] : 0h~%xh\n",downloadProgramSize);
0003ec e59f00a4 LDR r0,|L1.1176|
0003f0 e5901000 LDR r1,[r0,#0] ; downloadProgramSize
0003f4 e28f00a0 ADR r0,|L1.1180|
0003f8 ebfffffe BL _printf
;;;334 Uart_Printf("\nAvailable Target Offset Address:0h,10000h,20000h, ..., ff0000h\n");
0003fc e59f00b8 LDR r0,|L1.1212|
000400 ebfffffe BL _printf
;;;335 Uart_Printf("Input target address offset [0x?] : ");
000404 e28f00b4 ADR r0,|L1.1216|
000408 ebfffffe BL _printf
;;;336 targetOffset=Uart_GetIntNum();
00040c ebfffffe BL Uart_GetIntNum
000410 e59f10d0 LDR r1,|L1.1256|
000414 e5810000 STR r0,[r1,#0] ; targetOffset
;;;337 if(targetOffset==(U32)(-1)) targetOffset=0x0;
000418 e59f00c8 LDR r0,|L1.1256|
00041c e5900000 LDR r0,[r0,#0] ; targetOffset
000420 e3700001 CMN r0,#1
000424 1a000002 BNE |L1.1076|
000428 e3a00000 MOV r0,#0
00042c e59f10b4 LDR r1,|L1.1256|
000430 e5810000 STR r0,[r1,#0] ; targetOffset
;;;338 if(targetSize==0)
|L1.1076|
000434 e59f00b0 LDR r0,|L1.1260|
000438 e5900000 LDR r0,[r0,#0] ; targetSize
00043c e3500000 CMP r0,#0
000440 1a00000b BNE |L1.1140|
;;;339 {
;;;340 Uart_Printf("Input target size [0x?] : ");
000444 e28f00a4 ADR r0,|L1.1264|
000448 ebfffffe BL _printf
;;;341 if(targetOffset==(U32)(-1)) targetOffset=0x0;
00044c e59f0094 LDR r0,|L1.1256|
000450 e5900000 LDR r0,[r0,#0] ; targetOffset
000454 e3700001 CMN r0,#1
000458 1a000002 BNE |L1.1128|
00045c e3a00000 MOV r0,#0
000460 e59f1080 LDR r1,|L1.1256|
000464 e5810000 STR r0,[r1,#0] ; targetOffset
;;;342 targetSize=Uart_GetIntNum();
|L1.1128|
000468 ebfffffe BL Uart_GetIntNum
00046c e59f1078 LDR r1,|L1.1260|
000470 e5810000 STR r0,[r1,#0] ; targetSize
;;;343 }
;;;344 }
|L1.1140|
000474 e8bd8008 LDMFD sp!,{r3,pc}
|L1.1144|
000478 32205b0a DCB "\n[ 2"
00047c 32314638 DCB "8F12"
000480 41334a38 DCB "8J3A"
000484 69725720 DCB " Wri"
000488 676e6974 DCB "ting"
00048c 6f725020 DCB " Pro"
000490 6d617267 DCB "gram"
000494 000a5d20 DCB " ]\n\0"
|L1.1176|
000498 00000000 DCD downloadProgramSize
|L1.1180|
00049c 756f530a DCB "\nSou"
0004a0 20656372 DCB "rce "
0004a4 657a6973 DCB "size"
0004a8 78305b20 DCB " [0x"
0004ac 3a205d3f DCB "?] :"
0004b0 7e683020 DCB " 0h~"
0004b4 0a687825 DCB "%xh\n"
0004b8 00000000 DCB "\0\0\0\0"
|L1.1212|
0004bc 00000000 DCD ||.constdata$1||
|L1.1216|
0004c0 75706e49 DCB "Inpu"
0004c4 61742074 DCB "t ta"
0004c8 74656772 DCB "rget"
0004cc 64646120 DCB " add"
0004d0 73736572 DCB "ress"
0004d4 66666f20 DCB " off"
0004d8 20746573 DCB "set "
0004dc 3f78305b DCB "[0x?"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -