📄 uart.lst
字号:
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE uart
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: d:\Keil\ARM\BIN\CA.exe uart.c THUMB BROWSE DEBUG TABS(4)
stmt level source
1 /*******************************************************************************
2 *File: main.C
3 *功能: 串口发送数据
4 *说明: 使用外部晶振,不使用PLL,Fpclk=Fcclk/4
5 *******************************************************************************/
6 #include "config.h"
7
8 /*******************************************************************************
9 *名称: DelayNS()
10 *功能: 长软件延时
11 *******************************************************************************/
12 void DelayNS(uint32 dly)
13 { uint32 i;
14 1
15 1 for(;dly>0;dly--)
16 1 for(i=0;i<50000;i++);
17 1 }
18 /*******************************************************************************
19 *名称: UART0_Ini()
20 *功能: 初始化串口0.设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
21 *******************************************************************************/
22 void UART0_Ini(void)
23 { U0LCR=0x83; //DLAB=1,可设置波特率
24 1 U0DLL=0x12;
25 1 U0DLM=0x00;
26 1 U0LCR=0x03;
27 1 }
28 /*******************************************************************************
29 *名称: UART0_SendByte()
30 *功能: 向串口发送字节数据,并等待发送完毕
31 *******************************************************************************/
32 void UART0_SendByte(uint8 data)
33 { U0THR=data; //发送数据
34 1 while((U0LSR&0x40)==0); //等待数据发送完毕
35 1 {
36 2 uint32 i;
37 2 for(i=0; i<5; i++);
38 2 }
39 1 }
40 /*******************************************************************************
41 *名称:UART0_SendStr()
42 *功能:向串口发送一字符串
43 *******************************************************************************/
44 void UART0_SendStr(uint8 *str)
45 { while(1)
46 1 { if(*str=='\0')
47 2 {UART0_SendByte('\r');
48 3 UART0_SendByte('\n');
49 3 break;
50 3 } else
51 2 UART0_SendByte(*str++); //发送数据
52 2 }
53 1 }
54 char UART0_RecvByte(void)
55 { while(!(U0LSR&0x01));
56 1 return U0RBR;
57 1 }
58 /*******************************************************************************
59 *名称: main()
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 2
60 *功能: 向串口UART0发送字符串"Hello World!"
61 *******************************************************************************/
62 int main(void)
63 { uint8 SEND_STRING[]="HELLO WORLD!\n";
64 1 PINSEL0=0x00000005; //设置I/O连接到UART0
65 1 PINSEL1=0x00000000;
66 1 UART0_Ini();
67 1
68 1 UART0_SendStr(SEND_STRING);
69 1 DelayNS(10);
70 1
71 1 while(1)
72 1 {
73 2 UART0_SendByte(UART0_RecvByte());
74 2 }
75 1 return(0);
76 1 }
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC DelayNS?T
PUBLIC UART0_Ini?T
PUBLIC UART0_SendByte?T
PUBLIC UART0_SendStr?T
PUBLIC UART0_RecvByte?T
PUBLIC main
*** DATA SEGMENT '?CON?uart':
00000000 ?tpl?0001:
00000000 BEGIN_INIT
00000000 DB 'HELLO WORLD!',0x0A,0x00
0000000E END_INIT
*** CODE SEGMENT '?PR?DelayNS?T?uart':
12: void DelayNS(uint32 dly)
00000000 ---- Variable 'dly' assigned to Register 'R0' ----
13: { uint32 i;
00000000 ; SCOPE-START
15: for(;dly>0;dly--)
00000000 E006 B L_3 ; T=0x00000010
16: for(i=0;i<50000;i++);
00000002 L_10:
00000002 2100 MOV R1,#0x0
00000004 ---- Variable 'i' assigned to Register 'R1' ----
00000004 L_6:
00000004 3101 ADD R1,#0x1
00000006 1C0A MOV R2,R1 ; i
00000008 4800 LDR R3,=0xC350
0000000A 429A CMP R2,R3 ; i
0000000C D3FA BCC L_6 ; T=0x00000004
0000000E 3801 SUB R0,#0x1
00000010 L_3:
00000010 1C01 MOV R1,R0 ; dly
00000012 2900 CMP R1,#0x0 ; dly
00000014 D8F5 BHI L_10 ; T=0x00000002
00000016 ; SCOPE-END
17: }
00000016 4770 BX R14
00000018 ENDP ; 'DelayNS?T'
*** CODE SEGMENT '?PR?UART0_Ini?T?uart':
23: { U0LCR=0x83; //DLAB=1,可设置波特率
00000000 2183 MOV R1,#0x83
00000002 4800 LDR R0,=0xE000C00C
00000004 7001 STRB R1,[R0,#0x0]
24: U0DLL=0x12;
00000006 2112 MOV R1,#0x12
00000008 4800 LDR R0,=0xE000C000
0000000A 7001 STRB R1,[R0,#0x0]
25: U0DLM=0x00;
0000000C 2100 MOV R1,#0x0
0000000E 4800 LDR R0,=0xE000C004
00000010 7001 STRB R1,[R0,#0x0]
26: U0LCR=0x03;
00000012 2103 MOV R1,#0x3
00000014 4800 LDR R0,=0xE000C00C
00000016 7001 STRB R1,[R0,#0x0]
27: }
00000018 4770 BX R14
0000001A ENDP ; 'UART0_Ini?T'
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 4
*** CODE SEGMENT '?PR?UART0_SendByte?T?uart':
32: void UART0_SendByte(uint8 data)
00000000 1C02 MOV R2,R0 ; data
00000002 ---- Variable 'data' assigned to Register 'R2' ----
33: { U0THR=data; //发送数据
00000002 1C11 MOV R1,R2 ; data
00000004 4800 LDR R0,=0xE000C000
00000006 7001 STRB R1,[R0,#0x0]
34: while((U0LSR&0x40)==0); //等待数据发送完毕
00000008 L_11:
00000008 4800 LDR R0,=0xE000C014
0000000A 7800 LDRB R0,[R0,#0x0]
0000000C 2140 MOV R1,#0x40
0000000E 4208 TST R0,R1
00000010 D0FA BEQ L_11 ; T=0x00000008
35: {
00000012 ; SCOPE-START
37: for(i=0; i<5; i++);
00000012 2000 MOV R0,#0x0
00000014 ---- Variable 'i' assigned to Register 'R0' ----
00000014 L_15:
00000014 3001 ADD R0,#0x1
00000016 1C01 MOV R1,R0 ; i
00000018 2905 CMP R1,#0x5 ; i
0000001A D3FB BCC L_15 ; T=0x00000014
0000001C ; SCOPE-END
39: }
0000001C 4770 BX R14
0000001E ENDP ; 'UART0_SendByte?T'
*** CODE SEGMENT '?PR?UART0_SendStr?T?uart':
44: void UART0_SendStr(uint8 *str)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; str
00000004 ---- Variable 'str' assigned to Register 'R3' ----
45: { while(1)
00000004 L_22:
46: { if(*str=='\0')
00000004 1C18 MOV R0,R3 ; str
00000006 7800 LDRB R0,[R0,#0x0] ; str
00000008 2800 CMP R0,#0x0
0000000A D106 BNE L_24 ; T=0x0000001A
47: {UART0_SendByte('\r');
0000000C 200D MOV R0,#0xD
0000000E F7FF BL UART0_SendByte?T ; T=0x0001 (1)
00000010 FFF7 BL UART0_SendByte?T ; T=0x0001 (2)
48: UART0_SendByte('\n');
00000012 200A MOV R0,#0xA
00000014 F7FF BL UART0_SendByte?T ; T=0x0001 (1)
00000016 FFF4 BL UART0_SendByte?T ; T=0x0001 (2)
49: break;
00000018 E005 B L_21 ; T=0x00000026
50: } else
0000001A L_24:
51: UART0_SendByte(*str++); //发送数据
0000001A 1C18 MOV R0,R3 ; str
0000001C 3301 ADD R3,#0x1
0000001E 7800 LDRB R0,[R0,#0x0] ; str
00000020 F7FF BL UART0_SendByte?T ; T=0x0001 (1)
00000022 FFEE BL UART0_SendByte?T ; T=0x0001 (2)
52: }
00000024 E7EE B L_22 ; T=0x00000004
00000026 L_21:
53: }
00000026 BC08 POP {R3}
00000028 4718 BX R3
0000002A ENDP ; 'UART0_SendStr?T'
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 5
*** CODE SEGMENT '?PR?UART0_RecvByte?T?uart':
55: { while(!(U0LSR&0x01));
00000000 L_26:
00000000 4800 LDR R0,=0xE000C014
00000002 7800 LDRB R0,[R0,#0x0]
00000004 2101 MOV R1,#0x1
00000006 4208 TST R0,R1
00000008 D0FA BEQ L_26 ; T=0x00000000
56: return U0RBR;
0000000A 4800 LDR R0,=0xE000C000
0000000C 7800 LDRB R0,[R0,#0x0]
57: }
0000000E 4770 BX R14
00000010 ENDP ; 'UART0_RecvByte?T'
*** CODE SEGMENT '?PR?main?uart':
62: int main(void)
00000000 B500 PUSH {LR}
00000002 B084 SUB R13,#0x10
63: { uint8 SEND_STRING[]="HELLO WORLD!\n";
00000004 ; SCOPE-START
00000004 4800 LDR R1,=?tpl?0001 ; ?tpl?0001
00000006 A800 ADD R0,R13,#0x0
00000008 220E MOV R2,#0xE
0000000A L_37:
0000000A 780B LDRB R3,[R1,#0x0]
0000000C 7003 STRB R3,[R0,#0x0]
0000000E 1C49 ADD R1,R1,#0x1
00000010 1C40 ADD R0,R0,#0x1
00000012 1E52 SUB R2,R2,#0x1
00000014 D1F9 BNE L_37 ; T=0x0000000A
64: PINSEL0=0x00000005; //设置I/O连接到UART0
00000016 2105 MOV R1,#0x5
00000018 4800 LDR R0,=0xE002C000
0000001A 6001 STR R1,[R0,#0x0]
65: PINSEL1=0x00000000;
0000001C 2100 MOV R1,#0x0
0000001E 4800 LDR R0,=0xE002C004
00000020 6001 STR R1,[R0,#0x0]
66: UART0_Ini();
00000022 F7FF BL UART0_Ini?T ; T=0x0001 (1)
00000024 FFED BL UART0_Ini?T ; T=0x0001 (2)
68: UART0_SendStr(SEND_STRING);
00000026 A800 ADD R0,R13,#0x0
00000028 F7FF BL UART0_SendStr?T ; T=0x0001 (1)
0000002A FFEA BL UART0_SendStr?T ; T=0x0001 (2)
69: DelayNS(10);
0000002C 200A MOV R0,#0xA
0000002E F7FF BL DelayNS?T ; T=0x0001 (1)
00000030 FFE7 BL DelayNS?T ; T=0x0001 (2)
71: while(1)
00000032 L_33:
73: UART0_SendByte(UART0_RecvByte());
00000032 F7FF BL UART0_RecvByte?T ; T=0x0001 (1)
00000034 FFE5 BL UART0_RecvByte?T ; T=0x0001 (2)
00000036 0600 LSL R0,R0,#0x18 ; UART0_RecvByte?T
00000038 0E00 LSR R0,R0,#0x18
0000003A F7FF BL UART0_SendByte?T ; T=0x0001 (1)
0000003C FFE1 BL UART0_SendByte?T ; T=0x0001 (2)
74: }
0000003E E7F8 B L_33 ; T=0x00000032
75: return(0);
00000040 ; SCOPE-END
00000040 B004 ADD R13,#0x10
00000042 BC08 POP {R3}
00000044 4718 BX R3
00000046 ENDP ; 'main'
ARM COMPILER V2.53, uart 28/12/07 23:55:14 PAGE 6
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 14
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -