📄 am29f800.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\am29f800.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
_WAIT PROC
;;;226 int _WAIT(void) //Check if the bit6 toggle ends.
;;;227 {
|L1.0|
000000 e3a00000 MOV r0,#0
;;;228 volatile U16 flashStatus,old;
;;;229
;;;230 old=*((volatile U16 *)0x0);
000004 e1d000b0 LDRH r0,[r0,#0]
000008 e1a02000 MOV r2,r0
;;;231
;;;232 while(1)
00000c e1a00000 NOP
|L1.16|
000010 e1a00000 NOP
;;;233 {
;;;234 flashStatus=*((volatile U16 *)0x0);
000014 e3a00000 MOV r0,#0
000018 e1d010b0 LDRH r1,[r0,#0]
;;;235 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|
;;;236 if( flashStatus&0x20 )
|L1.48|
000030 e3110020 TST r1,#0x20
000034 0a00000d BEQ |L1.112|
;;;237 {
;;;238 //Uart_Printf("[DQ5=1:%x]\n",flashStatus);
;;;239 old=*((volatile U16 *)0x0);
000038 e3a00000 MOV r0,#0
00003c e1d000b0 LDRH r0,[r0,#0]
000040 e1a02000 MOV r2,r0
;;;240 flashStatus=*((volatile U16 *)0x0);
000044 e3a00000 MOV r0,#0
000048 e1d000b0 LDRH r0,[r0,#0]
00004c e1a01000 MOV r1,r0
;;;241 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|
;;;242 return 0;
000060 e3a00000 MOV r0,#0
;;;243 else return 1;
;;;244 }
;;;245 //Uart_Printf(".");
;;;246 old=flashStatus;
;;;247 }
;;;248 //Uart_Printf("!\n");
;;;249 return 1;
;;;250 }
|L1.100|
000064 e1a0f00e MOV pc,lr
|L1.104|
000068 e3a00001 MOV r0,#1 ;243
00006c eafffffc B |L1.100| ;243
|L1.112|
000070 e1a02001 MOV r2,r1 ;246
000074 eaffffe5 B |L1.16| ;247
|L1.120|
000078 e3a00001 MOV r0,#1 ;249
00007c eafffff8 B |L1.100| ;249
ENDP
AM29F800_ProgFlash PROC
;;;255 int AM29F800_ProgFlash(U32 realAddr,U16 data)
;;;256 {
000080 e92d4070 STMFD sp!,{r4-r6,lr}
000084 e1a04000 MOV r4,r0
000088 e1a05001 MOV r5,r1
;;;257 volatile U16 *tempPt;
;;;258
;;;259 tempPt=(volatile U16 *)realAddr;
00008c e1a06004 MOV r6,r4
;;;260 _WR(0x555,0xaaaa);
000090 e59f0084 LDR r0,|L1.284|
000094 e3a01ea0 MOV r1,#0xa00
000098 e1c10aba STRH r0,[r1,#0xaa]
;;;261 _WR(0x2aa,0x5555);
00009c e1a000c0 MOV r0,r0,ASR #1
0000a0 e3a01e50 MOV r1,#0x500
0000a4 e1c105b4 STRH r0,[r1,#0x54]
;;;262 _WR(0x555,0xa0a0);
0000a8 e59f0070 LDR r0,|L1.288|
0000ac e3a01ea0 MOV r1,#0xa00
0000b0 e1c10aba STRH r0,[r1,#0xaa]
;;;263 *tempPt=data;
0000b4 e1a04006 MOV r4,r6
0000b8 e1c650b0 STRH r5,[r6,#0]
;;;264
;;;265 return _WAIT();
0000bc ebfffffe BL _WAIT
;;;266
;;;267 }
0000c0 e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
BlankCheck PROC
;;;208 int BlankCheck(int targetAddr,int targetSize)
;;;209 {
0000c4 e92d40f8 STMFD sp!,{r3-r7,lr}
0000c8 e1a06000 MOV r6,r0
0000cc e1a07001 MOV r7,r1
;;;210 int i,j;
;;;211 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|
;;;212 {
;;;213 j=*((U16 *)(i+targetAddr));
|L1.232|
0000e8 e19450b6 LDRH r5,[r4,r6]
;;;214 if( j!=0xffff)
0000ec e245ccff SUB r12,r5,#0xff00
0000f0 e25cc0ff SUBS r12,r12,#0xff
0000f4 0a000005 BEQ |L1.272|
;;;215 {
;;;216 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 Uart_Printf
;;;217 return 0;
000108 e3a00000 MOV r0,#0
;;;218 }
;;;219 }
;;;220 return 1;
;;;221 }
|L1.268|
00010c e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.272|
000110 eafffff2 B |L1.224| ;219
|L1.276|
000114 e3a00001 MOV r0,#1 ;220
000118 eafffffb B |L1.268| ;220
|L1.284|
00011c 0000aaaa DCD 0x0000aaaa ;220
|L1.288|
000120 0000a0a0 DCD 0x0000a0a0 ;220
|L1.292|
000124 78253a45 DCB "E:%x" ;220
000128 0a78253d DCB "=%x\n" ;220
00012c 00000000 DCB "\0\0\0\0" ;220
ENDP
AM29F800_EraseSector PROC
;;;189 void AM29F800_EraseSector(int targetAddr)
;;;190 {
000130 e92d4010 STMFD sp!,{r4,lr}
000134 e1a04000 MOV r4,r0
;;;191 Uart_Printf("Sector Erase is started!\n");
000138 e28f006c ADR r0,|L1.428|
00013c ebfffffe BL Uart_Printf
;;;192
;;;193 _RESET();
000140 e59f0080 LDR r0,|L1.456|
000144 e3a01000 MOV r1,#0
000148 e1c100b0 STRH r0,[r1,#0]
;;;194
;;;195 _WR(0x555,0xaaaa);
00014c e51f0038 LDR r0,|L1.284|
000150 e3a01ea0 MOV r1,#0xa00
000154 e1c10aba STRH r0,[r1,#0xaa]
;;;196 _WR(0x2aa,0x5555);
000158 e1a000c0 MOV r0,r0,ASR #1
00015c e3a01e50 MOV r1,#0x500
000160 e1c105b4 STRH r0,[r1,#0x54]
;;;197 _WR(0x555,0x8080);
000164 e59f0060 LDR r0,|L1.460|
000168 e3a01ea0 MOV r1,#0xa00
00016c e1c10aba STRH r0,[r1,#0xaa]
;;;198 _WR(0x555,0xaaaa);
000170 e51f005c LDR r0,|L1.284|
000174 e3a01ea0 MOV r1,#0xa00
000178 e1c10aba STRH r0,[r1,#0xaa]
;;;199 _WR(0x2aa,0x5555);
00017c e1a000c0 MOV r0,r0,ASR #1
000180 e3a01e50 MOV r1,#0x500
000184 e1c105b4 STRH r0,[r1,#0x54]
;;;200 _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]
;;;201 _WAIT();
000198 ebfffffe BL _WAIT
;;;202 _RESET();
00019c e59f0024 LDR r0,|L1.456|
0001a0 e3a01000 MOV r1,#0
0001a4 e1c100b0 STRH r0,[r1,#0]
;;;203 }
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
;;;157 int AM29F800_CheckId(void)
;;;158 {
0001d4 e92d4038 STMFD sp!,{r3-r5,lr}
;;;159 U16 manId,devId;
;;;160
;;;161 _RESET();
0001d8 e51f0018 LDR r0,|L1.456|
0001dc e3a01000 MOV r1,#0
0001e0 e1c100b0 STRH r0,[r1,#0]
;;;162
;;;163 _WR(0x555,0xaaaa);
0001e4 e51f00d0 LDR r0,|L1.284|
0001e8 e3a01ea0 MOV r1,#0xa00
0001ec e1c10aba STRH r0,[r1,#0xaa]
;;;164 _WR(0x2aa,0x5555);
0001f0 e1a000c0 MOV r0,r0,ASR #1
0001f4 e3a01e50 MOV r1,#0x500
0001f8 e1c105b4 STRH r0,[r1,#0x54]
;;;165 _WR(0x555,0x9090);
0001fc e59f00f4 LDR r0,|L1.760|
000200 e3a01ea0 MOV r1,#0xa00
000204 e1c10aba STRH r0,[r1,#0xaa]
;;;166 manId=_RD(0x0);
000208 e3a00000 MOV r0,#0
00020c e1d040b0 LDRH r4,[r0,#0]
;;;167
;;;168 _RESET(); // New 5V AM29F800 needs this command.
000210 e51f0050 LDR r0,|L1.456|
000214 e3a01000 MOV r1,#0
000218 e1c100b0 STRH r0,[r1,#0]
;;;169 _WR(0x555,0xaaaa);
00021c e51f0108 LDR r0,|L1.284|
000220 e3a01ea0 MOV r1,#0xa00
000224 e1c10aba STRH r0,[r1,#0xaa]
;;;170 _WR(0x2aa,0x5555);
000228 e1a000c0 MOV r0,r0,ASR #1
00022c e3a01e50 MOV r1,#0x500
000230 e1c105b4 STRH r0,[r1,#0x54]
;;;171 _WR(0x555,0x9090);
000234 e59f00bc LDR r0,|L1.760|
000238 e3a01ea0 MOV r1,#0xa00
00023c e1c10aba STRH r0,[r1,#0xaa]
;;;172 devId=_RD(0x1);
000240 e3a00000 MOV r0,#0
000244 e1d050b2 LDRH r5,[r0,#2]
;;;173
;;;174 _RESET();
000248 e51f0088 LDR r0,|L1.456|
00024c e3a01000 MOV r1,#0
000250 e1c100b0 STRH r0,[r1,#0]
;;;175
;;;176 Uart_Printf("Manufacture ID(0x0001)=%4x, Device ID(0x22xx)=%4x\n",manId,devId);
000254 e1a02005 MOV r2,r5
000258 e1a01004 MOV r1,r4
00025c e28f0098 ADR r0,|L1.764|
000260 ebfffffe BL Uart_Printf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -