笔记:(五)UART串口驱动
#include "uart.h"
#include "include.h"
void uartInit()
{
UartPinConfig();
UartBuadRateConfig();
configuart_1();
}
char readUsrReg =0;
void uartsendOneByte(char SingleByte)
{
readUsrReg=_usr;
_txr_rxr = SingleByte;
while(!_tidle);
}
void uartSendBuff(char *uartData, char length)
{
unsigned char i;
for(i=0; i<length; i++)
{
uartsendOneByte(uartData[i]);
}
}
char data_buff[3] = {
0};
DEFINE_ISR(UartRxISR,uartVector)
{
int i = 0;
int buff_length;
if(_perr || _nf || _ferr || _oerr)
{
readUsrReg = _usr;
readUsrReg = _txr_rxr;
RxBuffSizeCnt = 0;
}
else
{
if(_rxif)
{
UartRxBuff[RxBuffSizeCnt] = _txr_rxr;
RxBuffSizeCnt++;
if(RxBuffSizeCnt==3)
{
if((UartRxBuff[0]==0x53)&&(UartRxBuff[2]==0x50))
{
if(UartRxBuff[1]==0x31)
{
BLEOTA = 1;
for(i=0;i<RxBuffSizeCnt;i++)
{
data_buff[i] = UartRxBuff[i];
}
uartSendBuff(data_buff,sizeof(data_buff));
RxBuffSizeCnt = 0;
memset(UartRxBuff,0,sizeof(UartRxBuff));
}
else if(UartRxBuff[1]==0x32)
{
BLEOTA = 0;
for(i=0;i<RxBuffSizeCnt;i++)
{
data_buff[i] = UartRxBuff[i];
}
uartSendBuff(data_buff,sizeof(data_buff));
RxBuffSizeCnt = 0;
memset(UartRxBuff,0,sizeof(UartRxBuff));
}
}
}
}
}
}
#ifndef _UART_H
#define _UART_H
#include "BH66F2652.h"
#define uartVector 0x28
#define uartTXMaxLength 16
#define uartRXMaxLength 16
volatile unsigned char RxBuffSizeCnt = 0;
volatile unsigned char UartTxBuff[uartTXMaxLength];
volatile unsigned char UartRxBuff[uartRXMaxLength];
#define UartEnableConfig() {_uarten = 1;_rxen = 1;_txen = 1;}
#define UartDisableConfig() {_uarten = 0;_rxen = 0;_txen = 0;}
#define UartPinConfig() {_papu4=0; _papu5=0; _pas13=0; _pas12=1; _pas11=1; _pas10=0;}
#define UartBuadRateConfig() {_bno=0; _prt=0; _stops=0; _brgh=0; _brg=0x0c;}
#define UartInterruptConfig() {_urf=0; _ure=1; _adden=1; _txif=0; _emi=1; _ure=1; }
#define configuart_1() {_ucr1 = 0x00;_adden = 0; _rie = 1;_tiie = 1;_teie = 1; _uarten = 1;_rxen = 1;_txen = 1;_urf = 0;_txif = 0; _ure = 1; _emi = 1; _ure = 1;}
extern void uartInit();
extern void uartsendOneByte(char SingleByte);
extern void uartSendBuff(char *uartData, char length);
extern unsigned char MeasureBuffData[7];
extern void SendMeasureData(void);
#endif