📄 2442loader-1g08.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\2442loader-1G08.err -O2 -asm -cpu ARM920T -fs -DCOREVOLT_M100=130 -DOS_START_ADDR_OFFSET=0x02040000 "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Main PROC
;;;64 void Main(void)
;;;65 {
|L1.0|
000000 e92d40f8 STMFD sp!,{r3-r7,lr}
;;;66 register page, block, blockcopy_count;
;;;67 int i, j;
;;;68
;;;69 MMU_EnableICache();
000004 ebfffffe BL MMU_EnableICache
;;;70
;;;71 // ChangeClockDivider(12,12); // 1:2:4
;;;72 // ChangeClockDivider(13,12); // 1:3:6
;;;73 // ChangeClockDivider(14,12); // 1:4:8
;;;74 // ChangeMPllValue(88, 1, 1); // FCLK=192MHz
;;;75 // ChangeMPllValue(246, 13, 0); // FCLK=203.2MHz
;;;76 // ChangeMPllValue(92, 1, 0); // FCLK=400MHz
;;;77 // ChangeMPllValue(214, 3, 0); // FCLK=532MHz
;;;78
;;;79
;;;80 Port_Init();
000008 ebfffffe BL Port_Init
;;;81
;;;82 Uart_Select(1);
00000c e3a00001 MOV r0,#1
000010 ebfffffe BL Uart_Select
;;;83
;;;84 downPt=(unsigned char *)DOWNLOAD_ADDRESS;
000014 e59f0100 LDR r0,|L1.284|
000018 e59f7100 LDR r7,|L1.288|
00001c e5870004 STR r0,[r7,#4] ; downPt
;;;85
;;;86 // GPA 22 21 20 19 18 17
;;;87 // nFCE nRSTOUT nFRE nFWE ALE CLE
;;;88 rGPACON = (rGPACON &~(0x3f<<17)) | (0x3f<<17);
000020 e3a00456 MOV r0,#0x56000000
000024 e5901000 LDR r1,[r0,#0]
000028 e381187e ORR r1,r1,#0x7e0000
00002c e5801000 STR r1,[r0,#0]
;;;89
;;;90
;;;91 rGPADAT|=(1<<16); //
000030 e5901004 LDR r1,[r0,#4]
000034 e3811b40 ORR r1,r1,#0x10000
000038 e5801004 STR r1,[r0,#4]
;;;92 rGPACON=rGPACON&~(0x1<<16); // nGCS[5] -> OUTPUT
00003c e5901000 LDR r1,[r0,#0]
000040 e3c11b40 BIC r1,r1,#0x10000
000044 e5801000 STR r1,[r0,#0]
;;;93
;;;94 NF1G08_Init();
000048 ebfffffe BL NF1G08_Init
;;;95
;;;96
;;;97
;;;98 Max1718_Set(COREVOLT_M100); // ex)120:1.2V
00004c e3a00082 MOV r0,#0x82
000050 ebfffffe BL Max1718_Set
;;;99
;;;100 Led_Display(1);
000054 e3a00001 MOV r0,#1
000058 ebfffffe BL Led_Display
;;;101
;;;102
;;;103 // To calculation copy time.
;;;104 // Timer4_Start();
;;;105
;;;106 block=0;
00005c e3a05000 MOV r5,#0
;;;107 blockcopy_count=0;
000060 e3a06000 MOV r6,#0
;;;108 while(blockcopy_count<(OS_IMAGE_BLOCK_SIZE)) { // Read OS image
;;;109 block++;
|L1.100|
000064 e2855001 ADD r5,r5,#1
;;;110 if(!NF1G08_IsBadBlock(block)) continue; // Skip bad block
000068 e1a00005 MOV r0,r5
00006c ebfffffe BL NF1G08_IsBadBlock
000070 e3500000 CMP r0,#0
000074 0a000010 BEQ |L1.188|
;;;111 blockcopy_count++;
000078 e2866001 ADD r6,r6,#1
;;;112 for(page=0;page<64;page++) { // Read 32 page
00007c e3a04000 MOV r4,#0
;;;113 if(!NF1G08_ReadPage(block, page, (U8 *)downPt)) { //(U32 block,U32 page,U32 *buffer)
|L1.128|
000080 e1a01004 MOV r1,r4
000084 e1a00005 MOV r0,r5
000088 e5972004 LDR r2,[r7,#4] ; downPt
00008c ebfffffe BL NF1G08_ReadPage
000090 e3500000 CMP r0,#0
000094 1a000002 BNE |L1.164|
;;;114 Led_Display(0x8); // real ECC Error
000098 e3a00008 MOV r0,#8
00009c ebfffffe BL Led_Display
;;;115 while(1);
|L1.160|
0000a0 eafffffe B |L1.160|
;;;116 }
;;;117 downPt += 2048;
|L1.164|
0000a4 e5970004 LDR r0,[r7,#4] ; downPt
0000a8 e2844001 ADD r4,r4,#1 ;112
0000ac e2800e80 ADD r0,r0,#0x800
0000b0 e5870004 STR r0,[r7,#4] ;112 ; downPt
0000b4 e3540040 CMP r4,#0x40 ;112
0000b8 bafffff0 BLT |L1.128| ;112
|L1.188|
0000bc e3560f40 CMP r6,#0x100 ;108
0000c0 baffffe7 BLT |L1.100| ;108
;;;118 }
;;;119 }
;;;120
;;;121 Led_Display(0xf);
0000c4 e3a0000f MOV r0,#0xf
0000c8 ebfffffe BL Led_Display
;;;122
;;;123 // Timer4_Stop();
;;;124
;;;125 // Set_Pre();
;;;126
;;;127 //rCLKCON = (0x0<<16)|(0x6<<12)|(0x9<<8)|(0x2<<4); // for test
;;;128 //Uart_SendString(" Setting CLKCON]\n");
;;;129
;;;130 run();
0000cc e59f0050 LDR r0,|L1.292|
0000d0 e5900000 LDR r0,[r0,#0] ; run
0000d4 e28dd004 ADD sp,sp,#4
0000d8 e8bd40f0 LDMFD sp!,{r4-r7,lr}
0000dc e280f000 ADD pc,r0,#0
;;;131
;;;132 }
ENDP
Timer4_Start PROC
;;;137 void Timer4_Start(void)
;;;138 {
0000e0 e92d4008 STMFD sp!,{r3,lr}
;;;139 Uart_SendString("\n\nNAND Boot Start\n");
0000e4 e28f003c ADR r0,|L1.296|
0000e8 ebfffffe BL Uart_SendString
;;;140
;;;141 rTCFG0=0xff00; // Prescaler 0xff+1(256)
0000ec e3a01cff MOV r1,#0xff00
0000f0 e3a00451 MOV r0,#0x51000000
0000f4 e5801000 STR r1,[r0,#0]
;;;142 rTCFG1=(0x3<<16); //T4=PCLK period*256*16 =
0000f8 e3a01bc0 MOV r1,#0x30000
0000fc e5801004 STR r1,[r0,#4]
;;;143 rTCNTB4=TIMER_IINIT_VAL;
000100 e59f1034 LDR r1,|L1.316|
000104 e580103c STR r1,[r0,#0x3c]
;;;144 rTCON=(1<<22)|(1<<21); //Manual update, to validate TCNTB4 value.
000108 e3a01860 MOV r1,#0x600000
00010c e5801008 STR r1,[r0,#8]
;;;145 rTCON=(1<<22)|(1<<20); //Start T4
000110 e3a01850 MOV r1,#0x500000
000114 e5801008 STR r1,[r0,#8]
;;;146
;;;147 }
000118 e8bd8008 LDMFD sp!,{r3,pc}
|L1.284|
00011c 32040000 DCD 0x32040000
|L1.288|
000120 00000000 DCD ||.bss$2||
|L1.292|
000124 00000000 DCD ||run||
|L1.296|
000128 414e0a0a DCB "\n\nNA"
00012c 4220444e DCB "ND B"
000130 20746f6f DCB "oot "
000134 72617453 DCB "Star"
000138 00000a74 DCB "t\n\0\0"
|L1.316|
00013c 0000ffff DCD 0x0000ffff
ENDP
hex2char PROC
;;;167 char *hex2char(int val)
;;;168 {
000140 e51f1028 LDR r1,|L1.288|
;;;169 static char str[2];
;;;170
;;;171 str[1]='\0';
;;;172 if(val<=9)str[0]='0'+val;
000144 e3500009 CMP r0,#9
;;;173 else str[0]=('a'+val-10);
000148 c2800057 ADDGT r0,r0,#0x57
00014c e3a02000 MOV r2,#0 ;171
000150 e5c12001 STRB r2,[r1,#1] ;171 ; str@hex2char_0
000154 d2800030 ADDLE r0,r0,#0x30 ;172
000158 e5c10000 STRB r0,[r1,#0] ; str@hex2char_0
;;;174
;;;175 return str;
00015c e1a00001 MOV r0,r1
000160 e1a0f00e MOV pc,lr
;;;176 }
ENDP
Timer4_Stop PROC
;;;149 void Timer4_Stop(void)
;;;150 {
000164 e92d4010 STMFD sp!,{r4,lr}
;;;151 int cnt;
;;;152
;;;153 rTCON=(1<<22)|(0<<20); //Stop T4
000168 e3a01840 MOV r1,#0x400000
00016c e3a00451 MOV r0,#0x51000000
000170 e5801008 STR r1,[r0,#8]
;;;154 cnt=TIMER_IINIT_VAL-rTCNTO4; // actual count number
000174 e5900040 LDR r0,[r0,#0x40]
000178 e26040ff RSB r4,r0,#0xff
00017c e2444f40 SUB r4,r4,#0x100
;;;155
;;;156 Uart_SendString("NAND Boot End\n");
000180 e28f0050 ADR r0,|L1.472|
000184 ebfffffe BL Uart_SendString
;;;157 Uart_SendString("Boot time=nTCNT*82uS. nTCNT=0x");
000188 e28f0058 ADR r0,|L1.488|
00018c ebfffffe BL Uart_SendString
;;;158 Uart_SendString(hex2char((cnt&0xf000)>>12));
000190 e1a00804 MOV r0,r4,LSL #16
000194 e1a00e20 MOV r0,r0,LSR #28
000198 ebfffffe BL hex2char
00019c ebfffffe BL Uart_SendString
;;;159 Uart_SendString(hex2char((cnt&0x0f00)>>8));
0001a0 e1a00a04 MOV r0,r4,LSL #20
0001a4 e1a00e20 MOV r0,r0,LSR #28
0001a8 ebfffffe BL hex2char
0001ac ebfffffe BL Uart_SendString
;;;160 Uart_SendString(hex2char((cnt&0x00f0)>>4));
0001b0 e1a00c04 MOV r0,r4,LSL #24
0001b4 e1a00e20 MOV r0,r0,LSR #28
0001b8 ebfffffe BL hex2char
0001bc ebfffffe BL Uart_SendString
;;;161 Uart_SendString(hex2char((cnt&0x000f)>>0));
0001c0 e204000f AND r0,r4,#0xf
0001c4 ebfffffe BL hex2char
0001c8 ebfffffe BL Uart_SendString
;;;162 Uart_SendString(". \n");
0001cc e28f0034 ADR r0,|L1.520|
0001d0 e8bd4010 LDMFD sp!,{r4,lr}
0001d4 eafffffe B Uart_SendString
|L1.472|
0001d8 444e414e DCB "NAND"
0001dc 6f6f4220 DCB " Boo"
0001e0 6e452074 DCB "t En"
0001e4 00000a64 DCB "d\n\0\0"
|L1.488|
0001e8 746f6f42 DCB "Boot"
0001ec 6d697420 DCB " tim"
0001f0 546e3d65 DCB "e=nT"
0001f4 2a544e43 DCB "CNT*"
0001f8 53753238 DCB "82uS"
0001fc 546e202e DCB ". nT"
000200 3d544e43 DCB "CNT="
000204 00007830 DCB "0x\0\0"
|L1.520|
000208 000a202e DCB ". \n\0"
;;;163
;;;164 }
ENDP
Set_Pre PROC
;;;178 void Set_Pre(void)
;;;179 {
00020c e92d4038 STMFD sp!,{r3-r5,lr}
;;;180
;;;181 int i;
;;;182
;;;183 i = rGPDCON;
000210 e3a04456 MOV r4,#0x56000000
000214 e5945030 LDR r5,[r4,#0x30]
;;;184
;;;185 rGPDCON = (rGPFCON & ~(3<<4)) | (0<<4);
000218 e5940050 LDR r0,[r4,#0x50]
00021c e3c00030 BIC r0,r0,#0x30
000220 e5840030 STR r0,[r4,#0x30]
;;;186 if((rGPFDAT&(1<<2))==0) { // If EINT2 key is pressed.
000224 e5940054 LDR r0,[r4,#0x54]
000228 e3100004 TST r0,#4
00022c 1a000005 BNE |L1.584|
;;;187 Uart_SendString("I/O Strength Min\n");
000230 e28f002c ADR r0,|L1.612|
000234 ebfffffe BL Uart_SendString
;;;188 // Set I/O strength control.
;;;189 rDSC0 = (0<<31)|(3<<8)|(3<<0);
000238 e59f0038 LDR r0,|L1.632|
00023c e58400c4 STR r0,[r4,#0xc4]
;;;190 // nEN_DSC [31] : 0:I/O drive strength enable, 1:Disable
;;;191 // DSC_ADR [9:8] : Addr drive strength, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;192 // DSC_DATA [7:0] : DATA drive strength, 0:12mA, 1:10mA, 2:8mA, 3:6mA
;;;193
;;;194 rDSC1 = (3<<28)|(3<<26)|(0xffffff<<0);
000240 e3e004c3 MVN r0,#0xc3000000
000244 ea000003 B |L1.600|
;;;195 // DSC_SCK1 [29:28] : SCLK1, 0:16mA, 1:12mA, 2:8mA, 3:6mA
;;;196 // DSC_SCK0 [27:26] : SCLK0, 0:16mA, 1:12mA, 2:8mA, 3:6mA
;;;197 // DSC_SCKE [25:24] : SCLKE, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;198 // DSC_SDR [23:22] : nRAS/nCAS, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;199 // DSC_NFC [21:20] : Nand flash(nFCE,nFRE,nFWE,CLE,ALE), 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;200 // DSC_BE [19:18] : nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;201 // DSC_WOE [17:16] : nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;202 // DSC_CS7 [15:14] : nGCS7, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;203 // DSC_CS6 [13:12] : nGCS6, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;204 // DSC_CS5 [11:10] : nGCS5, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;205 // DSC_CS4 [9:8] : nGCS4, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;206 // DSC_CS3 [7:6] : nGCS3, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;207 // DSC_CS2 [5:4] : nGCS2, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;208 // DSC_CS1 [3:2] : nGCS1, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;209 // DSC_CS0 [1:0] : nGCS0, 0:10mA, 1:8mA, 2:6mA, 3:4mA
;;;210 } else {
;;;211
;;;212 Uart_SendString("I/O Strength Max\n");
|L1.584|
000248 e28f002c ADR r0,|L1.636|
00024c ebfffffe BL Uart_SendString
;;;213 // Set I/O strength control.
;;;214 rDSC0 = (0<<31)|(0<<8)|(0<<0);
000250 e3a00000 MOV r0,#0
000254 e58400c4 STR r0,[r4,#0xc4]
;;;215 rDSC1 = (0<<28)|(0<<26)|(0x000000<<0);
|L1.600|
000258 e58400c8 STR r0,[r4,#0xc8]
;;;216 }
;;;217 rGPDCON = i;
00025c e5845030 STR r5,[r4,#0x30]
;;;218 }
000260 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.612|
000264 204f2f49 DCB "I/O "
000268 65727453 DCB "Stre"
00026c 6874676e DCB "ngth"
000270 6e694d20 DCB " Min"
000274 0000000a DCB "\n\0\0\0"
|L1.632|
000278 00000303 DCD 0x00000303
|L1.636|
00027c 204f2f49 DCB "I/O "
000280 65727453 DCB "Stre"
000284 6874676e DCB "ngth"
000288 78614d20 DCB " Max"
00028c 0000000a DCB "\n\0\0\0"
ENDP
AREA ||.data||, DATA, ALIGN=2
||.data$0||
||run||
DCD 0x32040000
AREA ||.bss||, NOINIT, ALIGN=2
||str@hex2char_0||
||.bss$2||
% 4
downPt
% 4
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -