📄 uart.lst
字号:
ARM COMPILER V2.53, UART 29/01/08 11:33:05 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\UART.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ..\Source\UART.c THUMB BROWSE DEBUG PRINT(.\UART.LST) TABS(4) OBJECT(.\UART.
-obj)
stmt level source
1 /****************************************Copyright (c)**************************************************
2 **
3 UART0通讯实验,中断方式,使用FIFO。
4 **
5 ********************************************************************************************************/
6
7 #include <LPC213x.h>
8 #include "config.h"
9
10 /********************************************************************************************************
-**
11 ** 函数名称 :UART0_Init()
12 ** 函数功能 :串口初始化,设置工作模式和波特率。
13 ** 入口参数 :baud 波特率
14 ** set 模式设置(UARTMODE数据结构)
15 ** 出口参数 :1-初始化成功, 0-初始化失败
16 *********************************************************************************************************
-*/
17 int8 UART0_Init (uint32 baud,uint8 datab,uint8 stopb,uint8 parity)
18 {
19 1 uint32 bak;
20 1
21 1 PINSEL0 = (PINSEL0&(~0x0F))|0x05; // 设置I/O连接到UART0
22 1
23 1 /* 参数过滤 */
24 1 if ((baud ==0 ) || (baud > 115200)) return (0);
25 1 if ((datab <5) || (datab > 8)) return (0);
26 1 if ((stopb == 0) || (stopb > 2)) return (0);
27 1 if (parity > 4) return (0);
28 1
29 1 /* 设置串口波特率 */
30 1 U0LCR = 0x80; // DLAB = 1
31 1 bak = (Fpclk >> 4) / baud;
32 1 U0DLM = bak >> 8;
33 1 U0DLL = bak & 0xFF;
34 1
35 1 /* 设置串口模式 */
36 1 bak = datab - 5; // 设置字长
37 1 if (stopb == 2) bak |= 0x04; // 判断是否为2位停止位
38 1
39 1 if (parity != 0)
40 1 {
41 2 parity = parity - 1;
42 2 bak |= 0x08;
43 2 }
44 1 bak |= parity << 4; // 设置奇偶校验
45 1
46 1 U0LCR = bak;
47 1
48 1 return (1);
49 1 }
50
51
52 /********************************************************************************************************
-**
53 ** 函数名称 :UART0_GetByte()
54 ** 函数功能 :从串口接收1字节数据,使用查询方式接收。
55 ** 入口参数 :无
ARM COMPILER V2.53, UART 29/01/08 11:33:05 PAGE 2
56 ** 出口参数 :接收到的数据
57 *********************************************************************************************************
-*/
58 uint8 UART0_GetByte (void)
59 {
60 1 uint8 rcv_dat;
61 1
62 1 while ((U0LSR & 0x01) == 0);
63 1 rcv_dat = U0RBR;
64 1
65 1 return (rcv_dat);
66 1 }
67
68 /********************************************************************************************************
-**
69 ** 函数名称 :UART0_GetStr()
70 ** 函数功能 :从串口接收
71 ** 入口参数 : s 指向接收数据数组的指针
72 ** n 接收的个数
73 ** 出口参数 : 无
74 *********************************************************************************************************
-*/
75 void UART0_GetStr (uint8 *s, uint32 n)
76 {
77 1 for ( ; n>0; n--)
78 1 {
79 2 *s++ = UART0_GetByte();
80 2 }
81 1 }
82 /*****************************************************************
83 接收字符串,不定数
84 *****************************************************************/
85 void UART0_Get(uint8 *s)
86 {while(1)
87 1 { if (*s == '\0') break;
88 2 *s++= UART0_GetByte();
89 2 }
90 1 }
91 /********************************************************************************************************
-**
92 ** 函数名称 :UART0_SendByte()
93 ** 函数功能 :向串口发送字节数据,并等待发送完毕,查询方式。
94 ** 入口参数 :dat 要发送的数据
95 ** 出口参数 :无
96 *********************************************************************************************************
-*/
97 void UART0_SendByte (uint8 dat)
98 {
99 1 U0THR = dat;
100 1 while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
101 1 }
102
103 /********************************************************************************************************
-**
104 ** 函数名称 :UART0_SendStr()
105 ** 函数功能 :向串口发送一字符串
106 ** 入口参数 :str 要发送的字符串的指针
107 ** 出口参数 :无
108 *********************************************************************************************************
-*/
109 void UART0_SendStr (uint8 const *str)
110 {
111 1 while (1)
112 1 {
113 2 if (*str == '\0') break; // 遇到结束符,退出
114 2 UART0_SendByte(*str++); // 发送数据
ARM COMPILER V2.53, UART 29/01/08 11:33:05 PAGE 3
115 2 }
116 1 }
117
118
119
120 /********************************************************************************************************
-*
121 ** End Of File
122 ********************************************************************************************************/
ARM COMPILER V2.53, UART 29/01/08 11:33:05 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?UDIV?T)
*** PUBLICS:
PUBLIC UART0_Init?T
PUBLIC UART0_GetByte?T
PUBLIC UART0_GetStr?T
PUBLIC UART0_Get?T
PUBLIC UART0_SendByte?T
PUBLIC UART0_SendStr?T
*** CODE SEGMENT '?PR?UART0_Init?T?UART':
17: int8 UART0_Init (uint32 baud,uint8 datab,uint8 stopb,uint8 parity)
00000000 B530 PUSH {R4-R5,LR}
00000002 ---- Variable 'parity' assigned to Register 'R3' ----
00000002 ---- Variable 'stopb' assigned to Register 'R2' ----
00000002 1C0C MOV R4,R1 ; datab
00000004 ---- Variable 'datab' assigned to Register 'R4' ----
00000004 1C05 MOV R5,R0 ; baud
00000006 ---- Variable 'baud' assigned to Register 'R5' ----
18: {
00000006 ; SCOPE-START
21: PINSEL0 = (PINSEL0&(~0x0F))|0x05; // 设置I/O连接到UART0
00000006 4800 LDR R0,=0xE002C000
00000008 6801 LDR R1,[R0,#0x0]
0000000A 200F MOV R0,#0xF
0000000C 4381 BIC R1,R0
0000000E 2005 MOV R0,#0x5
00000010 4301 ORR R1,R0
00000012 4800 LDR R0,=0xE002C000
00000014 6001 STR R1,[R0,#0x0]
24: if ((baud ==0 ) || (baud > 115200)) return (0);
00000016 1C28 MOV R0,R5 ; baud
00000018 2800 CMP R0,#0x0 ; baud
0000001A D003 BEQ L_2 ; T=0x00000024
0000001C 1C28 MOV R0,R5 ; baud
0000001E 4800 LDR R1,=0x1C200
00000020 4288 CMP R0,R1 ; baud
00000022 D901 BLS L_1 ; T=0x00000028
00000024 L_2:
00000024 2000 MOV R0,#0x0
00000026 E056 B L_3 ; T=0x000000D6
00000028 L_1:
25: if ((datab <5) || (datab > 8)) return (0);
00000028 1C20 MOV R0,R4 ; datab
0000002A 0600 LSL R0,R0,#0x18 ; datab
0000002C 0E00 LSR R0,R0,#0x18
0000002E 2805 CMP R0,#0x5
00000030 DB04 BLT L_5 ; T=0x0000003C
00000032 1C20 MOV R0,R4 ; datab
00000034 0600 LSL R0,R0,#0x18 ; datab
00000036 0E00 LSR R0,R0,#0x18
00000038 2808 CMP R0,#0x8
0000003A DD01 BLE L_4 ; T=0x00000040
0000003C L_5:
0000003C 2000 MOV R0,#0x0
0000003E E04A B L_3 ; T=0x000000D6
00000040 L_4:
26: if ((stopb == 0) || (stopb > 2)) return (0);
00000040 1C10 MOV R0,R2 ; stopb
00000042 0600 LSL R0,R0,#0x18 ; stopb
00000044 0E00 LSR R0,R0,#0x18
00000046 2800 CMP R0,#0x0
ARM COMPILER V2.53, UART 29/01/08 11:33:05 PAGE 5
00000048 D004 BEQ L_7 ; T=0x00000054
0000004A 1C10 MOV R0,R2 ; stopb
0000004C 0600 LSL R0,R0,#0x18 ; stopb
0000004E 0E00 LSR R0,R0,#0x18
00000050 2802 CMP R0,#0x2
00000052 DD01 BLE L_6 ; T=0x00000058
00000054 L_7:
00000054 2000 MOV R0,#0x0
00000056 E03E B L_3 ; T=0x000000D6
00000058 L_6:
27: if (parity > 4) return (0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -