📄 test.lst
字号:
ARM COMPILER V2.53, test 12/07/06 14:50:21 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE test
OBJECT MODULE PLACED IN .\obj\test.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe test.c THUMB BROWSE DEBUG PRINT(.\LST\TEST.LST) TABS(4) OBJECT(.\obj\test.ob
-j)
stmt level source
1 #include <LPC214X.H>
2
3 /* System configuration: Fosc, Fcclk, Fcco, Fpclk must be defined */
4 /* Crystal frequence,10MHz~25MHz should be the same as actual status. */
5 #define Fosc 12000000
6
7 /* System frequence,should be (1~32)multiples of Fosc,and should be equal or
8 less than 60MHz. */
9 #define Fcclk (Fosc * 5)
10
11 /* CCO frequence,should be 2/4/8/16 multiples of Fcclk, ranged from 156MHz to
12 320MHz. */
13 #define Fcco (Fcclk * 4)
14
15 /* VPB clock frequence , must be 1/2/4 multiples of (Fcclk / 4). */
16 #define Fpclk (Fcclk / 4) * 1
17
18
19 unsigned char rcv_buf[8]; // UART0数据接收缓冲区
20 unsigned char rcv_new; // 接收新数据标志
21 /****************************************************************************
22 * 名称:IRQ_UART0()
23 * 功能:串口UART0接收中断。
24 * 入口参数:无
25 * 出口参数:无
26 ****************************************************************************/
27 void IRQ_UART0(void) __irq
28 { unsigned int i;
29 1
30 1
31 1 //i = 0;
32 1 if( 0x04==(U0IIR&0x0F) )
33 1 { rcv_new = 1; // 设置接收到新的数据标志
34 2 // IODIR = SPI_IOCON | LED1CON;
35 2 for(i=0; i<8; i++)
36 2 {
37 3 rcv_buf[i] = U0RBR; // 读取FIFO的数据,并清除中断标志
38 3 }
39 2 }
40 1 VICVectAddr = 0x00; // 中断处理结束
41 1 }
42
43
44 /****************************************************************************
45 * 名称:SendByte()
46 * 功能:向串口发送字节数据。
47 * 入口参数:data 要发送的数据
48 * 出口参数:无
49 ****************************************************************************/
50 void SendByte(unsigned char data)
51 {
52 1 U0THR = data; // 发送数据
53 1 while( (U0LSR & 0x20)==0 ); // 等待数据发送
54 1 }
55
56
57 /****************************************************************************
58 * 名称:ISendBuf()
ARM COMPILER V2.53, test 12/07/06 14:50:21 PAGE 2
59 * 功能:将缓冲区的数据发送回主机,并等待发送完毕。
60 * 入口参数:无
61 * 出口参数:无
62 ****************************************************************************/
63 void ISendBuf(void)
64 { unsigned char i;
65 1
66 1 //i = 0;
67 1 for(i=0; i<8; i++)
68 1 SendByte(rcv_buf[i]);
69 1 i='\n';
70 1 SendByte(i);
71 1
72 1 //while( (U0LSR & 0x20)==0 ); // 等待数据发送
73 1 }
74
75
76
77 /****************************************************************************
78 * 名称:UART0_Ini()
79 * 功能:初始化串口0。设置其工作模式及波特率。
80 * 入口参数:baud 波特率
81 * set 模式设置(UARTMODE数据结构)
82 * 出口参数:返回值为1时表示初化成功,为0表除参数出错
83 ****************************************************************************/
84 unsigned char UART0_Ini(unsigned int baud)
85 {
86 1 unsigned long bak;
87 1
88 1 /* 参数过滤 */
89 1 /* if( (0==baud)||(baud>115200) ) return(0);
90 1 if( (set.datab<5)||(set.datab>8) ) return(0);
91 1 if( (0==set.stopb)||(set.stopb>2) ) return(0);
92 1 if( set.parity>4 ) return(0);
93 1 */
94 1 /* 设置串口波特率 */
95 1 U0LCR = 0x80; // DLAB位置1
96 1 bak = (Fpclk / 16)/baud;
97 1 U0DLM = bak / 256;
98 1 U0DLL = bak % 256;
99 1 U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
100 1
101 1 U0LCR = 0x03; /* DLAB = 0 */
102 1 // U0FCR = 0x07; /* Enable and reset TX and RX FIFO. */
103 1
104 1 /* 设置串口模式 */
105 1 /* bak = set.datab-5; // 设置字长度
106 1 if(2==set.stopb) bak |= 0x04; // 判断是否为2位停止位
107 1 if(0!=set.parity) set.parity = set.parity-1;
108 1 bak |= set.parity; // 设置奇偶校验
109 1 U0LCR = bak;
110 1 */
111 1 return(1);
112 1 }
113
114
115
116
117 int main(void)
118 {
119 1 // unsigned char i;
120 1 //UARTMODE uart0_set;
121 1
122 1
123 1
124 1
ARM COMPILER V2.53, test 12/07/06 14:50:21 PAGE 3
125 1 PINSEL0 = 0x00000005; // 设置所有管脚连接GPIO
126 1 PINSEL1 = 0x00000000;
127 1
128 1 rcv_new = 0;
129 1
130 1 //uart0_set.datab = 8; // 8位数据位
131 1 // uart0_set.stopb = 1; // 1位停止位
132 1 // uart0_set.parity = 0; // 无奇偶校验
133 1 UART0_Ini(115200); // 初始化串口模式
134 1
135 1 U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
136 1 //U0FCR = 0x00; //关闭FIFO 设置触发为1字节
137 1 U0IER = 0x01; // 允许RBR中断,即接收中断
138 1
139 1 /* 设置中断允许 */
140 1 VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
141 1 VICVectCntl0 = 0x26; // UART0中断通道分配到IRQ slot 0,即优先级最高
142 1 VICVectAddr0 = (int)IRQ_UART0; // 设置UART0向量地址
143 1 VICIntEnable = 0x00000040; // 使能UART0中断
144 1
145 1 while(1)
146 1 {
147 2 if(1==rcv_new)
148 2 {
149 3 ISendBuf(); // 将接收到的数据发送回主机
150 3 rcv_new = 0;
151 3 }
152 2
153 2
154 2 }
155 1 return 0;
156 1 }
157
158
ARM COMPILER V2.53, test 12/07/06 14:50:21 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?UDIV?T)
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC IRQ_UART0?A
PUBLIC SendByte?T
PUBLIC ISendBuf?T
PUBLIC UART0_Ini?T
PUBLIC main
PUBLIC rcv_buf
PUBLIC rcv_new
*** DATA SEGMENT '?DT0?test':
00000000 rcv_buf:
00000000 DS 8
00000008 rcv_new:
00000008 DS 1
*** CODE SEGMENT '?PR?IRQ_UART0?A?test':
27: void IRQ_UART0(void) __irq
00000000 E92D000F STMDB R13!,{R0-R3}
28: { unsigned int i;
00000004 ; SCOPE-START
32: if( 0x04==(U0IIR&0x0F) )
00000004 E5100000 LDR R0,=0xE000C008
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E200000F AND R0,R0,#0x000F
00000010 E3500004 CMP R0,#0x0004
00000014 1A00000C BNE L_1 ; Targ=0x4C
33: { rcv_new = 1; // 设置接收到新的数据标志
00000018 E3A01001 MOV R1,#0x1
0000001C E5100000 LDR R0,=rcv_new ; rcv_new
00000020 E5C01000 STRB R1,[R0,#0x0] ; rcv_new
35: for(i=0; i<8; i++)
00000024 E3A00000 MOV R0,#0x0
00000028 ---- Variable 'i' assigned to Register 'R0' ----
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -