?? 串口中斷接收和回送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 + -