simuarts.c
来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 130 行
C
130 行
/****************************************************************
** *
** FILE : SimUARTS.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** 2006.3.30 *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "string.h"
#include "simuart.h"
#include "roundbuf.h"
/*
********************************************************************************
* define interrupt flag
********************************************************************************
*/
/*
********************************************************************************
* define config parameters
********************************************************************************
*/
#pragma O0
#define SIZE_SENDBUF 512
#define SIZE_RECVBUF 512
/*
********************************************************************************
* define module variants
********************************************************************************
*/
static INT8U SendBuf[SIZE_SENDBUF], RecvBuf[SIZE_RECVBUF];
static ROUNDBUF_STRUCT SendRound, RecvRound;
void InitSimUARTS(INT16U baud)
{
InitSimUART(baud);
EnableSimUART();
InitRoundBuf(&SendRound, SendBuf, sizeof(SendBuf), 0);
InitRoundBuf(&RecvRound, RecvBuf, sizeof(RecvBuf), 0);
}
void EnableSimUARTS(void)
{
EnableSimUART();
}
void DisableSimUARTS(void)
{
DisableSimUART();
}
void ClearSimUARTS(void)
{
ResetRoundBuf(&SendRound);
ResetRoundBuf(&RecvRound);
}
INT32S ReadSimUARTS(void)
{
return ReadRoundBuf(&RecvRound);
}
BOOLEAN WriteSimUARTS(INT8U ch)
{
if (!WriteRoundBuf(&SendRound, ch)) {
return false;
}
if (SimUARTReady())
{
WriteSimUART(ReadRoundBuf(&SendRound));
return true;
}
return false;
}
BOOLEAN WriteBlockSimUARTS(INT8U *bptr, INT32U blksize)
{
if (blksize == 0) return true;
if (blksize >= LeftOfRoundBuf(&SendRound)) return false;
WriteBlockRoundBuf(&SendRound,bptr,blksize);
if (SimUARTReady())
{
WriteSimUART(ReadRoundBuf(&SendRound));
}
return true;
}
extern INT8U SimUartIntFlag;
void SimUart_sys_handler(void)
{
INT16S temp;
if (SimUARTRecv()) {
WriteRoundBuf(&RecvRound, ReadSimUART());
}
if (SimUARTReady()) {
if ((temp = ReadRoundBuf(&SendRound)) != -1) {
WriteSimUART(temp);
}
}
}
void SendFromSimUART_BYTE(INT8U ch)
{
WriteSimUARTS(ch);
}
void PrintFromSimUART(char *p)
{
while(*p)
{
if (*p == '\n') {
SendFromSimUART_BYTE(0x0D);
SendFromSimUART_BYTE(0x0A);
p++;
} else {
SendFromSimUART_BYTE(*p++);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?