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