📄 串口中断接收和回送2.txt
字号:
//在串口接收时,不是想往接收堆栈中放几个字节数据就可以放的,而是看你
//设置的触发点为几个字节。这两处要对应,不然接收会出错。
#include "config.h"
#define UART_BPS 9600//定义波特率的值
uint8 rcv_buf[8];//接收缓冲区
volatile uint8 rcv_new;//接收新数据标志
void __irq IRQ_UART(void)
{
uint8 i;
if(0x04==(U0IIR&0x0F))rcv_new=1;//设置接收到新数据标志
for(i=0;i<8;i++)
{rcv_buf[i]=U0RBR;//读取FIFO的数据,并清除中断标志
}
VICVectAddr=0x00;//中断处理结束
}
void SendByte(uint8 data)
{U0THR=data;//回发送接收到的数据
}
void ISendBuf(void)
{uint8 i;
for(i=0;i<8;i++) SendByte(rcv_buf[i]);
while((U0LSR&0x20)==0);//等待数据发送
}
void UART_INI(void)//串口初始化
{uint16 Fdiv;
U0FCR=0x81; //使能FIFO,并设置触发点为8字节
U0LCR=0x83;//线控制寄存器,决定发送和接收数据的格式,DLAB为1
U0IER=0x01;//使能接收中断
Fdiv=(Fpclk/16)/UART_BPS;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
}
int main(void)
{
PINSEL0=0x00000005;
rcv_new=0;
UART_INI();
VICIntSelect=0x00000000;//中断设置
VICVectCntl0=0x26;
VICVectAddr0=(uint32)IRQ_UART;
VICIntEnable=0x00000040;
while(1)
{if(1==rcv_new)
{rcv_new=0;
ISendBuf();
}
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -