⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart0print.c

📁 S3C2410学习的基础资料 大部分实验源码及工程
💻 C
字号:
/*
*********************************************************************************************************
* 文件: Uart0Print.C.
* 描述: 串口输出函数.
* 编写: bobey
*********************************************************************************************************
*/
#include  <stdarg.h>
#include  <stdio.h>
#include  "Includes.H"

void Wr_Uart0_Buf (INT8U data);
void StartSend (void);

/*
********************************************************************************************************
* 函数: void Uart0Print (const char *format, ...).
* 描述: 非规定参数输出函数, 与系统的 printf 相应.
********************************************************************************************************
*/
void Uart0Print (const char *format, ...)
{
#define MAX_TBUF	100                             // 注意: 只允许接收改大小的字符串.
 char    tbuf[MAX_TBUF] = {0, };
 va_list v_list;
 char    *ptr;
 INT8U   err;

    OSSemPend (Uart0.Sem, 0, &err);

	va_start(v_list, format);                       // Initialize variable arguments. 
	vsprintf(tbuf, format, v_list ); 
	va_end(v_list);

	ptr= tbuf;
	while(*ptr !=  '\0') {
		Wr_Uart0_Buf(*ptr++);
	}

    StartSend ();

    OSSemPost (Uart0.Sem);

#undef MAX_TBUF
}

/*
********************************************************************************************************
* 函数: void StartSend (void).
* 描述: 判断是否启动发送.
********************************************************************************************************
*/
void StartSend (void)
{
    if (rUTRSTAT0 & (1<<2)) {                        // 启动发送.
        if (Uart0.Rd != Uart0.Wr) {
            rUTXH0 = Uart0.Buffer[Uart0.Rd++];
            if (Uart0.Rd >= Uart0BufSize)
                Uart0.Rd = 0x00;
        }
    }
}

/*
********************************************************************************************************
* 函数: void Wr_Uart0_Buf (INT8U data).
* 描述: 将数据写入发送缓冲区.
********************************************************************************************************
*/
void Wr_Uart0_Buf (INT8U data)
{
    Uart0.Buffer[Uart0.Wr++] = data;
    if (Uart0.Wr >= Uart0BufSize) {
        Uart0.Wr = 0x00;
    }
}

/*
********************************************************************************************************
* End.
********************************************************************************************************
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -