#include "config.h"<br /><br />uint8 getnum;<br />uint8 rcv_buf[8]; <br />volatile uint8 rcv_new; // 接收新数据标志<br /><br />void __irq IRQ_UART0 (void)<br />{<br /> if ((U0IIR & 0x0F) == 0x04) <br /> rcv_new = 1; // 设置接收到新的数据标志<br /> <br /> getnum= U0RBR;<br /> VICVectAddr = 0x00; // 中断处理结束<br />}<br /><br /><br />void UART0_SendByte(void)<br />{<br /> <br /> U0THR=getnum;<br /> while ((U0LSR & 0x20) == 0); // 等待数据发送完毕<br />}<br /><br /><br />int8 UART0_Init ()<br />{<br /> uint32 bak; /* 设置串口波特率 */<br /> U0LCR = 0x83; // DLAB = 1 <br /> bak=(Fpclk/16) / 9600;<br /> U0DLM = bak /256;<br /> U0DLL = bak %256;<br /> <br /> U0LCR = 0x03; <br />}<br /><br /><br /><br />int main (void)<br />{<br /> rcv_new = 0;<br /> <br /> PINSEL0 = 0x00000005; // 设置I/O连接到UART0<br /> UART0_Init (); // 串口初始化<br /> U0FCR = 0x01; // 使能FIFO,并设置触发点为8字节<br /> U0IER = 0x01; // 允许RBR中断,即接收中断<br /> <br /> IRQEnable(); // 使能IRQ中断<br /> VICIntSelect = 0x00000000; // 设置所有的通道为IRQ中断<br /> VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0,即最高优先级<br /> VICVectAddr0 = (uint32)IRQ_UART0; // 设置UART0向量地址<br /> VICIntEnable = 1 << 0x06; // 使能UART0中断<br /><br /> while (1)<br /> {<br /> if (rcv_new == 1)<br /> { <br /> rcv_new =0;<br /> UART0_SendByte();<br /> }<br /> }<br /> return 0;<br />} |
|