📄 main.lst
字号:
ARM COMPILER V2.00f, main 20/02/05 12:36:10 PAGE 1
ARM COMPILER V2.00f, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe main.c THUMB OPTIMIZE(7,SPEED) BROWSE DEBUG TABS(4)
stmt level source
1
2 /*************************************************************/
3 /* PROJECT NAME: UART */
4 /* Project: LPC2100 Training course */
5 /* Engineer: T Martin tmartin@hitex.co.uk */
6 /* Filename: main.c */
7 /* Language: C */
8 /* Compiler: Keil ARM V2.00b */
9 /* Assembler: */
10 /* */
11 /************************************************************/
12 /* COPYRIGHT: Hitex UK Ltd 2005 */
13 /* LICENSE: THIS VERSION CREATED FOR FREE DISTRIBUTION */
14 /************************************************************/
15 /* Function: */
16 /* */
17 /* Example */
18 /* */
19 /* Demonstrates RS232 Comms */
20 /* */
21 /* Oscillator frequency 12.000 Mhz */
22 /* Target board Keil MCB2100 */
23 /************************************************************/
24
25
26 #define CR 0x0D
27 #include <LPC21xx.H>
28
29 void init_serial (void);
30 int putchar (int ch);
31 int getchar (void);
32
33
34 unsigned char test;
35
36 int main(void)
37 {
38 1 VPBDIV = 0x02; //Divide Pclk by two
39 1 init_serial();
40 1
41 1 while(1)
42 1 {
43 2
44 2 putchar(getchar()); //Echo terminal
45 2 }
46 1 }
47
48 void init_serial (void) /* Initialize Serial Interface */
49 {
50 1 PINSEL0 = 0x00050000; /* Enable RxD1 and TxD1 */
51 1 U1LCR = 0x00000083; /* 8 bits, no Parity, 1 Stop bit */
52 1 U1DLL = 0x000000C2; /* 9600 Baud Rate @ 30MHz VPB Clock */
53 1 U1LCR = 0x00000003; /* DLAB = 0 */
54 1 }
55
56
57 int putchar (int ch) /* Write character to Serial Port */
58 {
59 1
ARM COMPILER V2.00f, main 20/02/05 12:36:10 PAGE 2
60 1 if (ch == '\n') {
61 2 while (!(U1LSR & 0x20));
62 2 U1THR = CR; /* output CR */
63 2 }
64 1 while (!(U1LSR & 0x20));
65 1 return (U1THR = ch);
66 1 }
67
68
69 int getchar (void) /* Read character from Serial Port */
70 {
71 1
72 1 while (!(U1LSR & 0x01));
73 1
74 1 return (U1RBR);
75 1 }
ARM COMPILER V2.00f, main 20/02/05 12:36:10 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC init_serial?T
PUBLIC putchar?T
PUBLIC getchar?T
PUBLIC main
PUBLIC test
*** DATA SEGMENT '?DT0?main':
00000000 test:
00000000 DS 1
*** CODE SEGMENT '?PR?main?main':
36: int main(void)
00000000 B500 PUSH {LR}
38: VPBDIV = 0x02; //Divide Pclk by two
00000002 2102 MOV R1,#0x2
00000004 4800 LDR R0,=0xE01FC100
00000006 7001 STRB R1,[R0,#0x0]
39: init_serial();
00000008 F7FF BL init_serial?T ; T=0x0001 (1)
0000000A FFFA BL init_serial?T ; T=0x0001 (2)
41: while(1)
0000000E L_3:
44: putchar(getchar()); //Echo terminal
0000000E F7FF BL getchar?T ; T=0x0001 (1)
00000010 FFF7 BL getchar?T ; T=0x0001 (2)
00000014 F7FF BL putchar?T ; T=0x0001 (1)
00000016 FFF4 BL putchar?T ; T=0x0001 (2)
45: }
0000001A E7F8 B L_3 ; T=0x0000000E
0000001C BC08 POP {R3}
0000001E 4718 BX R3
00000020 ENDP ; 'main'
*** CODE SEGMENT '?PR?init_serial?T?main':
50: PINSEL0 = 0x00050000; /* Enable RxD1 and TxD1 */
00000000 4800 LDR R1,=0x50000
00000002 4800 LDR R0,=0xE002C000
00000004 6001 STR R1,[R0,#0x0]
51: U1LCR = 0x00000083; /* 8 bits, no Parity, 1 Stop bit */
00000006 2183 MOV R1,#0x83
00000008 4800 LDR R0,=0xE001000C
0000000A 7001 STRB R1,[R0,#0x0]
52: U1DLL = 0x000000C2; /* 9600 Baud Rate @ 30MHz VPB Clock */
0000000C 21C2 MOV R1,#0xC2
0000000E 4800 LDR R0,=0xE0010000
00000010 7001 STRB R1,[R0,#0x0]
53: U1LCR = 0x00000003; /* DLAB = 0 */
00000012 2103 MOV R1,#0x3
00000014 4800 LDR R0,=0xE001000C
00000016 7001 STRB R1,[R0,#0x0]
54: }
00000018 4770 BX R14
0000001A ENDP ; 'init_serial?T'
*** CODE SEGMENT '?PR?putchar?T?main':
57: int putchar (int ch) /* Write character to Serial Port */
00000000 ---- Variable 'ch' assigned to Register 'R0' ----
60: if (ch == '\n') {
00000000 280A CMP R0,#0xA ; ch
00000002 D107 BNE L_13 ; T=0x00000014
61: while (!(U1LSR & 0x20));
ARM COMPILER V2.00f, main 20/02/05 12:36:10 PAGE 4
00000004 L_6:
00000004 4800 LDR R1,=0xE0010014
00000006 7809 LDRB R1,[R1,#0x0]
00000008 2220 MOV R2,#0x20
0000000A 4211 TST R1,R2
0000000C D0FA BEQ L_6 ; T=0x00000004
62: U1THR = CR; /* output CR */
0000000E 220D MOV R2,#0xD
00000010 4800 LDR R1,=0xE0010000
00000012 700A STRB R2,[R1,#0x0]
64: while (!(U1LSR & 0x20));
00000014 L_13:
00000014 L_10:
00000014 4800 LDR R1,=0xE0010014
00000016 7809 LDRB R1,[R1,#0x0]
00000018 2220 MOV R2,#0x20
0000001A 4211 TST R1,R2
0000001C D0FA BEQ L_10 ; T=0x00000014
65: return (U1THR = ch);
0000001E 4800 LDR R1,=0xE0010000
00000020 7008 STRB R0,[R1,#0x0]
00000022 0600 LSL R0,R0,#0x18 ; ch
00000024 0E00 LSR R0,R0,#0x18
66: }
00000026 4770 BX R14
00000028 ENDP ; 'putchar?T'
*** CODE SEGMENT '?PR?getchar?T?main':
72: while (!(U1LSR & 0x01));
00000000 L_15:
00000000 4800 LDR R0,=0xE0010014
00000002 7800 LDRB R0,[R0,#0x0]
00000004 2101 MOV R1,#0x1
00000006 4208 TST R0,R1
00000008 D0FA BEQ L_15 ; T=0x00000000
74: return (U1RBR);
0000000A 4800 LDR R0,=0xE0010000
0000000C 7800 LDRB R0,[R0,#0x0]
75: }
0000000E 4770 BX R14
00000010 ENDP ; 'getchar?T'
Module Information Static
----------------------------------
code size = ------
data size = 1
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -