📄 k9f1g08.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\K9F1G08.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
NF1G08_Init PROC
;;;999 static void NF1G08_Init(void)
;;;1000 {
|L1.0|
000000 e59f0074 LDR r0,|L1.124|
;;;1001 // for S3C2442
;;;1002
;;;1003 rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0);
000004 e3a0144e MOV r1,#0x4e000000
000008 e5810000 STR r0,[r1,#0]
;;;1004 // TACLS [14:12] CLE&ALE duration = HCLK*TACLS.
;;;1005 // TWRPH0 [10:8] TWRPH0 duration = HCLK*(TWRPH0+1)
;;;1006 // TWRPH1 [6:4] TWRPH1 duration = HCLK*(TWRPH1+1)
;;;1007 // AdvFlash(R) [3] Advanced NAND, 0:256/512, 1:1024/2048
;;;1008 // PageSize(R) [2] NAND memory page size
;;;1009 // when [3]==0, 0:256, 1:512 bytes/page.
;;;1010 // when [3]==1, 0:1024, 1:2048 bytes/page.
;;;1011 // AddrCycle(R) [1] NAND flash addr size
;;;1012 // when [3]==0, 0:3-addr, 1:4-addr.
;;;1013 // when [3]==1, 0:4-addr, 1:5-addr.
;;;1014 // BusWidth(R/W) [0] NAND bus width. 0:8-bit, 1:16-bit.
;;;1015
;;;1016 rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
00000c e3a00073 MOV r0,#0x73
000010 e3a0144e MOV r1,#0x4e000000
000014 e5810004 STR r0,[r1,#4]
;;;1017 // Lock-tight [13] 0:Disable lock, 1:Enable lock.
;;;1018 // Soft Lock [12] 0:Disable lock, 1:Enable lock.
;;;1019 // EnablillegalAcINT[10] Illegal access interupt control. 0:Disable, 1:Enable
;;;1020 // EnbRnBINT [9] RnB interrupt. 0:Disable, 1:Enable
;;;1021 // RnB_TrandMode[8] RnB transition detection config. 0:Low to High, 1:High to Low
;;;1022 // SpareECCLock [6] 0:Unlock, 1:Lock
;;;1023 // MainECCLock [5] 0:Unlock, 1:Lock
;;;1024 // InitECC(W) [4] 1:Init ECC decoder/encoder.
;;;1025 // Reg_nCE [1] 0:nFCE=0, 1:nFCE=1.
;;;1026 // NANDC Enable [0] operating mode. 0:Disable, 1:Enable.
;;;1027
;;;1028 // rNFSTAT = 0;
;;;1029
;;;1030 // Nand_Reset();
;;;1031 }
000018 e1a0f00e MOV pc,lr
ENDP
Test_K9F1G08 PROC
;;;156 void Test_K9F1G08(void)
;;;157 {
00001c e92d4010 STMFD sp!,{r4,lr}
;;;158 int i;
;;;159 U8 ch;
;;;160
;;;161 Uart_Printf("\nK9F1G08 Nand flash test start.\n");
000020 e28f0058 ADR r0,|L1.128|
000024 ebfffffe BL Uart_Printf
;;;162
;;;163 NF1G08_Init();
000028 ebfffffe BL NF1G08_Init
;;;164
;;;165 while(1) {
00002c e1a00000 NOP
|L1.48|
000030 e1a00000 NOP
;;;166 PrintSubMessage();
000034 ebfffffe BL PrintSubMessage
;;;167 Uart_Printf("\nSelect(-1 to exit): ");
000038 e28f0064 ADR r0,|L1.164|
00003c ebfffffe BL Uart_Printf
;;;168 i = Uart_GetIntNum();
000040 ebfffffe BL Uart_GetIntNum
000044 e1a04000 MOV r4,r0
;;;169
;;;170 if(i==-1) break;
000048 e3740001 CMN r4,#1
00004c 1a000000 BNE |L1.84|
000050 ea000008 B |L1.120|
;;;171
;;;172 if(i>=0 && (i<(sizeof(n1G08_func)/8)) )
|L1.84|
000054 e3540000 CMP r4,#0
000058 ba000005 BLT |L1.116|
00005c e354000b CMP r4,#0xb
000060 2a000003 BCS |L1.116|
;;;173 ( (void (*)(void)) (n1G08_func[i][0]) )(); // execute selected function.
000064 e59f1050 LDR r1,|L1.188|
000068 e7910184 LDR r0,[r1,r4,LSL #3]
00006c e1a0e00f MOV lr,pc
000070 e1a0f000 MOV pc,r0
;;;174 }
|L1.116|
000074 eaffffed B |L1.48|
;;;175
;;;176 }
|L1.120|
000078 e8bd8010 LDMFD sp!,{r4,pc}
|L1.124|
00007c 00007770 DCD 0x00007770
|L1.128|
000080 46394b0a DCB "\nK9F"
000084 38304731 DCB "1G08"
000088 6e614e20 DCB " Nan"
00008c 6c662064 DCB "d fl"
000090 20687361 DCB "ash "
000094 74736574 DCB "test"
000098 61747320 DCB " sta"
00009c 0a2e7472 DCB "rt.\n"
0000a0 00000000 DCB "\0\0\0\0"
|L1.164|
0000a4 6c65530a DCB "\nSel"
0000a8 28746365 DCB "ect("
0000ac 7420312d DCB "-1 t"
0000b0 7865206f DCB "o ex"
0000b4 3a297469 DCB "it):"
0000b8 00000020 DCB " \0\0\0"
|L1.188|
0000bc 00000000 DCD n1G08_func
ENDP
NF1G08_CheckId PROC
;;;964 static U16 NF1G08_CheckId(void)
;;;965 {
0000c0 e92d4038 STMFD sp!,{r3-r5,lr}
;;;966 int i;
;;;967 U16 id, id4th;
;;;968
;;;969
;;;970 NF_nFCE_L();
0000c4 e3a0044e MOV r0,#0x4e000000
0000c8 e5900004 LDR r0,[r0,#4]
0000cc e3c00002 BIC r0,r0,#2
0000d0 e3a0144e MOV r1,#0x4e000000
0000d4 e5810004 STR r0,[r1,#4]
;;;971 NF_CMD(0x90);
0000d8 e3a00090 MOV r0,#0x90
0000dc e3a0144e MOV r1,#0x4e000000
0000e0 e5810008 STR r0,[r1,#8]
;;;972 NF_ADDR(0x0);
0000e4 e3a00000 MOV r0,#0
0000e8 e3a0144e MOV r1,#0x4e000000
0000ec e581000c STR r0,[r1,#0xc]
;;;973 for (i=0; i<10; i++);
0000f0 e3a05000 MOV r5,#0
|L1.244|
0000f4 e355000a CMP r5,#0xa
0000f8 aa000001 BGE |L1.260|
0000fc e2855001 ADD r5,r5,#1
000100 eafffffb B |L1.244|
;;;974 Uart_Printf("NFSTAT: 0x%x\n", rNFSTAT);
|L1.260|
000104 e3a0044e MOV r0,#0x4e000000
000108 e5900020 LDR r0,[r0,#0x20]
00010c e1a01000 MOV r1,r0
000110 e28f0034 ADR r0,|L1.332|
000114 ebfffffe BL Uart_Printf
;;;975 id=NF_RDDATA8()<<8; // Maker code 0xec
000118 e3a0044e MOV r0,#0x4e000000
00011c e5d00010 LDRB r0,[r0,#0x10]
000120 e1a04400 MOV r4,r0,LSL #8
;;;976 id|=NF_RDDATA8(); // Devide code(K9S1208V:0x76), (K9K2G16U0M:0xca)
000124 e3a0044e MOV r0,#0x4e000000
000128 e5d00010 LDRB r0,[r0,#0x10]
00012c e1804004 ORR r4,r0,r4
;;;977
;;;978 NF_nFCE_H();
000130 e3a0044e MOV r0,#0x4e000000
000134 e5900004 LDR r0,[r0,#4]
000138 e3800002 ORR r0,r0,#2
00013c e3a0144e MOV r1,#0x4e000000
000140 e5810004 STR r0,[r1,#4]
;;;979
;;;980 return id;
000144 e1a00004 MOV r0,r4
;;;981 }
000148 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.332|
00014c 5453464e DCB "NFST"
000150 203a5441 DCB "AT: "
000154 78257830 DCB "0x%x"
000158 0000000a DCB "\n\0\0\0"
ENDP
NF1G08_Print_Id PROC
;;;197 void NF1G08_Print_Id(void)
;;;198 {
00015c e92d4070 STMFD sp!,{r4-r6,lr}
;;;199 U16 id;
;;;200 U8 maker, device;
;;;201
;;;202 // NF1G08_Init();
;;;203 id = NF1G08_CheckId();
000160 ebfffffe BL NF1G08_CheckId
000164 e1a04000 MOV r4,r0
;;;204
;;;205 device = (U8)id;
000168 e20460ff AND r6,r4,#0xff
;;;206 maker = (U8)(id>>8);
00016c e1a05424 MOV r5,r4,LSR #8
;;;207
;;;208 Uart_Printf("Maker:%x, Device:%x\n", maker, device);
000170 e1a02006 MOV r2,r6
000174 e1a01005 MOV r1,r5
000178 e28f0004 ADR r0,|L1.388|
00017c ebfffffe BL Uart_Printf
;;;209 }
000180 e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.388|
000184 656b614d DCB "Make"
000188 78253a72 DCB "r:%x"
00018c 6544202c DCB ", De"
000190 65636976 DCB "vice"
000194 0a78253a DCB ":%x\n"
000198 00000000 DCB "\0\0\0\0"
ENDP
NFCon_Int_1G08 PROC
;;;623 void __irq NFCon_Int_1G08(void)
;;;624 {
00019c e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;625 NFConDone_1G08=1;
0001a0 e3a00001 MOV r0,#1
0001a4 e59f1054 LDR r1,|L1.512|
0001a8 e5810000 STR r0,[r1,#0] ; NFConDone_1G08
;;;626 rINTMSK|=BIT_NFCON;
0001ac e3a0044a MOV r0,#0x4a000000
0001b0 e5900008 LDR r0,[r0,#8]
0001b4 e3800740 ORR r0,r0,#0x1000000
0001b8 e3a0144a MOV r1,#0x4a000000
0001bc e5810008 STR r0,[r1,#8]
;;;627 ClearPending(BIT_NFCON);
0001c0 e3a00740 MOV r0,#0x1000000
0001c4 e3a0144a MOV r1,#0x4a000000
0001c8 e5810000 STR r0,[r1,#0]
0001cc e3a00740 MOV r0,#0x1000000
0001d0 e3a0144a MOV r1,#0x4a000000
0001d4 e5810010 STR r0,[r1,#0x10]
0001d8 e3a0044a MOV r0,#0x4a000000
0001dc e5900010 LDR r0,[r0,#0x10]
;;;628 if(rNFSTAT&0x8) Uart_Printf("Illegal Access is detected!!!\n");
0001e0 e3a0044e MOV r0,#0x4e000000
0001e4 e5900020 LDR r0,[r0,#0x20]
0001e8 e3100008 TST r0,#8
0001ec 0a000001 BEQ |L1.504|
0001f0 e28f000c ADR r0,|L1.516|
0001f4 ebfffffe BL Uart_Printf
;;;629 // else Uart_Printf("RnB is Detected!!!\n");
;;;630 }
|L1.504|
0001f8 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
0001fc e25ef004 SUBS pc,lr,#4
|L1.512|
000200 00000040 DCD ||.bss$2|| + 64
|L1.516|
000204 656c6c49 DCB "Ille"
000208 206c6167 DCB "gal "
00020c 65636341 DCB "Acce"
000210 69207373 DCB "ss i"
000214 65642073 DCB "s de"
000218 74636574 DCB "tect"
00021c 21216465 DCB "ed!!"
000220 00000a21 DCB "!\n\0\0"
ENDP
NF1G08_EraseBlock PROC
;;;572 static int NF1G08_EraseBlock(U32 block)
;;;573 {
000224 e92d4038 STMFD sp!,{r3-r5,lr}
000228 e1a04000 MOV r4,r0
;;;574 U32 blockPage=(block<<6);
00022c e1a05304 MOV r5,r4,LSL #6
;;;575 int i;
;;;576
;;;577 NFConDone_1G08=0;
000230 e3a00000 MOV r0,#0
000234 e51f103c LDR r1,|L1.512|
000238 e5810000 STR r0,[r1,#0] ; NFConDone_1G08
;;;578 rNFCONT|=(1<<9);
00023c e3a0044e MOV r0,#0x4e000000
000240 e5900004 LDR r0,[r0,#4]
000244 e3800f80 ORR r0,r0,#0x200
000248 e3a0144e MOV r1,#0x4e000000
00024c e5810004 STR r0,[r1,#4]
;;;579 rNFCONT|=(1<<10);
000250 e3a0044e MOV r0,#0x4e000000
000254 e5900004 LDR r0,[r0,#4]
000258 e3800e40 ORR r0,r0,#0x400
00025c e3a0144e MOV r1,#0x4e000000
000260 e5810004 STR r0,[r1,#4]
;;;580 pISR_NFCON= (unsigned)NFCon_Int_1G08;
000264 e59f012c LDR r0,|L1.920|
000268 e59f112c LDR r1,|L1.924|
00026c e5810f80 STR r0,[r1,#0xf80]
;;;581 rSRCPND=BIT_NFCON;
000270 e3a00740 MOV r0,#0x1000000
000274 e3a0144a MOV r1,#0x4a000000
000278 e5810000 STR r0,[r1,#0]
;;;582 rINTMSK=~(BIT_NFCON);
00027c e3e00740 MVN r0,#0x1000000
000280 e3a0144a MOV r1,#0x4a000000
000284 e5810008 STR r0,[r1,#8]
;;;583
;;;584 #if BAD_CHECK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -