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

📄 usart.h

📁 Avr单片机半双工模式Usart驱动
💻 H
字号:
/*                ****ROBOCON 2009 | BUPT TEAM*******
 * ------------------------------------------------------------------------
 * FileName   : usart.h
 * Version    : 1.0
 * Biref      : 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"
#define Q_DATA_TYPE char
#define Q_SIZE_TYPE UINT8
#include "queue.h"

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

#define UBRR_FROM_BAUD(baud) (F_CPU/(16*(baud))-1)
#define UART_SENDBUF_SIZE    32
#define UART_RECVBUF_SIZE    32

typedef enum{
	usart_mode_stop = 0,
	usart_mode_send = 1,
	usart_mode_recv
}UsartMode;

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;
	Queue            *send_buf;
	Queue            *recv_buf;
}Usart;

extern const Usart USART0;
extern const Usart USART1;

extern void usart_init(const Usart* usart, UINT16 baudrate);
extern void usart_putc(const Usart* usart, char c);
extern void usart_tx_isr(const Usart* usart);
extern void usart_puts(const Usart *usart, const char* str);
#ifdef _STDIO_H_
extern FILE* usart_get_stream(const Usart *usart);
extern void inline usart_setup_stream(const Usart *usart, FILE* stream);
#endif

#define uart0_tx_isr()     usart_tx_isr(&USART0)
#define uart0_init(ubrr)   usart_init(&USART0, (ubrr))
#define u0_putc(c)         usart_putc(&USART0, (c))
#define u0_puts(s)         usart_puts(&USART0, (s))

#define uart1_tx_isr()     usart_tx_isr(&USART1)
#define uart1_init(ubrr)   usart_init(&USART1, (ubrr))
#define u1_putc(c)         usart_putc(&USART1, (c))
#define u1_puts(s)         usart_puts(&USART1, (s))

char usart_getc(const Usart *usart);
int  usart_gets(const Usart *usart, char *buf);
int  usart_flush(const Usart *usart, char *buf);
void usart_rx_isr(const Usart *usart);

#endif

⌨️ 快捷键说明

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