?? uart.lst
字號:
ARM COMPILER V2.53, UART 13/07/07 19:51:17 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\UART.obj
COMPILER INVOKED BY: D:\Program Files\Keil3\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 13/07/07 19:51:17 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 ** 函數名稱 :UART0_SendByte()
85 ** 函數功能 :向串口發送字節數據,并等待發送完畢,查詢方式。
86 ** 入口參數 :dat 要發送的數據
87 ** 出口參數 :無
88 *********************************************************************************************************
-*/
89 void UART0_SendByte (uint8 dat)
90 {
91 1 U0THR = dat;
92 1 while ((U0LSR & 0x40) == 0); // 等待數據發送完畢
93 1 }
94
95 /********************************************************************************************************
-**
96 ** 函數名稱 :UART0_SendStr()
97 ** 函數功能 :向串口發送一字符串
98 ** 入口參數 :str 要發送的字符串的指針
99 ** 出口參數 :無
100 *********************************************************************************************************
-*/
101 void UART0_SendStr (uint8 const *str)
102 {
103 1 while (1)
104 1 {
105 2 if (*str == '\0') break; // 遇到結束符,退出
106 2 UART0_SendByte(*str++); // 發送數據
107 2 }
108 1 }
109
110
111
112 /********************************************************************************************************
-*
113 ** End Of File
ARM COMPILER V2.53, UART 13/07/07 19:51:17 PAGE 3
114 ********************************************************************************************************/
ARM COMPILER V2.53, UART 13/07/07 19:51:17 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_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
00000048 D004 BEQ L_7 ; T=0x00000054
ARM COMPILER V2.53, UART 13/07/07 19:51:17 PAGE 5
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -