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

📄 2442lib.txt

📁 S3C2442的起动代码程序等。有较大的实用价值
💻 TXT
📖 第 1 页 / 共 3 页
字号:
00010c  e3500064          CMP      r0,#0x64
000110  bafffffc          BLT      |L1.264|
000114  e49df004          LDR      pc,[sp],#4
;;;202    }
                          ENDP

                  Uart_Select PROC
;;;205    void Uart_Select(int ch)
;;;206    {
000118  e59f12f0          LDR      r1,|L1.1040|
;;;207        whichUart = ch;
00011c  e5810000          STR      r0,[r1,#0]  ; whichUart
;;;208    }
000120  e1a0f00e          MOV      pc,lr
                          ENDP

                  Uart_SendByte PROC
;;;273    void Uart_SendByte(int data)
;;;274    {
000124  e59f12e4          LDR      r1,|L1.1040|
000128  e52de004          STR      lr,[sp,#-4]!
;;;275        if(whichUart==0)
00012c  e5913000          LDR      r3,[r1,#0]  ; whichUart
000130  e20010ff          AND      r1,r0,#0xff
000134  e3a0200d          MOV      r2,#0xd
000138  e3530000          CMP      r3,#0
00013c  1a00000c          BNE      |L1.372|
000140  e3a03450          MOV      r3,#0x50000000
;;;276        {
;;;277            if(data=='\n')
000144  e350000a          CMP      r0,#0xa
000148  1a000005          BNE      |L1.356|
;;;278            {
;;;279                while(!(rUTRSTAT0 & 0x2));
                  |L1.332|
00014c  e5930010          LDR      r0,[r3,#0x10]
000150  e3100002          TST      r0,#2
000154  0afffffc          BEQ      |L1.332|
;;;280                Delay(10);                 //because the slow response of hyper_terminal 
000158  e3a0000a          MOV      r0,#0xa
00015c  ebfffffe          BL       Delay
;;;281                WrUTXH0('\r');
000160  e5c32020          STRB     r2,[r3,#0x20]
;;;282            }
;;;283            while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
                  |L1.356|
000164  e5930010          LDR      r0,[r3,#0x10]
000168  e3100002          TST      r0,#2
00016c  0afffffc          BEQ      |L1.356|
000170  ea00001c          B        |L1.488|
;;;284            Delay(10);
;;;285            WrUTXH0(data);
;;;286        }
;;;287        else if(whichUart==1)
                  |L1.372|
000174  e3530001          CMP      r3,#1
000178  1a00000c          BNE      |L1.432|
00017c  e59f3290          LDR      r3,|L1.1044|
;;;288        {
;;;289            if(data=='\n')
000180  e350000a          CMP      r0,#0xa
000184  1a000005          BNE      |L1.416|
;;;290            {
;;;291                while(!(rUTRSTAT1 & 0x2));
                  |L1.392|
000188  e5930010          LDR      r0,[r3,#0x10]
00018c  e3100002          TST      r0,#2
000190  0afffffc          BEQ      |L1.392|
;;;292                Delay(10);                 //because the slow response of hyper_terminal 
000194  e3a0000a          MOV      r0,#0xa
000198  ebfffffe          BL       Delay
;;;293                rUTXH1 = '\r';
00019c  e5c32020          STRB     r2,[r3,#0x20]
;;;294            }
;;;295            while(!(rUTRSTAT1 & 0x2));   //Wait until THR is empty.
                  |L1.416|
0001a0  e5930010          LDR      r0,[r3,#0x10]
0001a4  e3100002          TST      r0,#2
0001a8  0afffffc          BEQ      |L1.416|
0001ac  ea00000d          B        |L1.488|
;;;296            Delay(10);
;;;297            rUTXH1 = data;
;;;298        }   
;;;299        else if(whichUart==2)
                  |L1.432|
0001b0  e3530002          CMP      r3,#2
0001b4  149df004          LDRNE    pc,[sp],#4
;;;300        {
;;;301            if(data=='\n')
0001b8  e350000a          CMP      r0,#0xa
0001bc  e59f3254          LDR      r3,|L1.1048|          ;299
0001c0  1a000005          BNE      |L1.476|
;;;302            {
;;;303                while(!(rUTRSTAT2 & 0x2));
                  |L1.452|
0001c4  e5930010          LDR      r0,[r3,#0x10]
0001c8  e3100002          TST      r0,#2
0001cc  0afffffc          BEQ      |L1.452|
;;;304                Delay(10);                 //because the slow response of hyper_terminal 
0001d0  e3a0000a          MOV      r0,#0xa
0001d4  ebfffffe          BL       Delay
;;;305                rUTXH2 = '\r';
0001d8  e5c32020          STRB     r2,[r3,#0x20]
;;;306            }
;;;307            while(!(rUTRSTAT2 & 0x2));   //Wait until THR is empty.
                  |L1.476|
0001dc  e5930010          LDR      r0,[r3,#0x10]
0001e0  e3100002          TST      r0,#2
0001e4  0afffffc          BEQ      |L1.476|
;;;308            Delay(10);
                  |L1.488|
0001e8  e3a0000a          MOV      r0,#0xa
0001ec  ebfffffe          BL       Delay
;;;309            rUTXH2 = data;
0001f0  e5c31020          STRB     r1,[r3,#0x20]
0001f4  e49df004          LDR      pc,[sp],#4
;;;310        }       
;;;311    }               
                          ENDP

                  Uart_SendString PROC
;;;314    void Uart_SendString(char *pt)
;;;315    {
0001f8  e92d4010          STMFD    sp!,{r4,lr}
0001fc  e1a04000          MOV      r4,r0
000200  ea000001          B        |L1.524|
;;;316        while(*pt)
;;;317            Uart_SendByte(*pt++);
                  |L1.516|
000204  e2844001          ADD      r4,r4,#1
000208  ebfffffe          BL       Uart_SendByte
                  |L1.524|
00020c  e5d40000          LDRB     r0,[r4,#0]            ;316
000210  e3500000          CMP      r0,#0                 ;316
000214  1afffffa          BNE      |L1.516|              ;316
000218  e8bd8010          LDMFD    sp!,{r4,pc}           ;316
;;;318    }
                          ENDP

                  Led_Display PROC
;;;424    void Led_Display(int data)
;;;425    {
00021c  e3a03456          MOV      r3,#0x56000000
;;;426              //Active is low.(LED On)
;;;427              // GPF7  GPF6   GPF5   GPF4
;;;428              //nLED_8 nLED4 nLED_2 nLED_1
;;;429    //    rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4);
;;;430        rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);    
000220  e5931054          LDR      r1,[r3,#0x54]
000224  e3a0200f          MOV      r2,#0xf
000228  e1c20000          BIC      r0,r2,r0
00022c  e3c110f0          BIC      r1,r1,#0xf0
000230  e1810200          ORR      r0,r1,r0,LSL #4
000234  e5830054          STR      r0,[r3,#0x54]
;;;431    }
000238  e1a0f00e          MOV      pc,lr
                          ENDP

                  Timer_Start PROC
;;;435    void Timer_Start(int divider)  //0:16us,1:32us 2:64us 3:128us
;;;436    {
00023c  e3a01dc0          MOV      r1,#0x3000
;;;437        rWTCON = ((PreScaler )<<8)|(divider<<3);  //Watch-dog timer control register
000240  e1811180          ORR      r1,r1,r0,LSL #3
000244  e3a00453          MOV      r0,#0x53000000
000248  e5801000          STR      r1,[r0,#0]
;;;438        rWTDAT = 0xffff;  //Watch-dog timer data register
00024c  e59f11c8          LDR      r1,|L1.1052|
000250  e5801004          STR      r1,[r0,#4]
;;;439        rWTCNT = 0xffff;  //Watch-dog count register
000254  e5801008          STR      r1,[r0,#8]
;;;440    
;;;441          // Watch-dog timer enable & interrupt  disable
;;;442        rWTCON = (rWTCON & ~(1<<5) & ~(1<<2)) |(1<<5);
000258  e5901000          LDR      r1,[r0,#0]
00025c  e3c11024          BIC      r1,r1,#0x24
000260  e3811020          ORR      r1,r1,#0x20
000264  e5801000          STR      r1,[r0,#0]
;;;443    }
000268  e1a0f00e          MOV      pc,lr
                          ENDP

                  Timer_Stop PROC
;;;446    int Timer_Stop(void)
;;;447    {
00026c  e3a01dc0          MOV      r1,#0x3000
;;;448        rWTCON = ((PreScaler )<<8);
000270  e3a00453          MOV      r0,#0x53000000
000274  e5801000          STR      r1,[r0,#0]
;;;449        return (0xffff - rWTCNT);
000278  e5900008          LDR      r0,[r0,#8]
00027c  e26000ff          RSB      r0,r0,#0xff
000280  e2800cff          ADD      r0,r0,#0xff00
000284  e1a0f00e          MOV      pc,lr
;;;450    }
                          ENDP

                  ChangeMPllValue PROC
;;;454    void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
;;;455    {
000288  e1a00600          MOV      r0,r0,LSL #12
;;;456        rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
00028c  e1800201          ORR      r0,r0,r1,LSL #4
000290  e1800002          ORR      r0,r0,r2
000294  e3a0144c          MOV      r1,#0x4c000000
000298  e5810004          STR      r0,[r1,#4]
;;;457    }
00029c  e1a0f00e          MOV      pc,lr
                          ENDP

                  ChangeClockDivider PROC
;;;479    void ChangeClockDivider(int hdivn_val,int pdivn_val)
;;;480    {
0002a0  e3a02002          MOV      r2,#2
;;;481    	int hdivn=2, pdivn=0;
;;;482    	
;;;483         // hdivn_val (FCLK:HCLK)ratio hdivn
;;;484         // 11           1:1       (0)
;;;485         // 12           1:2       (1)
;;;486         // 13           1:3       (3) 
;;;487         // 14           1:4       (2)
;;;488         // pdivn_val (HCLK:PCLK)ratio pdivn
;;;489         // 11           1:1       (0)
;;;490         // 12           1:2       (1)
;;;491    	switch(hdivn_val) {
0002a4  e350000b          CMP      r0,#0xb
;;;492    		case 11: hdivn=0; break;
0002a8  03a02000          MOVEQ    r2,#0
0002ac  e3a03000          MOV      r3,#0                 ;481
0002b0  0a000004          BEQ      |L1.712|
0002b4  e350000c          CMP      r0,#0xc               ;491
;;;493    		case 12: hdivn=1; break;
0002b8  03a02001          MOVEQ    r2,#1
0002bc  0a000001          BEQ      |L1.712|
0002c0  e350000d          CMP      r0,#0xd               ;491
;;;494    		case 13: hdivn=3; break;
0002c4  03a02003          MOVEQ    r2,#3
;;;495    		case 14: hdivn=2; break;
;;;496    	}
;;;497    	
;;;498    	switch(pdivn_val) {
                  |L1.712|
0002c8  e351000b          CMP      r1,#0xb
0002cc  0a000001          BEQ      |L1.728|
0002d0  e351000c          CMP      r1,#0xc
;;;499    		case 11: pdivn=0; break;
;;;500    		case 12: pdivn=1; break;
0002d4  03a03001          MOVEQ    r3,#1
;;;501    	}
;;;502    	

⌨️ 快捷键说明

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