usart.h.svn-base

来自「AVR单片机下」· SVN-BASE 代码 · 共 82 行

SVN-BASE
82
字号
/*                ****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 + =
减小字号Ctrl + -
显示快捷键?