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 + -
显示快捷键?