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

📄 usart.h.svn-base

📁 AVR单片机下
💻 SVN-BASE
字号:
/*                ****ROBOCON 2009 | BUPT TEAM*******
 * ------------------------------------------------------------------------
 * FileName   : usart.h
 * Version    : 1.0
 * Brief      : Usart driver, use Queue
 * Code by    : Leaf
 * Date       : Dec.08, 2008
 * Note       : Dependence: queue.c queue.h
 *
 *
 * ------------------------------------------------------------------------
 */

#ifndef USART_H_INCLUDED
#define USART_H_INCLUDED

#include "includes.h"

#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <lib_bupt/usart.h>"
# define F_CPU 14745600UL
#endif

/*根据所需波特率计算UBRR, baud要为long型,一般用于串口初始化时*/
#define UBRR_FROM_BAUD(baud) (F_CPU/(16*(baud))-1)
/*默认的缓冲区大小*/
#define USART_RECVBUF_SIZE    64
#define USART_SENDBUF_SIZE    64

typedef enum{
	usart_mode_stop = 0,
	usart_mode_send = 1,
	usart_mode_recv = 2,
	usart_mode_dual = 3
}UsartMode;
typedef UINT16 Ubrr;

typedef struct{
	volatile uint8_t *ubrrh;
	volatile uint8_t *ubrrl;
	volatile uint8_t *ucsra;
	volatile uint8_t *ucsrb;
	volatile uint8_t *ucsrc;
	volatile uint8_t *udr;
	UINT8            recv_buf;
	Mutex            *recvSignal;
	Mutex            *sendOver;
	Mutex            *sendLock;
}Usart;

/*为维护之前接口,在Usart中为atmega128定义两个串口变量*/
extern Usart USART0;
extern Usart USART1;
extern void usartGetLock( Usart *u);
extern void usartUnLock( Usart *u );
extern void usartInit(Usart* usart, Ubrr baudrate);
extern void usartSetStopBits(Usart *u, UINT8 stopbits);
extern void usartSetBaudrate(Usart *usart, UINT32 baudrate);
extern void usartPutc(Usart* usart, char c);
extern inline void usartTxIsr(Usart* usart);
extern void usartSendString(Usart *usart, const char *str);
extern void usartPuts(Usart *usart, const char* str);
extern int  usartWrite(Usart *usart, const void *buf, size_t size);
extern void usartWaitSend(Usart *usart);
extern void usartSetMode(Usart *usart, UsartMode mode);

extern char usartGetc(Usart *usart);
extern int  usartRead(Usart *usart, void *buf, size_t size);
extern int  usartGets(Usart *usart, char *buf);
extern int  usartReadline(Usart *usart, char *buf);
extern void usartFlush(Usart *usart );
extern inline void usartRxIsr(Usart *usart);
extern void usartRecvBufclear(Usart *usart);

#ifdef _STDIO_H_
extern FILE* usart_get_stream(Usart *usart);
extern void inline usart_setup_stream(Usart *usart, FILE* stream);
#endif

#endif

⌨️ 快捷键说明

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