1
0
mirror of https://github.com/arduino/Arduino.git synced 2024-11-30 11:24:12 +01:00
Arduino/build/shared/lib/avrlib/uart2.h

155 lines
4.7 KiB
C
Raw Normal View History

/*! \file uart2.h \brief Dual UART driver with buffer support. */
//*****************************************************************************
//
// File Name : 'uart2.h'
// Title : Dual UART driver with buffer support
// Author : Pascal Stang - Copyright (C) 2000-2002
// Created : 11/20/2000
// Revised : 07/04/2004
// Version : 1.0
// Target MCU : ATMEL AVR Series
// Editor Tabs : 4
//
// Description : This is a UART driver for AVR-series processors with two
// hardware UARTs such as the mega161 and mega128
//
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************
#ifndef UART2_H
#define UART2_H
#include "global.h"
#include "buffer.h"
// default baud rate
// can be changed by using uartSetBaudRate()
#define UART0_DEFAULT_BAUD_RATE 9600 ///< default baud rate for UART0
#define UART1_DEFAULT_BAUD_RATE 9600 ///< default baud rate for UART1
// buffer memory allocation defines
// buffer sizes
#ifndef UART0_TX_BUFFER_SIZE
#define UART0_TX_BUFFER_SIZE 0x0010 ///< number of bytes for uart0 transmit buffer
#endif
#ifndef UART0_RX_BUFFER_SIZE
#define UART0_RX_BUFFER_SIZE 0x0080 ///< number of bytes for uart0 receive buffer
#endif
#ifndef UART1_TX_BUFFER_SIZE
#define UART1_TX_BUFFER_SIZE 0x0010 ///< number of bytes for uart1 transmit buffer
#endif
#ifndef UART1_RX_BUFFER_SIZE
#define UART1_RX_BUFFER_SIZE 0x0080 ///< number of bytes for uart1 receive buffer
#endif
// define this key if you wish to use
// external RAM for the UART buffers
//#define UART_BUFFER_EXTERNAL_RAM
#ifdef UART_BUFFER_EXTERNAL_RAM
// absolute address of uart0 buffers
#define UART0_TX_BUFFER_ADDR 0x1000
#define UART0_RX_BUFFER_ADDR 0x1100
// absolute address of uart1 buffers
#define UART1_TX_BUFFER_ADDR 0x1200
#define UART1_RX_BUFFER_ADDR 0x1300
#endif
// type of interrupt handler to use
// *do not change unless you know what you're doing
// Value may be SIGNAL or INTERRUPT
#ifndef UART_INTERRUPT_HANDLER
#define UART_INTERRUPT_HANDLER SIGNAL
#endif
// compatibility for the mega161
#ifndef RXCIE
#define RXCIE RXCIE0
#define TXCIE TXCIE0
#define UDRIE UDRIE0
#define RXEN RXEN0
#define TXEN TXEN0
#define CHR9 CHR90
#define RXB8 RXB80
#define TXB8 TXB80
#endif
#ifndef UBRR0L
#define UBRR0L UBRR0
#define UBRR1L UBRR1
#endif
// functions
//! initializes both uarts
void uartInit(void);
//! initializes UART0 only
void uart0Init(void);
//! initializes UART1 only
void uart1Init(void);
//! initializes transmit and receive buffers
// called from uartInit()
void uart0InitBuffers(void);
void uart1InitBuffers(void);
//! redirects received data to a user function
void uartSetRxHandler(u08 nUart, void (*rx_func)(unsigned char c));
//! sets the uart baud rate
void uartSetBaudRate(u08 nUart, u32 baudrate);
//! returns pointer to the receive buffer structure
cBuffer* uartGetRxBuffer(u08 nUart);
//! returns pointer to the transmit buffer structure
cBuffer* uartGetTxBuffer(u08 nUart);
//! sends a single byte over the uart
void uartSendByte(u08 nUart, u08 data);
//! SendByte commands with the UART number hardcoded
// use this with printfInit() - example: printfInit(uart0SendByte);
void uart0SendByte(u08 data);
void uart1SendByte(u08 data);
//! gets a single byte from the uart receive buffer (getchar-style)
// returns the byte, or -1 if no byte is available
int uart0GetByte(void);
int uart1GetByte(void);
//! gets a single byte from the uart receive buffer
// function returns TRUE if data was available, FALSE if not
// actual data is returned in variable pointed to by "data"
// example usage:
// char myReceivedByte;
// uartReceiveByte( &myReceivedByte );
u08 uartReceiveByte(u08 nUart, u08* data);
//! returns TRUE/FALSE if receive buffer is empty/not-empty
u08 uartReceiveBufferIsEmpty(u08 nUart);
//! flushes (deletes) all data from receive buffer
void uartFlushReceiveBuffer(u08 nUart);
//! add byte to end of uart Tx buffer
void uartAddToTxBuffer(u08 nUart, u08 data);
//! AddToTxBuffer commands with the UART number hardcoded
// use this with printfInit() - example: printfInit(uart0AddToTxBuffer);
void uart0AddToTxBuffer(u08 data);
void uart1AddToTxBuffer(u08 data);
//! begins transmission of the transmit buffer under interrupt control
void uartSendTxBuffer(u08 nUart);
//! sends a buffer of length nBytes via the uart using interrupt control
u08 uartSendBuffer(u08 nUart, char *buffer, u16 nBytes);
//! interrupt service handlers
void uartTransmitService(u08 nUart);
void uartReceiveService(u08 nUart);
#endif