📄 2442lib.txt
字号:
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 + -