TA的每日心情 | 开心 2017-9-24 20:12 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
|
收到gd207的板子还是原来的红黄色可惜没有USB 只能使用串口和PC通信
#include "colibri_bsp_uart.h"
//namespace mydfinenamespace{
#define TXSIZE 10
#define RXSIZE 10
namespace hjw{
class mydefine{
public :
mydefine();
~mydefine();
void mydefineInit(void);
void usart_write();
void usart_read();
void usart_writefifo(char txdata);
bool is_usartready(void);
void set_usartready(void);
static void bufferInit();
static char TxBuffer[2][TXSIZE];
static char RxBuffer[2][RXSIZE];
unsigned char txselect;
static unsigned char txcnt;
static unsigned char rxcnt;
char txready;
};
}
using namespace hjw;
char mydefine::TxBuffer[2][TXSIZE]={{0},{0}};
char mydefine::RxBuffer[2][TXSIZE]={{0},{0}};
unsigned char mydefine::txcnt=0;
unsigned char mydefine::rxcnt=0;
void mydefine::usart_write(void)
{
if(is_usartready()==0){
return ;
}
USART_DataSend(USART1,TxBuffer[txselect][txcnt]);
while (USART_GetBitState(USART1, USART_FLAG_TBE) == RESET)
;
if((txcnt==0)&&(txselect==1)){
txselect=0;
txcnt=TXSIZE-1;
}
if((txcnt==0)&&(txselect==0))
{
txcnt=0;
txready=0;
}
txcnt--;
}
void mydefine::usart_writefifo(char txdata)
{
TxBuffer[txselect][txcnt++]=txdata;
if(txcnt==RXSIZE){
txcnt=0;
txselect=!txselect?1:0;
}
}
bool mydefine::is_usartready(void)
{
return txready;
}
void mydefine::set_usartready(){
txready=1;
txcnt=txcnt-1;
}
void mydefine::usart_read()
{
}
代码就是上面的 使用双缓冲接收发送的数据再将接收的数据整体发送出去类似中断或者DMA方式处理数据不用对数据单个发送。缺点就是大于最大长度就是溢出和复位不容易停止,有喜欢的朋友可以来讨论下。
|
|