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

📄 2442loader-1g08.txt

📁 S3C2442的起动代码程序等。有较大的实用价值
💻 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 + -