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

📄 uart_api.c

📁 这是一个ucos下看门狗的驱动程序
💻 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 + -