📄 am29f800.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\am29f800.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
_WAIT PROC
;;;220 int _WAIT(void) //Check if the bit6 toggle ends.
;;;221 {
|L1.0|
000000 e3a00000 MOV r0,#0
;;;222 volatile U16 flashStatus,old;
;;;223
;;;224 old=*((volatile U16 *)0x0);
000004 e1d000b0 LDRH r0,[r0,#0]
000008 e1a02000 MOV r2,r0
;;;225
;;;226 while(1)
00000c e1a00000 NOP
|L1.16|
000010 e1a00000 NOP
;;;227 {
;;;228 flashStatus=*((volatile U16 *)0x0);
000014 e3a00000 MOV r0,#0
000018 e1d010b0 LDRH r1,[r0,#0]
;;;229 if( (old&0x40) == (flashStatus&0x40) )break;
00001c e2020040 AND r0,r2,#0x40
000020 e2013040 AND r3,r1,#0x40
000024 e1500003 CMP r0,r3
000028 1a000000 BNE |L1.48|
00002c ea000011 B |L1.120|
;;;230 if( flashStatus&0x20 )
|L1.48|
000030 e3110020 TST r1,#0x20
000034 0a00000d BEQ |L1.112|
;;;231 {
;;;232 //Uart_Printf("[DQ5=1:%x]\n",flashStatus);
;;;233 old=*((volatile U16 *)0x0);
000038 e3a00000 MOV r0,#0
00003c e1d000b0 LDRH r0,[r0,#0]
000040 e1a02000 MOV r2,r0
;;;234 flashStatus=*((volatile U16 *)0x0);
000044 e3a00000 MOV r0,#0
000048 e1d000b0 LDRH r0,[r0,#0]
00004c e1a01000 MOV r1,r0
;;;235 if( (old&0x40) == (flashStatus&0x40) )
000050 e2020040 AND r0,r2,#0x40
000054 e2013040 AND r3,r1,#0x40
000058 e1500003 CMP r0,r3
00005c 1a000001 BNE |L1.104|
;;;236 return 0;
000060 e3a00000 MOV r0,#0
;;;237 else return 1;
;;;238 }
;;;239 //Uart_Printf(".");
;;;240 old=flashStatus;
;;;241 }
;;;242 //Uart_Printf("!\n");
;;;243 return 1;
;;;244 }
|L1.100|
000064 e12fff1e BX lr
|L1.104|
000068 e3a00001 MOV r0,#1 ;237
00006c eafffffc B |L1.100| ;237
|L1.112|
000070 e1a02001 MOV r2,r1 ;240
000074 eaffffe5 B |L1.16| ;241
|L1.120|
000078 e3a00001 MOV r0,#1 ;243
00007c eafffff8 B |L1.100| ;243
ENDP
AM29F800_ProgFlash PROC
;;;249 int AM29F800_ProgFlash(U32 realAddr,U16 data)
;;;250 {
000080 e92d4070 STMFD sp!,{r4-r6,lr}
000084 e1a04000 MOV r4,r0
000088 e1a05001 MOV r5,r1
;;;251 volatile U16 *tempPt;
;;;252
;;;253 tempPt=(volatile U16 *)realAddr;
00008c e1a06004 MOV r6,r4
;;;254 _WR(0x555,0xaaaa);
000090 e59f0084 LDR r0,|L1.284|
000094 e3a01ea0 MOV r1,#0xa00
000098 e1c10aba STRH r0,[r1,#0xaa]
;;;255 _WR(0x2aa,0x5555);
00009c e1a000c0 MOV r0,r0,ASR #1
0000a0 e3a01e50 MOV r1,#0x500
0000a4 e1c105b4 STRH r0,[r1,#0x54]
;;;256 _WR(0x555,0xa0a0);
0000a8 e59f0070 LDR r0,|L1.288|
0000ac e3a01ea0 MOV r1,#0xa00
0000b0 e1c10aba STRH r0,[r1,#0xaa]
;;;257 *tempPt=data;
0000b4 e1a04006 MOV r4,r6
0000b8 e1c650b0 STRH r5,[r6,#0]
;;;258
;;;259 return _WAIT();
0000bc ebfffffe BL _WAIT
;;;260
;;;261 }
0000c0 e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
BlankCheck PROC
;;;202 int BlankCheck(int targetAddr,int targetSize)
;;;203 {
0000c4 e92d40f8 STMFD sp!,{r3-r7,lr}
0000c8 e1a06000 MOV r6,r0
0000cc e1a07001 MOV r7,r1
;;;204 int i,j;
;;;205 for(i=0;i<targetSize;i+=2)
0000d0 e3a04000 MOV r4,#0
|L1.212|
0000d4 e1540007 CMP r4,r7
0000d8 aa00000d BGE |L1.276|
0000dc ea000001 B |L1.232|
|L1.224|
0000e0 e2844002 ADD r4,r4,#2
0000e4 eafffffa B |L1.212|
;;;206 {
;;;207 j=*((U16 *)(i+targetAddr));
|L1.232|
0000e8 e19450b6 LDRH r5,[r4,r6]
;;;208 if( j!=0xffff)
0000ec e245ccff SUB r12,r5,#0xff00
0000f0 e25cc0ff SUBS r12,r12,#0xff
0000f4 0a000005 BEQ |L1.272|
;;;209 {
;;;210 Uart_Printf("E:%x=%x\n",(i+targetAddr),j);
0000f8 e0841006 ADD r1,r4,r6
0000fc e1a02005 MOV r2,r5
000100 e28f001c ADR r0,|L1.292|
000104 ebfffffe BL _printf
;;;211 return 0;
000108 e3a00000 MOV r0,#0
;;;212 }
;;;213 }
;;;214 return 1;
;;;215 }
|L1.268|
00010c e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.272|
000110 eafffff2 B |L1.224| ;213
|L1.276|
000114 e3a00001 MOV r0,#1 ;214
000118 eafffffb B |L1.268| ;214
|L1.284|
00011c 0000aaaa DCD 0x0000aaaa ;214
|L1.288|
000120 0000a0a0 DCD 0x0000a0a0 ;214
|L1.292|
000124 78253a45 DCB "E:%x" ;214
000128 0a78253d DCB "=%x\n" ;214
00012c 00000000 DCB "\0\0\0\0" ;214
ENDP
AM29F800_EraseSector PROC
;;;183 void AM29F800_EraseSector(int targetAddr)
;;;184 {
000130 e92d4010 STMFD sp!,{r4,lr}
000134 e1a04000 MOV r4,r0
;;;185 Uart_Printf("Sector Erase is started!\n");
000138 e28f006c ADR r0,|L1.428|
00013c ebfffffe BL _printf
;;;186
;;;187 _RESET();
000140 e59f0080 LDR r0,|L1.456|
000144 e3a01000 MOV r1,#0
000148 e1c100b0 STRH r0,[r1,#0]
;;;188
;;;189 _WR(0x555,0xaaaa);
00014c e51f0038 LDR r0,|L1.284|
000150 e3a01ea0 MOV r1,#0xa00
000154 e1c10aba STRH r0,[r1,#0xaa]
;;;190 _WR(0x2aa,0x5555);
000158 e1a000c0 MOV r0,r0,ASR #1
00015c e3a01e50 MOV r1,#0x500
000160 e1c105b4 STRH r0,[r1,#0x54]
;;;191 _WR(0x555,0x8080);
000164 e59f0060 LDR r0,|L1.460|
000168 e3a01ea0 MOV r1,#0xa00
00016c e1c10aba STRH r0,[r1,#0xaa]
;;;192 _WR(0x555,0xaaaa);
000170 e51f005c LDR r0,|L1.284|
000174 e3a01ea0 MOV r1,#0xa00
000178 e1c10aba STRH r0,[r1,#0xaa]
;;;193 _WR(0x2aa,0x5555);
00017c e1a000c0 MOV r0,r0,ASR #1
000180 e3a01e50 MOV r1,#0x500
000184 e1c105b4 STRH r0,[r1,#0x54]
;;;194 _WR(BADDR2WADDR(targetAddr),0x3030);
000188 e59f0040 LDR r0,|L1.464|
00018c e1a010c4 MOV r1,r4,ASR #1
000190 e1a01081 MOV r1,r1,LSL #1
000194 e1c100b0 STRH r0,[r1,#0]
;;;195 _WAIT();
000198 ebfffffe BL _WAIT
;;;196 _RESET();
00019c e59f0024 LDR r0,|L1.456|
0001a0 e3a01000 MOV r1,#0
0001a4 e1c100b0 STRH r0,[r1,#0]
;;;197 }
0001a8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.428|
0001ac 74636553 DCB "Sect"
0001b0 4520726f DCB "or E"
0001b4 65736172 DCB "rase"
0001b8 20736920 DCB " is "
0001bc 72617473 DCB "star"
0001c0 21646574 DCB "ted!"
0001c4 0000000a DCB "\n\0\0\0"
|L1.456|
0001c8 0000f0f0 DCD 0x0000f0f0
|L1.460|
0001cc 00008080 DCD 0x00008080
|L1.464|
0001d0 00003030 DCD 0x00003030
ENDP
AM29F800_CheckId PROC
;;;155 int AM29F800_CheckId(void)
;;;156 {
0001d4 e92d4038 STMFD sp!,{r3-r5,lr}
;;;157 U16 manId,devId;
;;;158
;;;159 _RESET();
0001d8 e51f0018 LDR r0,|L1.456|
0001dc e3a01000 MOV r1,#0
0001e0 e1c100b0 STRH r0,[r1,#0]
;;;160
;;;161 _WR(0x555,0xaaaa);
0001e4 e51f00d0 LDR r0,|L1.284|
0001e8 e3a01ea0 MOV r1,#0xa00
0001ec e1c10aba STRH r0,[r1,#0xaa]
;;;162 _WR(0x2aa,0x5555);
0001f0 e1a000c0 MOV r0,r0,ASR #1
0001f4 e3a01e50 MOV r1,#0x500
0001f8 e1c105b4 STRH r0,[r1,#0x54]
;;;163 _WR(0x555,0x9090);
0001fc e59f0084 LDR r0,|L1.648|
000200 e3a01ea0 MOV r1,#0xa00
000204 e1c10aba STRH r0,[r1,#0xaa]
;;;164 manId=_RD(0x0);
000208 e3a00000 MOV r0,#0
00020c e1d040b0 LDRH r4,[r0,#0]
;;;165
;;;166 _RESET(); // New 5V AM29F800 needs this command.
000210 e51f0050 LDR r0,|L1.456|
000214 e3a01000 MOV r1,#0
000218 e1c100b0 STRH r0,[r1,#0]
;;;167 _WR(0x555,0xaaaa);
00021c e51f0108 LDR r0,|L1.284|
000220 e3a01ea0 MOV r1,#0xa00
000224 e1c10aba STRH r0,[r1,#0xaa]
;;;168 _WR(0x2aa,0x5555);
000228 e1a000c0 MOV r0,r0,ASR #1
00022c e3a01e50 MOV r1,#0x500
000230 e1c105b4 STRH r0,[r1,#0x54]
;;;169 _WR(0x555,0x9090);
000234 e59f004c LDR r0,|L1.648|
000238 e3a01ea0 MOV r1,#0xa00
00023c e1c10aba STRH r0,[r1,#0xaa]
;;;170 devId=_RD(0x1);
000240 e3a00000 MOV r0,#0
000244 e1d050b2 LDRH r5,[r0,#2]
;;;171
;;;172 _RESET();
000248 e51f0088 LDR r0,|L1.456|
00024c e3a01000 MOV r1,#0
000250 e1c100b0 STRH r0,[r1,#0]
;;;173
;;;174 Uart_Printf("Manufacture ID=%4x(0x0001), Device ID(0x225B)=%4x\n",manId,devId);
000254 e1a02005 MOV r2,r5
000258 e1a01004 MOV r1,r4
00025c e28f0028 ADR r0,|L1.652|
000260 ebfffffe BL _printf
;;;175
;;;176 if(manId==0x0001 && devId==0x225b)return 1;
000264 e3540001 CMP r4,#1
000268 1a000004 BNE |L1.640|
00026c e245cd88 SUB r12,r5,#0x2200
000270 e25cc05b SUBS r12,r12,#0x5b
000274 1a000001 BNE |L1.640|
000278 e3a00001 MOV r0,#1
;;;177 else return 0;
;;;178 }
|L1.636|
00027c e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.640|
000280 e3a00000 MOV r0,#0 ;177
000284 eafffffc B |L1.636| ;177
|L1.648|
000288 00009090 DCD 0x00009090 ;177
|L1.652|
00028c 756e614d DCB "Manu" ;177
000290 74636166 DCB "fact" ;177
000294 20657275 DCB "ure " ;177
000298 253d4449 DCB "ID=%" ;177
00029c 30287834 DCB "4x(0" ;177
0002a0 30303078 DCB "x000" ;177
0002a4 202c2931 DCB "1), " ;177
0002a8 69766544 DCB "Devi" ;177
0002ac 49206563 DCB "ce I" ;177
0002b0 78302844 DCB "D(0x" ;177
0002b4 42353232 DCB "225B" ;177
0002b8 34253d29 DCB ")=%4" ;177
0002bc 00000a78 DCB "x\n\0\0" ;177
ENDP
InputTargetAddr PROC
;;;106 static void InputTargetAddr(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -