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

📄 am29f800.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; 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 + -