📄 2442lib.txt
字号:
0007b4 e1560004 CMP r6,r4
0007b8 aa000006 BGE |L1.2008|
;;;282 {
;;;283 Uart_Printf("\b \b");
0007bc e28f002c ADR r0,|L1.2032|
0007c0 ebfffffe BL Uart_Printf
;;;284 string--;
0007c4 e2444001 SUB r4,r4,#1
0007c8 ea000002 B |L1.2008|
;;;285 }
;;;286 }
;;;287 else
;;;288 {
;;;289 *string++ = c;
|L1.1996|
0007cc e4c45001 STRB r5,[r4],#1
;;;290 Uart_SendByte(c);
0007d0 e1a00005 MOV r0,r5
0007d4 ebfffffe BL Uart_SendByte
;;;291 }
;;;292 }
|L1.2008|
0007d8 eaffffef B |L1.1948|
;;;293 *string='\0';
|L1.2012|
0007dc e3a00000 MOV r0,#0
0007e0 e5c40000 STRB r0,[r4,#0]
;;;294 Uart_SendByte('\n');
0007e4 e3a0000a MOV r0,#0xa
0007e8 ebfffffe BL Uart_SendByte
;;;295 }
0007ec e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.2032|
0007f0 00082008 DCB "\b \b\0"
ENDP
Uart_GetIntNum PROC
;;;298 int Uart_GetIntNum(void)
;;;299 {
0007f4 e92d43f0 STMFD sp!,{r4-r9,lr}
0007f8 e24dd024 SUB sp,sp,#0x24
;;;300 char str[30];
;;;301 char *string = str;
0007fc e28d4004 ADD r4,sp,#4
;;;302 int base = 10;
000800 e3a0800a MOV r8,#0xa
;;;303 int minus = 0;
000804 e3a09000 MOV r9,#0
;;;304 int result = 0;
000808 e3a05000 MOV r5,#0
;;;305 int lastIndex;
;;;306 int i;
;;;307
;;;308 Uart_GetString(string);
00080c e1a00004 MOV r0,r4
000810 ebfffffe BL Uart_GetString
;;;309
;;;310 if(string[0]=='-')
000814 e5d40000 LDRB r0,[r4,#0]
000818 e350002d CMP r0,#0x2d
00081c 1a000001 BNE |L1.2088|
;;;311 {
;;;312 minus = 1;
000820 e3a09001 MOV r9,#1
;;;313 string++;
000824 e2844001 ADD r4,r4,#1
;;;314 }
;;;315
;;;316 if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
|L1.2088|
000828 e5d40000 LDRB r0,[r4,#0]
00082c e3500030 CMP r0,#0x30
000830 1a000007 BNE |L1.2132|
000834 e5d40001 LDRB r0,[r4,#1]
000838 e3500078 CMP r0,#0x78
00083c 0a000002 BEQ |L1.2124|
000840 e5d40001 LDRB r0,[r4,#1]
000844 e3500058 CMP r0,#0x58
000848 1a000001 BNE |L1.2132|
;;;317 {
;;;318 base = 16;
|L1.2124|
00084c e3a08010 MOV r8,#0x10
;;;319 string += 2;
000850 e2844002 ADD r4,r4,#2
;;;320 }
;;;321
;;;322 lastIndex = strlen(string) - 1;
|L1.2132|
000854 e1a00004 MOV r0,r4
000858 ebfffffe BL strlen
00085c e2407001 SUB r7,r0,#1
;;;323
;;;324 if(lastIndex<0)
000860 e3570000 CMP r7,#0
000864 aa000002 BGE |L1.2164|
;;;325 return -1;
000868 e3e00000 MVN r0,#0
|L1.2156|
00086c e28dd024 ADD sp,sp,#0x24
;;;326
;;;327 if(string[lastIndex]=='h' || string[lastIndex]=='H' )
;;;328 {
;;;329 base = 16;
;;;330 string[lastIndex] = 0;
;;;331 lastIndex--;
;;;332 }
;;;333
;;;334 if(base==10)
;;;335 {
;;;336 result = atoi(string);
;;;337 result = minus ? (-1*result):result;
;;;338 }
;;;339 else
;;;340 {
;;;341 for(i=0;i<=lastIndex;i++)
;;;342 {
;;;343 if(isalpha(string[i]))
;;;344 {
;;;345 if(isupper(string[i]))
;;;346 result = (result<<4) + string[i] - 'A' + 10;
;;;347 else
;;;348 result = (result<<4) + string[i] - 'a' + 10;
;;;349 }
;;;350 else
;;;351 result = (result<<4) + string[i] - '0';
;;;352 }
;;;353 result = minus ? (-1*result):result;
;;;354 }
;;;355 return result;
;;;356 }
000870 e8bd83f0 LDMFD sp!,{r4-r9,pc}
|L1.2164|
000874 e7d40007 LDRB r0,[r4,r7] ;327
000878 e3500068 CMP r0,#0x68 ;327
00087c 0a000002 BEQ |L1.2188| ;327
000880 e7d40007 LDRB r0,[r4,r7] ;327
000884 e3500048 CMP r0,#0x48 ;327
000888 1a000003 BNE |L1.2204| ;327
|L1.2188|
00088c e3a08010 MOV r8,#0x10 ;329
000890 e3a00000 MOV r0,#0 ;330
000894 e7c40007 STRB r0,[r4,r7] ;330
000898 e2477001 SUB r7,r7,#1 ;331
|L1.2204|
00089c e358000a CMP r8,#0xa ;334
0008a0 1a000009 BNE |L1.2252| ;334
0008a4 e1a00004 MOV r0,r4 ;336
0008a8 ebfffffe BL atoi ;336
0008ac e1a05000 MOV r5,r0 ;336
0008b0 e3590000 CMP r9,#0 ;337
0008b4 0a000001 BEQ |L1.2240| ;337
0008b8 e2650000 RSB r0,r5,#0 ;337
0008bc ea000000 B |L1.2244| ;337
|L1.2240|
0008c0 e1a00005 MOV r0,r5 ;337
|L1.2244|
0008c4 e1a05000 MOV r5,r0 ;337
0008c8 ea000023 B |L1.2396| ;337
|L1.2252|
0008cc e3a06000 MOV r6,#0 ;341
|L1.2256|
0008d0 e1560007 CMP r6,r7 ;341
0008d4 ca00001a BGT |L1.2372| ;341
0008d8 ea000001 B |L1.2276| ;341
|L1.2268|
0008dc e2866001 ADD r6,r6,#1 ;341
0008e0 eafffffa B |L1.2256| ;341
|L1.2276|
0008e4 ebfffffe BL __rt_ctype_table ;343
0008e8 e5900000 LDR r0,[r0,#0] ;343
0008ec e7d41006 LDRB r1,[r4,r6] ;343
0008f0 e7d00001 LDRB r0,[r0,r1] ;343
0008f4 e3100018 TST r0,#0x18 ;343
0008f8 0a00000d BEQ |L1.2356| ;343
0008fc ebfffffe BL __rt_ctype_table ;345
000900 e5900000 LDR r0,[r0,#0] ;345
000904 e7d41006 LDRB r1,[r4,r6] ;345
000908 e7d00001 LDRB r0,[r0,r1] ;345
00090c e3100010 TST r0,#0x10 ;345
000910 0a000003 BEQ |L1.2340| ;345
000914 e7d40006 LDRB r0,[r4,r6] ;346
000918 e0800205 ADD r0,r0,r5,LSL #4 ;346
00091c e2405037 SUB r5,r0,#0x37 ;346
000920 ea000006 B |L1.2368| ;346
|L1.2340|
000924 e7d40006 LDRB r0,[r4,r6] ;348
000928 e0800205 ADD r0,r0,r5,LSL #4 ;348
00092c e2405057 SUB r5,r0,#0x57 ;348
000930 ea000002 B |L1.2368| ;348
|L1.2356|
000934 e7d40006 LDRB r0,[r4,r6] ;351
000938 e0800205 ADD r0,r0,r5,LSL #4 ;351
00093c e2405030 SUB r5,r0,#0x30 ;351
|L1.2368|
000940 eaffffe5 B |L1.2268| ;352
|L1.2372|
000944 e3590000 CMP r9,#0 ;353
000948 0a000001 BEQ |L1.2388| ;353
00094c e2650000 RSB r0,r5,#0 ;353
000950 ea000000 B |L1.2392| ;353
|L1.2388|
000954 e1a00005 MOV r0,r5 ;353
|L1.2392|
000958 e1a05000 MOV r5,r0 ;353
|L1.2396|
00095c e1a00005 MOV r0,r5 ;355
000960 eaffffc1 B |L1.2156| ;355
ENDP
Led_Display PROC
;;;421 void Led_Display(int data)
;;;422 {
000964 e3a01456 MOV r1,#0x56000000
;;;423 //Active is low.(LED On)
;;;424 // GPF7 GPF6 GPF5 GPF4
;;;425 //nLED_8 nLED4 nLED_2 nLED_1
;;;426 // rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4);
;;;427 rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);
000968 e5911054 LDR r1,[r1,#0x54]
00096c e3c110f0 BIC r1,r1,#0xf0
000970 e3a0200f MOV r2,#0xf
000974 e1c22000 BIC r2,r2,r0
000978 e1811202 ORR r1,r1,r2,LSL #4
00097c e3a02456 MOV r2,#0x56000000
000980 e5821054 STR r1,[r2,#0x54]
;;;428 }
000984 e1a0f00e MOV pc,lr
ENDP
Timer_Start PROC
;;;432 void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us
;;;433 {
000988 e3a01dc0 MOV r1,#0x3000
;;;434 rWTCON = ((PCLK/1000000-1)<<8)|(divider<<3); //Watch-dog timer control register
00098c e1811180 ORR r1,r1,r0,LSL #3
000990 e3a02453 MOV r2,#0x53000000
000994 e5821000 STR r1,[r2,#0]
;;;435 rWTDAT = 0xffff; //Watch-dog timer data register
000998 e51f1538 LDR r1,|L1.1128|
00099c e3a02453 MOV r2,#0x53000000
0009a0 e5821004 STR r1,[r2,#4]
;;;436 rWTCNT = 0xffff; //Watch-dog count register
0009a4 e3a02453 MOV r2,#0x53000000
0009a8 e5821008 STR r1,[r2,#8]
;;;437
;;;438 // Watch-dog timer enable & interrupt disable
;;;439 rWTCON = (rWTCON & ~(1<<5) & ~(1<<2)) |(1<<5);
0009ac e3a01453 MOV r1,#0x53000000
0009b0 e5911000 LDR r1,[r1,#0]
0009b4 e3c11024 BIC r1,r1,#0x24
0009b8 e3811020 ORR r1,r1,#0x20
0009bc e3a02453 MOV r2,#0x53000000
0009c0 e5821000 STR r1,[r2,#0]
;;;440 }
0009c4 e1a0f00e MOV pc,lr
ENDP
Timer_Stop PROC
;;;443 int Timer_Stop(void)
;;;444 {
0009c8 e3a00dc0 MOV r0,#0x3000
;;;445 rWTCON = ((PCLK/1000000-1)<<8);
0009cc e3a01453 MOV r1,#0x53000000
0009d0 e5810000 STR r0,[r1,#0]
;;;446 return (0xffff - rWTCNT);
0009d4 e3a00453 MOV r0,#0x53000000
0009d8 e5900008 LDR r0,[r0,#8]
0009dc e26000ff RSB r0,r0,#0xff
0009e0 e2800cff ADD r0,r0,#0xff00
;;;447 }
0009e4 e1a0f00e MOV pc,lr
ENDP
ChangeMPllValue PROC
;;;451 void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
;;;452 {
0009e8 e1a03600 MOV r3,r0,LSL #12
;;;453 //Led_Display(0x8);
;;;454
;;;455 rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
0009ec e1833201 ORR r3,r3,r1,LSL #4
0009f0 e1833002 ORR r3,r3,r2
0009f4 e3a0c44c MOV r12,#0x4c000000
0009f8 e58c3004 STR r3,[r12,#4]
;;;456 //Led_Display(0x0);
;;;457 }
0009fc e1a0f00e MOV pc,lr
ENDP
ChangeClockDivider PROC
;;;479 void ChangeClockDivider(int hdivn_val,int pdivn_val)
;;;480 {
000a00 e92d40f8 STMFD sp!,{r3-r7,lr}
000a04 e1a06000 MOV r6,r0
000a08 e1a07001 MOV r7,r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -