📄 uart_api.c
字号:
/****************************************Copyright (c)**************************************************
**
**
** 杭州央海软件科技有限公司
**
** http://www.armgcc.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: uart_app.c
** 创 建 人: 罗辉联
** 创建日期: 2006年7月23日
** 描 述: 串口应用程序函数定义,变量声明等
**
**--------------历史版本--------------------------------------------------------------------------------
** 修 改 人: 罗辉联
** 版 本: V1.0
** 日 期: 2006年7月23日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
/******************************************* 局部宏定义 ************************************************/
#define UART_GPIO GPIO0
#define UART_RX_PIN (UART3_RX_PIN)
#define UART_TX_PIN (UART3_TX_PIN)
#define UART_NUMBER UART3
#define UART_IRQ_NUMBER UART3_IRQ
typedef char * uart_va_list;
#define uart_sizeof_int(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))
#define uart_va_start(ap,v) (ap = (uart_va_list)&v +uart_sizeof_int(v))
#define uart_va_arg(ap,t) (*(t *)((ap += uart_sizeof_int(t)) - uart_sizeof_int(t)))
#define uart_va_end(ap) (ap = (uart_va_list)0)
#define UART_SEND_BYTE(ch) UART_ByteSend(UART_NUMBER, (UWORD8 *)(ch))
/**************************************** 局部函数原型声明 *********************************************/
/*********************************************************************************************************
;** 函数名称: uart3_init
;** 功能描述: 串口应用初始化函数:串口管脚分配,串口属性配置,串口打开关闭配置
;** 串口中断配置,接收缓冲区初始化,该函数被主程序在初始化时调用
;**
;** 参 数: 无
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 罗辉联
;** 日 期: 2006年6月10日
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void uart3_init(UWORD32 bps)
{
GPIO_ModeConfig(UART_GPIO, UART_TX_PIN, GPIO_AF_PP); //选择GPIO PIN 作为串口管脚使用
GPIO_ModeConfig(UART_GPIO, UART_RX_PIN, GPIO_IN_COMS);
UART_ONOFFConfig(UART_NUMBER, ENABLE); //打开 UART
UART_FIFOConfig(UART_NUMBER, DISABLE); //禁止 FIFOs
UART_FIFOReset(UART_NUMBER, UART_RXFIFO); //复位 UART_RxFIFO
UART_FIFOReset(UART_NUMBER, UART_TXFIFO); //复位 UART_TxFIFO
UART_LoopbackConfig(UART_NUMBER, DISABLE); //禁止 Loop Back
//串口属性:No parity
UART_AttributeConfig(UART_NUMBER, bps, UART_NO_PARITY, UART_1_0_STOPBITS, UARTM_8D);
//-Baudrate=57600Bps
//-1 stop bit
//-8 data bits
UART_RXConfig(UART_NUMBER, ENABLE); //允许RX
//允许TxEmptyIE,RxBufNotEmptyIE中断
UART_ITConfig(UART_NUMBER,/*UART_RXHALFFULL*/UART_RXBUFFULL,ENABLE);
//IRQ_PriorityConfig(UART_IRQ_NUMBER,5); //设置UART0中断优先级
//IRQ_ONEITConfig(UART_IRQ_NUMBER,ENABLE); //允许UART0全局中断
}
/*********************************************************************************************************
;** 函数名称: uart_printf
;** 功能描述: 以查询的方式向串口发送字符串
;**
;** 参 数: format: 将要发送的字符串
;**
;** 返 回 值: 无
;**
;** 作 者: 李海军
;** 日 期: 2006年5月21日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void uart_printf(char * format, ...)
{
char * s = 0;
int d = 0, i = 0;
unsigned char ch[sizeof(int) * 2 + 2] = {0};
uart_va_list ap = 0;
uart_va_start(ap, format);
while (* format)
{
if (* format != '%')
{
UART_SEND_BYTE(format++);
continue;
}
switch (*(++format))
{
case 's':
case 'S':
s = uart_va_arg(ap, char *);
for ( ; *s; s++)
{
UART_SEND_BYTE(s);
}
break;
case 'c':
case 'C':
UART_SEND_BYTE(uart_va_arg(ap, char));
break;
case 'd':
case 'D':
d = uart_va_arg(ap, int);
for(i = 0; i < sizeof(int) * 2; i++)
{
ch[i] = (unsigned char)(d&0x0f) + '0';
if(ch[i] > '9')
ch[i] += 7;
d >>= 4;
}
ch[i++] = 'x';
ch[i] = '0';
for(i = sizeof(int) * 2 + 2; i > 0; i--)
UART_SEND_BYTE(&ch[i -1]);
break;
default:
UART_SEND_BYTE(format);
break;
}
format++;
}
ch[0] = '\n';
UART_SEND_BYTE(&ch[0]);
uart_va_end(ap);
}
/********************************************* end of file ********************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -