⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 am29f800.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; 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 + -