?? serial.c
字號(hào):
/*******************************************************************************
*File: Serial.c
*功能:使用串口UART0接收上位機(jī)發(fā)送的數(shù)據(jù),發(fā)送數(shù)據(jù)到上位機(jī)
*******************************************************************************/
#include "config.h"
uint8 rcv_buf[1]; //UART0數(shù)據(jù)接收緩沖區(qū)
uint8 rcv_new; //接收新數(shù)據(jù)標(biāo)志
void IRQ_UART0(void) __attribute__ ((interrupt)); // Generate Interrupt
/*******************************************************************************
*名稱: IRQ_UART0(void)
*功能: 串口UART0接收中斷
*******************************************************************************/
void IRQ_UART0(void)
{ uint32 i;
if(0x04==(U0IIR&0x0F))rcv_new=1; //設(shè)置接收到新的數(shù)據(jù)標(biāo)志
for(i=0;i<8;i++)
{ rcv_buf[i]=U0RBR; //讀取FIFO的數(shù)據(jù),并清除中斷標(biāo)志
}
VICVectAddr=0x00; //中斷處理結(jié)束
}
/*******************************************************************************
*名稱: SendByte()
*功能: 向串口發(fā)送字節(jié)數(shù)據(jù)
*入口參數(shù):data 要發(fā)送的數(shù)據(jù)
*******************************************************************************/
void SendByte(uint8 data)
{ U0THR=data;
}
/*******************************************************************************
*名稱: ISendBuf()
*功能: 將緩沖區(qū)的數(shù)據(jù)發(fā)送回主機(jī),并等待發(fā)送完畢
*******************************************************************************/
void ISendBuf(void)
{ SendByte(rcv_buf[0]);
while((U0LSR&0x20)==0); //等待數(shù)據(jù)發(fā)送
}
/*******************************************************************************
*名稱: UART0_Ini()
*功能: 初始化串口0. 設(shè)置其工作模式及波特率
*入口參數(shù): baud 波特率
set 模式設(shè)置 (UARTMODE數(shù)據(jù)結(jié)構(gòu))
*出口參數(shù):返回值為1時(shí)表示初始化成功,為0表示參數(shù)出錯(cuò)
*******************************************************************************/
uint8 UART0_Ini(uint32 baud,UARTMODE set)
{ uint32 bak;
/*參數(shù)過(guò)濾*/
if((0==baud)||(baud>115200))return(0);
if((set.datab<5)||(set.datab>8))return(0);
if((0==set.stopb)||(set.stopb>2))return(0);
if(set.parity>4)return(0);
/*設(shè)置串口波特率*/
U0LCR=0x80; //DLAB位置1
bak=(Fpclk>>4)/baud;
U0DLM=bak>>8;
U0DLL=bak&0xff;
/*設(shè)置串口模式*/
bak=set.datab-5; //設(shè)置字長(zhǎng)度
if(2==set.stopb)bak|=0x04; //判斷是否為2位停止位
if(0!=set.parity){set.parity=set.parity-1;bak|=0x08;}
bak|=set.parity<<4; //設(shè)置奇偶校驗(yàn)
U0LCR=bak;
return(1);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -