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