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

📄 k9f1g08.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000b6c  e3a00b80          MOV      r0,#0x20000
000b70  e3a0144a          MOV      r1,#0x4a000000
000b74  e5810000          STR      r0,[r1,#0]
;;;856    	rDISRC0=(unsigned)bufPt; 	// Nand flash data register
000b78  e1a0800a          MOV      r8,r10
000b7c  e3a0044b          MOV      r0,#0x4b000000
000b80  e580a000          STR      r10,[r0,#0]
;;;857    	rDISRCC0=(0<<1) | (0<<0); //arc=AHB,src_addr=inc
000b84  e3a00000          MOV      r0,#0
000b88  e3a0144b          MOV      r1,#0x4b000000
000b8c  e5810004          STR      r0,[r1,#4]
;;;858    	rDIDST0=NFDATA;
000b90  e51f04f0          LDR      r0,|L1.1704|
000b94  e3a0144b          MOV      r1,#0x4b000000
000b98  e5810008          STR      r0,[r1,#8]
;;;859    	rDIDSTC0=(0<<1) | (1<<0); //dst=AHB,dst_addr=fix;
000b9c  e3a00001          MOV      r0,#1
000ba0  e3a0144b          MOV      r1,#0x4b000000
000ba4  e581000c          STR      r0,[r1,#0xc]
;;;860    	rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(2048/4);
000ba8  e59f01f4          LDR      r0,|L1.3492|
000bac  e3a0144b          MOV      r1,#0x4b000000
000bb0  e5810010          STR      r0,[r1,#0x10]
;;;861    	//  only unit transfer in writing!!!!
;;;862    	//Handshake,AHB,interrupt,(unit),whole,S/W,no_autoreload,word,count=128;
;;;863    	
;;;864    	// DMA on and start.
;;;865    	rDMASKTRIG0=(1<<1)|(1<<0);
000bb4  e3a00003          MOV      r0,#3
000bb8  e3a0144b          MOV      r1,#0x4b000000
000bbc  e5810020          STR      r0,[r1,#0x20]
;;;866    	
;;;867    	while(!(rSRCPND & BIT_DMA0));	// Wait until Dma transfer is done.
000bc0  e1a00000          NOP      
                  |L1.3012|
000bc4  e3a0044a          MOV      r0,#0x4a000000
000bc8  e5900000          LDR      r0,[r0,#0]
000bcc  e3100b80          TST      r0,#0x20000
000bd0  0afffffb          BEQ      |L1.3012|
;;;868    	rSRCPND=BIT_DMA0;	
000bd4  e3a00b80          MOV      r0,#0x20000
000bd8  e3a0144a          MOV      r1,#0x4a000000
000bdc  e5810000          STR      r0,[r1,#0]
;;;869    #endif
;;;870    /*
;;;871          NF_MECC_Lock();
;;;872    // Get ECC data.
;;;873    	// Spare data for 8bit
;;;874    	// byte  0   1    2    3    4   5
;;;875    	// ecc  [0]  [1]  [2]  [3]  x   [Bad marking]
;;;876    	Mecc = rNFMECC0;
;;;877    	se8Buf[0]=(U8)(Mecc&0xff);
;;;878    	se8Buf[1]=(U8)((Mecc>>8) & 0xff);
;;;879    	se8Buf[2]=(U8)((Mecc>>16) & 0xff);
;;;880    	se8Buf[3]=(U8)((Mecc>>24) & 0xff);
;;;881    	se8Buf[5]=0xffff;		// Marking good block
;;;882    
;;;883    	//Write extra data(ECC, bad marking)
;;;884    	for(i=0;i<16;i++) {
;;;885    		NF_WRDATA8(se8Buf[i]);	// Write spare array(ECC and Mark)
;;;886    		NF8_Spare_Data[i]=se8Buf[i];
;;;887        }  
;;;888    
;;;889     	NF_CLEAR_RB();
;;;890    	NF_CMD(0x10);	 // Write 2nd command
;;;891    	NF_DETECT_RB();
;;;892    
;;;893    	NF_CMD(0x70);   // Read status command   
;;;894        
;;;895    	for(i=0;i<3;i++);  //twhr=60ns
;;;896         
;;;897        if (NF_RDDATA()&0x1) {// Page write error
;;;898        	
;;;899    		Uart_Printf("[PROGRAM_ERROR:block#=%d]\n",block);
;;;900    		NF8_MarkBadBlock(block);
;;;901    		 NF_nFCE_H();
;;;902    		return FAIL;
;;;903        } else {
;;;904        	   NF_nFCE_H();
;;;905    	  return OK;
;;;906    	   
;;;907    	}
;;;908    */
;;;909    
;;;910           NF_MECC_Lock();
000be0  e3a0044e          MOV      r0,#0x4e000000
000be4  e5900004          LDR      r0,[r0,#4]
000be8  e3800020          ORR      r0,r0,#0x20
000bec  e3a0144e          MOV      r1,#0x4e000000
000bf0  e5810004          STR      r0,[r1,#4]
;;;911    	// Get ECC data.
;;;912    	// Spare data for 8bit
;;;913    	// byte  0                  1    2     3     4          5               6      7            8         9
;;;914    	// ecc  [Bad marking] [0]  [1]  [2]  [3]    x                       SECC0  SECC1
;;;915    	Mecc = rNFMECC0;
000bf4  e3a0044e          MOV      r0,#0x4e000000
000bf8  e590502c          LDR      r5,[r0,#0x2c]
;;;916    
;;;917    	se8Buf[0]=0xff;
000bfc  e3a000ff          MOV      r0,#0xff
000c00  e51f11e0          LDR      r1,|L1.2600|
000c04  e5c10000          STRB     r0,[r1,#0]  ; se8Buf
;;;918    	se8Buf[1]=(U8)(Mecc&0xff);
000c08  e51f01e8          LDR      r0,|L1.2600|
000c0c  e5c05001          STRB     r5,[r0,#1]  ; se8Buf
;;;919    	se8Buf[2]=(U8)((Mecc>>8) & 0xff);
000c10  e1a00805          MOV      r0,r5,LSL #16
000c14  e1a00c20          MOV      r0,r0,LSR #24
000c18  e51f11f8          LDR      r1,|L1.2600|
000c1c  e5c10002          STRB     r0,[r1,#2]  ; se8Buf
;;;920    	se8Buf[3]=(U8)((Mecc>>16) & 0xff);
000c20  e1a00405          MOV      r0,r5,LSL #8
000c24  e1a00c20          MOV      r0,r0,LSR #24
000c28  e51f1208          LDR      r1,|L1.2600|
000c2c  e5c10003          STRB     r0,[r1,#3]  ; se8Buf
;;;921    	se8Buf[4]=(U8)((Mecc>>24) & 0xff);
000c30  e1a00c25          MOV      r0,r5,LSR #24
000c34  e51f1214          LDR      r1,|L1.2600|
000c38  e5c10004          STRB     r0,[r1,#4]  ; se8Buf
;;;922    			// Marking good block
;;;923    
;;;924    //	NF_SECC_UnLock();
;;;925    	//Write extra data(ECC, bad marking)
;;;926    	for(i=0;i<5;i++) {
000c3c  e3a04000          MOV      r4,#0
                  |L1.3136|
000c40  e3540005          CMP      r4,#5
000c44  aa00000b          BGE      |L1.3192|
000c48  ea000001          B        |L1.3156|
                  |L1.3148|
000c4c  e2844001          ADD      r4,r4,#1
000c50  eafffffa          B        |L1.3136|
;;;927    		NF_WRDATA8(se8Buf[i]);	// Write spare array(Main ECC)
                  |L1.3156|
000c54  e51f0234          LDR      r0,|L1.2600|
000c58  e7d00004          LDRB     r0,[r0,r4]
000c5c  e3a0144e          MOV      r1,#0x4e000000
000c60  e5c10010          STRB     r0,[r1,#0x10]
;;;928    		NF1G08_Spare_Data[i]=se8Buf[i];
000c64  e51f0244          LDR      r0,|L1.2600|
000c68  e7d00004          LDRB     r0,[r0,r4]
000c6c  e51f15c4          LDR      r1,|L1.1712|
000c70  e7c10004          STRB     r0,[r1,r4]
;;;929        	}  
000c74  eafffff4          B        |L1.3148|
;;;930    /*      NF_SECC_Lock(); 
;;;931    	Secc=rNFSECC; 
;;;932    	se8Buf[8]=(U8)(Secc&0xff);
;;;933    	se8Buf[9]=(U8)((Secc>>8) & 0xff);
;;;934    	*/
;;;935    	for(i=5;i<64;i++) {
                  |L1.3192|
000c78  e3a04005          MOV      r4,#5
                  |L1.3196|
000c7c  e3540040          CMP      r4,#0x40
000c80  aa00000b          BGE      |L1.3252|
000c84  ea000001          B        |L1.3216|
                  |L1.3208|
000c88  e2844001          ADD      r4,r4,#1
000c8c  eafffffa          B        |L1.3196|
;;;936    		NF_WRDATA8(se8Buf[i]);  // Write spare array(Spare ECC and Mark)
                  |L1.3216|
000c90  e51f0270          LDR      r0,|L1.2600|
000c94  e7d00004          LDRB     r0,[r0,r4]
000c98  e3a0144e          MOV      r1,#0x4e000000
000c9c  e5c10010          STRB     r0,[r1,#0x10]
;;;937    		NF1G08_Spare_Data[i]=se8Buf[i];
000ca0  e51f0280          LDR      r0,|L1.2600|
000ca4  e7d00004          LDRB     r0,[r0,r4]
000ca8  e51f1600          LDR      r1,|L1.1712|
000cac  e7c10004          STRB     r0,[r1,r4]
;;;938    	}  
000cb0  eafffff4          B        |L1.3208|
;;;939     	NF_CLEAR_RB();
                  |L1.3252|
000cb4  e3a0044e          MOV      r0,#0x4e000000
000cb8  e5900020          LDR      r0,[r0,#0x20]
000cbc  e3800004          ORR      r0,r0,#4
000cc0  e3a0144e          MOV      r1,#0x4e000000
000cc4  e5810020          STR      r0,[r1,#0x20]
;;;940    	NF_CMD(0x10);	 // Write 2nd command
000cc8  e3a00010          MOV      r0,#0x10
000ccc  e3a0144e          MOV      r1,#0x4e000000
000cd0  e5810008          STR      r0,[r1,#8]
;;;941    //	NF_DETECT_RB();
;;;942    	while(NFConDone_1G08==0);
000cd4  e1a00000          NOP      
                  |L1.3288|
000cd8  e51f0ae0          LDR      r0,|L1.512|
000cdc  e5900000          LDR      r0,[r0,#0]  ; NFConDone_1G08
000ce0  e3500000          CMP      r0,#0
000ce4  0afffffb          BEQ      |L1.3288|
;;;943    	 rNFCONT&=~(1<<9);
000ce8  e3a0044e          MOV      r0,#0x4e000000
000cec  e5900004          LDR      r0,[r0,#4]
000cf0  e3c00f80          BIC      r0,r0,#0x200
000cf4  e3a0144e          MOV      r1,#0x4e000000
000cf8  e5810004          STR      r0,[r1,#4]
;;;944    	 rNFCONT&=~(1<<10); // Disable Illegal Access Interrupt
000cfc  e3a0044e          MOV      r0,#0x4e000000
000d00  e5900004          LDR      r0,[r0,#4]
000d04  e3c00e40          BIC      r0,r0,#0x400
000d08  e3a0144e          MOV      r1,#0x4e000000
000d0c  e5810004          STR      r0,[r1,#4]
;;;945    	 if(rNFSTAT&0x8) return FAIL;
000d10  e3a0044e          MOV      r0,#0x4e000000
000d14  e5900020          LDR      r0,[r0,#0x20]
000d18  e3100008          TST      r0,#8
000d1c  0a000001          BEQ      |L1.3368|
000d20  e3a00000          MOV      r0,#0
;;;946    
;;;947    	NF_CMD(0x70);   // Read status command   
;;;948        
;;;949    	for(i=0;i<3;i++);  //twhr=60ns
;;;950        
;;;951           if (NF_RDDATA()&0x1) {// Page write error
;;;952        	       EXT_NF_nFCE_H();
;;;953    		Uart_Printf("[PROGRAM_ERROR:block#=%d]\n",block);
;;;954    		NF1G08_MarkBadBlock(block);
;;;955    		return FAIL;
;;;956           } else {
;;;957        	      EXT_NF_nFCE_H();
;;;958    	      return OK;
;;;959    	}
;;;960    
;;;961    }
                  |L1.3364|
000d24  e8bd87f0          LDMFD    sp!,{r4-r10,pc}
                  |L1.3368|
000d28  e3a00070          MOV      r0,#0x70              ;947
000d2c  e3a0144e          MOV      r1,#0x4e000000        ;947
000d30  e5810008          STR      r0,[r1,#8]            ;947
000d34  e3a04000          MOV      r4,#0                 ;949
                  |L1.3384|
000d38  e3540003          CMP      r4,#3                 ;949
000d3c  aa000001          BGE      |L1.3400|             ;949
000d40  e2844001          ADD      r4,r4,#1              ;949
000d44  eafffffb          B        |L1.3384|             ;949
                  |L1.3400|
000d48  e3a0044e          MOV      r0,#0x4e000000        ;951
000d4c  e5900010          LDR      r0,[r0,#0x10]         ;951
000d50  e3100001          TST      r0,#1                 ;951
000d54  0a00000b          BEQ      |L1.3464|             ;951
000d58  e3a00456          MOV      r0,#0x56000000        ;952
000d5c  e5900004          LDR      r0,[r0,#4]            ;952
000d60  e3800b40          ORR      r0,r0,#0x10000        ;952
000d64  e3a01456          MOV      r1,#0x56000000        ;952
000d68  e5810004          STR      r0,[r1,#4]            ;952
000d6c  e1a01006          MOV      r1,r6                 ;953
000d70  e28f0030          ADR      r0,|L1.3496|          ;953
000d74  ebfffffe          BL       Uart_Printf           ;953
000d78  e1a00006          MOV      r0,r6                 ;954
000d7c  ebfffffe          BL       NF1G08_MarkBadBlock   ;954
000d80  e3a00000          MOV      r0,#0                 ;955
000d84  eaffffe6          B        |L1.3364|             ;955
                  |L1.3464|
000d88  e3a00456          MOV      r0,#0x56000000        ;957
000d8c  e5900004          LDR      r0,[r0,#4]            ;957
000d90  e3800b40          ORR      r0,r0,#0x10000        ;957
000d94  e3a01456          MOV      r1,#0x56000000        ;957
000d98  e5810004          STR      r0,[r1,#4]            ;957
000d9c  e3a00001          MOV      r0,#1                 ;958
000da0  eaffffdf          B        |L1.3364|             ;958
                  |L1.3492|
000da4  e8600200          DCD      0xe8600200            ;958
                  |L1.3496|
000da8  4f52505b          DCB      "[PRO"                ;958
000dac  4d415247          DCB      "GRAM"                ;958
000db0  5252455f          DCB      "_ERR"                ;958
000db4  623a524f          DCB      "OR:b"                ;958
000db8  6b636f6c          DCB      "lock"                ;958
000dbc  64253d23          DCB      "#=%d"                ;958
000dc0  00000a5d          DCB      "]\n\0\0"             ;958
                          ENDP

                  Test_NF1G08_Page_Write PROC
;;;271    void Test_NF1G08_Page_Write(void)
;;;272    {
000dc4  e92d43f8          STMFD    sp!,{r3-r9,lr}
;;;273    	U32 block=0, page=0;
000dc8  e3a06000          MOV      r6,#0
000dcc  e3a07000          MOV      r7,#0
;;;274    	int i, offset;
;;;275    	unsigned char * srcPt;
;;;276    	srcPt=(unsigned char *)0x31100000;
000dd0  e59f516c          LDR      r5,|L1.3908|
;;;277    		
;;;278    	Uart_Printf("(K9F1G08) NAND Page Write.\n");
000dd4  e28f0f5b          ADR      r0,|L1.3912|
000dd8  ebfffffe          BL       Uart_Printf
;;;279    	Uart_Printf("You must erase block before you write data!!! \n");
000ddc  e28f0f60          ADR      r0,|L1.3940|
000de0  ebfffffe          BL       Uart_Printf
;;;280    
;;;281    	Uart_Printf("Block # to write: ");
000de4  e28f0f6a          ADR      r0,|L1.3988|
000de8  ebfffffe          BL       Uart_Printf
;;;282    	block = Uart_GetIntNum();
000dec  ebfffffe          BL       Uart_GetIntNum
000df0  e1a06000          MOV      r6,r0
;;;283    	Uart_Printf("Page # to write: ");
000df4  e28f0f6b          ADR      r0,|L1.4008|
000df8  ebfffffe          BL       Uart_Printf
;;;284    	page = Uart_GetIntNum();
000dfc  ebfffffe          BL       Uart_GetIntNum
000e00  e1a07000          MOV      r7,r0
;;;285    	Uart_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -