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

📄 nand.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\nand.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  PrintSubMessage PROC
;;;555    void PrintSubMessage(void)
;;;556    {
                  |L1.0|
000000  e92d4010          STMFD    sp!,{r4,lr}
;;;557    	int i;
;;;558    	
;;;559    	i=0;	
000004  e3a04000          MOV      r4,#0
;;;560    	Uart_Printf("\n\n");
000008  e28f0058          ADR      r0,|L1.104|
00000c  ebfffffe          BL       Uart_Printf
;;;561    	while(1)
000010  e1a00000          NOP      
                  |L1.20|
000014  e1a00000          NOP      
;;;562    	{   //display menu
;;;563    	    Uart_Printf("%2d:%s",i,n8_func[i][1]);
000018  e59f004c          LDR      r0,|L1.108|
00001c  e0800184          ADD      r0,r0,r4,LSL #3
000020  e1a01004          MOV      r1,r4
000024  e5902004          LDR      r2,[r0,#4]
000028  e28f0040          ADR      r0,|L1.112|
00002c  ebfffffe          BL       Uart_Printf
;;;564    	    i++;
000030  e2844001          ADD      r4,r4,#1
;;;565    	    if((int)(n8_func[i][0])==0)
000034  e59f0030          LDR      r0,|L1.108|
000038  e7900184          LDR      r0,[r0,r4,LSL #3]
00003c  e3500000          CMP      r0,#0
000040  1a000002          BNE      |L1.80|
;;;566    	    {
;;;567    		 Uart_Printf("\n");
000044  e28f002c          ADR      r0,|L1.120|
000048  ebfffffe          BL       Uart_Printf
;;;568    		 break;
00004c  ea000004          B        |L1.100|
;;;569    	    }
;;;570    	    if((i%4)==0) Uart_Printf("\n");
                  |L1.80|
000050  e3140003          TST      r4,#3
000054  1a000001          BNE      |L1.96|
000058  e28f0018          ADR      r0,|L1.120|
00005c  ebfffffe          BL       Uart_Printf
;;;571    	}
                  |L1.96|
000060  eaffffeb          B        |L1.20|
;;;572    }
                  |L1.100|
000064  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.104|
000068  00000a0a          DCB      "\n\n\0\0"
                  |L1.108|
00006c  00000000          DCD      n8_func
                  |L1.112|
000070  3a643225          DCB      "%2d:"
000074  00007325          DCB      "%s\0\0"
                  |L1.120|
000078  0000000a          DCB      "\n\0\0\0"
                          ENDP

                  NF8_Init PROC
;;;984    static void NF8_Init(void)
;;;985    {
00007c  e59f0074          LDR      r0,|L1.248|
;;;986    	// for S3C2442
;;;987    
;;;988    	rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0);	
000080  e3a0144e          MOV      r1,#0x4e000000
000084  e5810000          STR      r0,[r1,#0]
;;;989    	// TACLS		[14:12]	CLE&ALE duration = HCLK*TACLS.
;;;990    	// TWRPH0		[10:8]	TWRPH0 duration = HCLK*(TWRPH0+1)
;;;991    	// TWRPH1		[6:4]	TWRPH1 duration = HCLK*(TWRPH1+1)
;;;992    	// AdvFlash(R)	[3]		Advanced NAND, 0:256/512, 1:1024/2048
;;;993    	// PageSize(R)	[2]		NAND memory page size
;;;994    	//						when [3]==0, 0:256, 1:512 bytes/page.
;;;995    	//						when [3]==1, 0:1024, 1:2048 bytes/page.
;;;996    	// AddrCycle(R)	[1]		NAND flash addr size
;;;997    	//						when [3]==0, 0:3-addr, 1:4-addr.
;;;998    	//						when [3]==1, 0:4-addr, 1:5-addr.
;;;999    	// BusWidth(R/W) [0]	NAND bus width. 0:8-bit, 1:16-bit.
;;;1000   	
;;;1001   	rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
000088  e3a00073          MOV      r0,#0x73
00008c  e3a0144e          MOV      r1,#0x4e000000
000090  e5810004          STR      r0,[r1,#4]
;;;1002   	// Lock-tight	[13]	0:Disable lock, 1:Enable lock.
;;;1003   	// Soft Lock	[12]	0:Disable lock, 1:Enable lock.
;;;1004   	// EnablillegalAcINT[10]	Illegal access interupt control. 0:Disable, 1:Enable
;;;1005   	// EnbRnBINT	[9]		RnB interrupt. 0:Disable, 1:Enable
;;;1006   	// RnB_TrandMode[8]		RnB transition detection config. 0:Low to High, 1:High to Low
;;;1007   	// SpareECCLock	[6]		0:Unlock, 1:Lock
;;;1008   	// MainECCLock	[5]		0:Unlock, 1:Lock
;;;1009   	// InitECC(W)	[4]		1:Init ECC decoder/encoder.
;;;1010   	// Reg_nCE		[1]		0:nFCE=0, 1:nFCE=1.
;;;1011   	// NANDC Enable	[0]		operating mode. 0:Disable, 1:Enable.
;;;1012   
;;;1013   //	rNFSTAT = 0;
;;;1014       
;;;1015   //    Nand_Reset();
;;;1016   }
000094  e1a0f00e          MOV      pc,lr
                          ENDP

                  Test_K9S1208 PROC
;;;167    void Test_K9S1208(void)
;;;168    {
000098  e92d4010          STMFD    sp!,{r4,lr}
;;;169    	int i;
;;;170    	U8 ch;
;;;171    
;;;172    	Uart_Printf("\nK9S1208 Nand flash test start.\n");
00009c  e28f0058          ADR      r0,|L1.252|
0000a0  ebfffffe          BL       Uart_Printf
;;;173    
;;;174    	NF8_Init();
0000a4  ebfffffe          BL       NF8_Init
;;;175    
;;;176    	while(1) {
0000a8  e1a00000          NOP      
                  |L1.172|
0000ac  e1a00000          NOP      
;;;177    		PrintSubMessage();
0000b0  ebfffffe          BL       PrintSubMessage
;;;178    		Uart_Printf("\nSelect(-1 to exit): ");
0000b4  e28f0064          ADR      r0,|L1.288|
0000b8  ebfffffe          BL       Uart_Printf
;;;179    		i = Uart_GetIntNum();
0000bc  ebfffffe          BL       Uart_GetIntNum
0000c0  e1a04000          MOV      r4,r0
;;;180    		
;;;181    		if(i==-1) break;
0000c4  e3740001          CMN      r4,#1
0000c8  1a000000          BNE      |L1.208|
0000cc  ea000008          B        |L1.244|
;;;182    		
;;;183    		if(i>=0 && (i<(sizeof(n8_func)/8)) ) 
                  |L1.208|
0000d0  e3540000          CMP      r4,#0
0000d4  ba000005          BLT      |L1.240|
0000d8  e354000b          CMP      r4,#0xb
0000dc  2a000003          BCS      |L1.240|
;;;184    	    	( (void (*)(void)) (n8_func[i][0]) )();	// execute selected function.
0000e0  e51f107c          LDR      r1,|L1.108|
0000e4  e7910184          LDR      r0,[r1,r4,LSL #3]
0000e8  e1a0e00f          MOV      lr,pc
0000ec  e1a0f000          MOV      pc,r0
;;;185    	}
                  |L1.240|
0000f0  eaffffed          B        |L1.172|
;;;186    
;;;187    }
                  |L1.244|
0000f4  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.248|
0000f8  00007770          DCD      0x00007770
                  |L1.252|
0000fc  53394b0a          DCB      "\nK9S"
000100  38303231          DCB      "1208"
000104  6e614e20          DCB      " Nan"
000108  6c662064          DCB      "d fl"
00010c  20687361          DCB      "ash "
000110  74736574          DCB      "test"
000114  61747320          DCB      " sta"
000118  0a2e7472          DCB      "rt.\n"
00011c  00000000          DCB      "\0\0\0\0"
                  |L1.288|
000120  6c65530a          DCB      "\nSel"
000124  28746365          DCB      "ect("
000128  7420312d          DCB      "-1 t"
00012c  7865206f          DCB      "o ex"
000130  3a297469          DCB      "it):"
000134  00000020          DCB      " \0\0\0"
                          ENDP

                  Test_Nand PROC
;;;133    void Test_Nand(void)
;;;134    {
000138  e92d4038          STMFD    sp!,{r3-r5,lr}
;;;135    	U8 ch;
;;;136    	U32 gpacon;
;;;137    	
;;;138    	Uart_Printf("Nand test\n");
00013c  e28f0070          ADR      r0,|L1.436|
000140  ebfffffe          BL       Uart_Printf
;;;139    
;;;140    	gpacon = rGPACON;
000144  e3a00456          MOV      r0,#0x56000000
000148  e5900000          LDR      r0,[r0,#0]
00014c  e1a05000          MOV      r5,r0
;;;141    
;;;142    	rGPACON = (rGPACON &~(0x3f<<17)) | (0x3f<<17);
000150  e3a00456          MOV      r0,#0x56000000
000154  e5900000          LDR      r0,[r0,#0]
000158  e380087e          ORR      r0,r0,#0x7e0000
00015c  e3a01456          MOV      r1,#0x56000000
000160  e5810000          STR      r0,[r1,#0]
;;;143    	// GPA     22         21           20      19     18     17
;;;144    	//           nFCE   nRSTOUT  nFRE  nFWE   ALE   CLE
;;;145    
;;;146    	Uart_Printf("Select Nand flash type, Normal-8bit(1)/Advanced-8bit(2) : ");
000164  e28f0054          ADR      r0,|L1.448|
000168  ebfffffe          BL       Uart_Printf
;;;147    
;;;148    	ch=Uart_Getch();
00016c  ebfffffe          BL       Uart_Getch
000170  e1a04000          MOV      r4,r0
;;;149    
;;;150    	Uart_Printf("%c\n\n", ch);
000174  e1a01004          MOV      r1,r4
000178  e28f007c          ADR      r0,|L1.508|
00017c  ebfffffe          BL       Uart_Printf
;;;151    	
;;;152    	switch(ch) {
000180  e3540031          CMP      r4,#0x31
000184  0a000002          BEQ      |L1.404|
000188  e3540032          CMP      r4,#0x32
00018c  1a000004          BNE      |L1.420|
000190  ea000001          B        |L1.412|
;;;153    		case '1':
;;;154    			Test_K9S1208();		// in Nand.c
                  |L1.404|
000194  ebfffffe          BL       Test_K9S1208
;;;155    		break;
000198  ea000002          B        |L1.424|
;;;156    		case '2':
;;;157    			Test_K9F1G08();		// in K9K2h16.c
                  |L1.412|
00019c  ebfffffe          BL       Test_K9F1G08
;;;158    		break;
0001a0  ea000000          B        |L1.424|
;;;159    		default:
;;;160    		break;
                  |L1.420|
0001a4  e1a00000          NOP      
;;;161    	}
;;;162    
;;;163    	rGPACON = gpacon;
                  |L1.424|
0001a8  e3a00456          MOV      r0,#0x56000000
0001ac  e5805000          STR      r5,[r0,#0]
;;;164    }
0001b0  e8bd8038          LDMFD    sp!,{r3-r5,pc}
                  |L1.436|
0001b4  646e614e          DCB      "Nand"
0001b8  73657420          DCB      " tes"
0001bc  00000a74          DCB      "t\n\0\0"
                  |L1.448|
0001c0  656c6553          DCB      "Sele"
0001c4  4e207463          DCB      "ct N"
0001c8  20646e61          DCB      "and "
0001cc  73616c66          DCB      "flas"
0001d0  79742068          DCB      "h ty"
0001d4  202c6570          DCB      "pe, "
0001d8  6d726f4e          DCB      "Norm"
0001dc  382d6c61          DCB      "al-8"
0001e0  28746962          DCB      "bit("
0001e4  412f2931          DCB      "1)/A"
0001e8  6e617664          DCB      "dvan"
0001ec  2d646563          DCB      "ced-"
0001f0  74696238          DCB      "8bit"
0001f4  20293228          DCB      "(2) "
0001f8  0000203a          DCB      ": \0\0"
                  |L1.508|
0001fc  0a0a6325          DCB      "%c\n\n"
000200  00000000          DCB      "\0\0\0\0"
                          ENDP

                  Read_Status PROC
;;;189    U8 Read_Status(void)
;;;190    {
000204  e3a0244e          MOV      r2,#0x4e000000
;;;191    	// Read status
;;;192    	U8 ch;
;;;193    	int i;
;;;194    	
;;;195    	NF_nFCE_L();
000208  e5922004          LDR      r2,[r2,#4]
00020c  e3c22002          BIC      r2,r2,#2
000210  e3a0344e          MOV      r3,#0x4e000000
000214  e5832004          STR      r2,[r3,#4]
;;;196    
;;;197    	NF_CMD(0x70);
000218  e3a02070          MOV      r2,#0x70
00021c  e3a0344e          MOV      r3,#0x4e000000
000220  e5832008          STR      r2,[r3,#8]
;;;198    	for(i=0; i<10; i++);
000224  e3a01000          MOV      r1,#0
                  |L1.552|
000228  e351000a          CMP      r1,#0xa
00022c  aa000001          BGE      |L1.568|
000230  e2811001          ADD      r1,r1,#1
000234  eafffffb          B        |L1.552|
;;;199    	ch = NF_RDDATA();
                  |L1.568|
000238  e3a0244e          MOV      r2,#0x4e000000
00023c  e5922010          LDR      r2,[r2,#0x10]
000240  e20200ff          AND      r0,r2,#0xff
;;;200    
;;;201    	NF_nFCE_H();
000244  e3a0244e          MOV      r2,#0x4e000000
000248  e5922004          LDR      r2,[r2,#4]
00024c  e3822002          ORR      r2,r2,#2
000250  e3a0344e          MOV      r3,#0x4e000000
000254  e5832004          STR      r2,[r3,#4]
;;;202    
;;;203    	return ch;

⌨️ 快捷键说明

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