?? uart0.lst
字號:
ARM COMPILER V2.40a, UART0 19/07/07 01:23:00 PAGE 1
ARM COMPILER V2.40a, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe UART0.c THUMB DEBUG TABS(4)
stmt level source
1 /****************************************************************************
2 * 文件名:SENDSTR.C
3 * 功能:向串口發送數據。
4 * 說明:使用外部11.0592MHz晶振,根據CONFIG.H文件配置,Fpclk=11.0592MHz;
5 * 通訊波特率115200,8位數據位,1位停止位,無奇偶校驗。
6 ****************************************************************************/
7 #include "config.h"
8 #define UART_BPS 19200 /* 定義通訊波特率 */
9
10 /****************************************************************************
11 * 名稱:UART0_Ini()
12 * 功能:初始化串口0。設置為8位數據位,1位停止位,無奇偶校驗,波特率為115200
13 * 入口參數:無
14 * 出口參數:無
15 ****************************************************************************/
16 void UART0_Ini(void)
17 { uint16 Fdiv;
18 1 PINSEL0 |= 0x00000005; // 設置I/O連接到UART0
19 1 U0LCR = 0x83; // DLAB = 1,可設置波特率
20 1 Fdiv = (Fpclk / 16) / UART_BPS; // 設置波特率
21 1 U0DLM = Fdiv / 256;
22 1 U0DLL = Fdiv % 256;
23 1 U0LCR = 0x03;
24 1
25 1 U0FCR = 0x01; // 使能FIFO , 來一個數據就產生中斷
26 1 U0IER = 0x01; // 允許RBR中斷,即接收中斷
27 1
28 1 /* 設置UART0中斷允許 */
29 1 VICIntSelect = 0x00000000; // 設置所有通道為IRQ中斷
30 1 VICVectCntl1 = 0x26; // UART0中斷通道分配到IRQ slot 0,即優先級最高
31 1 VICVectAddr1 = (int)IRQ_UART0; // 設置UART0向量地址
32 1 VICIntEnable = 0x00000040; // 使能UART0中斷
33 1
34 1 }
35
36 /****************************************************************************
37 * 名稱:UART0_SendByte()
38 * 功能:向串口發送字節數據,并等待發送完畢。
39 * 入口參數:data 要發送的數據
40 * 出口參數:無
41 ****************************************************************************/
42 void UART0_SendByte(uint8 data)
43 { U0THR = data; // 發送數據
44 1
45 1 while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
46 1 }
47
48 /****************************************************************************
49 * 名稱:UART0_SendStr()
50 * 功能:向串口發送一字符串
51 * 入口參數:srt 要發送的字符串的指針
52 * 出口參數:無
53 ****************************************************************************/
54 void UART0_SendStr(uint8 const *str)
55 { while(1)
56 1 { if( *str == '\0' ) break;
57 2 UART0_SendByte(*str++); // 發送數據
58 2 }
59 1 }
ARM COMPILER V2.40a, UART0 19/07/07 01:23:00 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (IRQ_UART0?A)
EXTERN CODE16 (?C?SDIV?T)
*** PUBLICS:
PUBLIC UART0_Ini?T
PUBLIC UART0_SendByte?T
PUBLIC UART0_SendStr?T
*** CODE SEGMENT '?PR?UART0_Ini?T?UART0':
16: void UART0_Ini(void)
00000000 B500 PUSH {LR}
17: { uint16 Fdiv;
00000002 ; SCOPE-START
18: PINSEL0 |= 0x00000005; // 設置I/O連接到UART0
00000002 2205 MOV R2,#0x5
00000004 4800 LDR R0,=0xE002C000
00000006 6801 LDR R1,[R0,#0x0]
00000008 4311 ORR R1,R2
0000000A 6001 STR R1,[R0,#0x0]
19: U0LCR = 0x83; // DLAB = 1,可設置波特率
0000000C 2183 MOV R1,#0x83
0000000E 4800 LDR R0,=0xE000C00C
00000010 7001 STRB R1,[R0,#0x0]
20: Fdiv = (Fpclk / 16) / UART_BPS; // 設置波特率
00000012 2224 MOV R2,#0x24
00000014 ---- Variable 'Fdiv' assigned to Register 'R2' ----
21: U0DLM = Fdiv / 256;
00000014 1C10 MOV R0,R2 ; Fdiv
00000016 0400 LSL R0,R0,#0x10 ; Fdiv
00000018 0C00 LSR R0,R0,#0x10
0000001A 4940 LDR R1,=0x100
0000001C F7FF BL ?C?SDIV?T ; T=0x0001 (1) ; ?C?SDIV?T
0000001E FFF0 BL ?C?SDIV?T ; T=0x0001 (2) ; ?C?SDIV?T
00000020 1C08 MOV R0,R1
00000022 4800 LDR R0,=0xE000C004
00000024 7001 STRB R1,[R0,#0x0]
22: U0DLL = Fdiv % 256;
00000026 1C10 MOV R0,R2 ; Fdiv
00000028 0400 LSL R0,R0,#0x10 ; Fdiv
0000002A 0C00 LSR R0,R0,#0x10
0000002C 4940 LDR R1,=0x100
0000002E F7FF BL ?C?SDIV?T ; T=0x0001 (1) ; ?C?SDIV?T
00000030 FFE7 BL ?C?SDIV?T ; T=0x0001 (2) ; ?C?SDIV?T
00000032 1C01 MOV R1,R0
00000034 4800 LDR R0,=0xE000C000
00000036 7001 STRB R1,[R0,#0x0]
23: U0LCR = 0x03;
00000038 2103 MOV R1,#0x3
0000003A 4800 LDR R0,=0xE000C00C
0000003C 7001 STRB R1,[R0,#0x0]
25: U0FCR = 0x01; // 使能FIFO , 來一個數據就產生中斷
0000003E 2101 MOV R1,#0x1
00000040 4800 LDR R0,=0xE000C008
00000042 7001 STRB R1,[R0,#0x0]
26: U0IER = 0x01; // 允許RBR中斷,即接收中斷
00000044 2101 MOV R1,#0x1
00000046 4800 LDR R0,=0xE000C004
00000048 6001 STR R1,[R0,#0x0]
29: VICIntSelect = 0x00000000; // 設置所有通道為IRQ中斷
0000004A 2100 MOV R1,#0x0
0000004C 4800 LDR R0,=0xFFFFF00C
0000004E 6001 STR R1,[R0,#0x0]
ARM COMPILER V2.40a, UART0 19/07/07 01:23:00 PAGE 3
30: VICVectCntl1 = 0x26; // UART0中斷通道分配到IRQ slot 0,即優先級最高
00000050 2126 MOV R1,#0x26
00000052 4800 LDR R0,=0xFFFFF204
00000054 6001 STR R1,[R0,#0x0]
31: VICVectAddr1 = (int)IRQ_UART0; // 設置UART0向量地址
00000056 4900 LDR R1,=IRQ_UART0?A ; IRQ_UART0?A
00000058 4800 LDR R0,=0xFFFFF104
0000005A 6001 STR R1,[R0,#0x0]
32: VICIntEnable = 0x00000040; // 使能UART0中斷
0000005C 2140 MOV R1,#0x40
0000005E 4800 LDR R0,=0xFFFFF010
00000060 6001 STR R1,[R0,#0x0]
00000062 ; SCOPE-END
34: }
00000062 BC08 POP {R3}
00000064 4718 BX R3
00000066 ENDP ; 'UART0_Ini?T'
*** CODE SEGMENT '?PR?UART0_SendByte?T?UART0':
42: void UART0_SendByte(uint8 data)
00000000 1C02 MOV R2,R0 ; data
00000002 ---- Variable 'data' assigned to Register 'R2' ----
43: { U0THR = data; // 發送數據
00000002 1C11 MOV R1,R2 ; data
00000004 4800 LDR R0,=0xE000C000
00000006 7001 STRB R1,[R0,#0x0]
45: while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
00000008 L_1:
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_1 ; T=0x00000008
46: }
00000012 4770 BX R14
00000014 ENDP ; 'UART0_SendByte?T'
*** CODE SEGMENT '?PR?UART0_SendStr?T?UART0':
54: void UART0_SendStr(uint8 const *str)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; str
00000004 ---- Variable 'str' assigned to Register 'R3' ----
55: { while(1)
00000004 L_7:
56: { if( *str == '\0' ) break;
00000004 1C18 MOV R0,R3 ; str
00000006 7800 LDRB R0,[R0,#0x0] ; str
00000008 2800 CMP R0,#0x0
0000000A D005 BEQ L_6 ; T=0x00000018
57: UART0_SendByte(*str++); // 發送數據
0000000C 1C18 MOV R0,R3 ; str
0000000E 3301 ADD R3,#0x1
00000010 7800 LDRB R0,[R0,#0x0] ; str
00000012 F7FF BL UART0_SendByte?T ; T=0x0001 (1)
00000014 FFF5 BL UART0_SendByte?T ; T=0x0001 (2)
58: }
00000016 E7F5 B L_7 ; T=0x00000004
00000018 L_6:
59: }
00000018 BC08 POP {R3}
0000001A 4718 BX R3
0000001C ENDP ; 'UART0_SendStr?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = ------
ARM COMPILER V2.40a, UART0 19/07/07 01:23:00 PAGE 4
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -