GPIB_AVR
Defines | Functions
UART Library

Interrupt UART library using the built-in UART with transmit and receive circular buffers. More...

Defines

#define UART_BAUD_SELECT(baudRate, xtalCpu)   ((xtalCpu)/((baudRate)*16l)-1)
 UART Baudrate Expression.
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate, xtalCpu)   (((xtalCpu)/((baudRate)*8l)-1)|0x8000)
 UART Baudrate Expression for ATmega double speed mode.
#define UART_RX_BUFFER_SIZE   32
 Size of the circular receive buffer, must be power of 2.
#define UART_TX_BUFFER_SIZE   32
 Size of the circular transmit buffer, must be power of 2.
#define UART_FRAME_ERROR   0x0800
#define UART_OVERRUN_ERROR   0x0400
#define UART_BUFFER_OVERFLOW   0x0200
#define UART_NO_DATA   0x0100
#define uart_puts_P(__s)   uart_puts_p(PSTR(__s))
 Macro to automatically put a string constant into program memory.
#define uart1_puts_P(__s)   uart1_puts_p(PSTR(__s))
 Macro to automatically put a string constant into program memory.

Functions

void uart_init (unsigned int baudrate)
 Initialize UART and set baudrate.
unsigned int uart_getc (void)
 Get received byte from ringbuffer.
void uart_putc (unsigned char data)
 Put byte to ringbuffer for transmitting via UART.
void uart_puts (const char *s)
 Put string to ringbuffer for transmitting via UART.
void uart_puts_p (const char *s)
 Put string from program memory to ringbuffer for transmitting via UART.
void uart1_init (unsigned int baudrate)
 Initialize USART1 (only available on selected ATmegas)
unsigned int uart1_getc (void)
 Get received byte of USART1 from ringbuffer.
void uart1_putc (unsigned char data)
 Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega)
void uart1_puts (const char *s)
 Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega)
void uart1_puts_p (const char *s)
 Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega)

Detailed Description

Interrupt UART library using the built-in UART with transmit and receive circular buffers.

 #include <uart.h> 

This library can be used to transmit and receive data through the built in UART.

An interrupt is generated when the UART has finished transmitting or receiving a byte. The interrupt handling routines use circular buffers for buffering received and transmitted data.

The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define the size of the circular buffers in bytes. Note that these constants must be a power of 2. You may need to adapt this constants to your target and your application by adding CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile.

Note:
Based on Atmel Application Note AVR306
Author:
Peter Fleury pfleury@gmx.ch http://jump.to/fleury

Define Documentation

#define uart1_puts_P (   __s)    uart1_puts_p(PSTR(__s))

Macro to automatically put a string constant into program memory.

#define UART_BAUD_SELECT (   baudRate,
  xtalCpu 
)    ((xtalCpu)/((baudRate)*16l)-1)

UART Baudrate Expression.

Parameters:
xtalcpusystem clock in Mhz, e.g. 4000000L for 4Mhz
baudratebaudrate in bps, e.g. 1200, 2400, 9600
#define UART_BAUD_SELECT_DOUBLE_SPEED (   baudRate,
  xtalCpu 
)    (((xtalCpu)/((baudRate)*8l)-1)|0x8000)

UART Baudrate Expression for ATmega double speed mode.

Parameters:
xtalcpusystem clock in Mhz, e.g. 4000000L for 4Mhz
baudratebaudrate in bps, e.g. 1200, 2400, 9600
#define UART_BUFFER_OVERFLOW   0x0200

Referenced by debugshell(), and input_process().

#define UART_FRAME_ERROR   0x0800

Referenced by debugshell(), and input_process().

#define UART_NO_DATA   0x0100

Referenced by debugshell(), and input_process().

#define UART_OVERRUN_ERROR   0x0400

Referenced by debugshell(), and input_process().

#define uart_puts_P (   __s)    uart_puts_p(PSTR(__s))

Macro to automatically put a string constant into program memory.

Referenced by debugshell(), and input_process().

#define UART_RX_BUFFER_SIZE   32

Size of the circular receive buffer, must be power of 2.

#define UART_TX_BUFFER_SIZE   32

Size of the circular transmit buffer, must be power of 2.


Function Documentation

unsigned int uart1_getc ( void  )

Get received byte of USART1 from ringbuffer.

(only available on selected ATmega)

See also:
uart_getc
void uart1_init ( unsigned int  baudrate)

Initialize USART1 (only available on selected ATmegas)

See also:
uart_init
void uart1_putc ( unsigned char  data)

Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega)

See also:
uart_putc
void uart1_puts ( const char *  s)

Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega)

See also:
uart_puts
void uart1_puts_p ( const char *  s)

Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega)

See also:
uart_puts_p
unsigned int uart_getc ( void  )

Get received byte from ringbuffer.

Returns in the lower byte the received character and in the higher byte the last receive error. UART_NO_DATA is returned when no data is available.

Parameters:
void
Returns:
lower byte: received byte from ringbuffer
higher byte: last receive status
  • 0 successfully received data from UART
  • UART_NO_DATA
    no receive data available
  • UART_BUFFER_OVERFLOW
    Receive ringbuffer overflow. We are not reading the receive buffer fast enough, one or more received character have been dropped
  • UART_OVERRUN_ERROR
    Overrun condition by UART. A character already present in the UART UDR register was not read by the interrupt handler before the next character arrived, one or more received characters have been dropped.
  • UART_FRAME_ERROR
    Framing Error by UART

Referenced by debugshell(), and input_process().

void uart_init ( unsigned int  baudrate)

Initialize UART and set baudrate.

Parameters:
baudrateSpecify baudrate using macro UART_BAUD_SELECT()
Returns:
none
void uart_putc ( unsigned char  data)

Put byte to ringbuffer for transmitting via UART.

Parameters:
databyte to be transmitted
Returns:
none

Referenced by debugshell(), input_process(), and main().

void uart_puts ( const char *  s)

Put string to ringbuffer for transmitting via UART.

The string is buffered by the uart library in a circular buffer and one character at a time is transmitted to the UART using interrupts. Blocks if it can not write the whole string into the circular buffer.

Parameters:
sstring to be transmitted
Returns:
none

Referenced by _gpib_write(), debugshell(), gpib_info(), gpib_receive(), gpib_serial_poll(), main(), and printHelp().

void uart_puts_p ( const char *  s)

Put string from program memory to ringbuffer for transmitting via UART.

The string is buffered by the uart library in a circular buffer and one character at a time is transmitted to the UART using interrupts. Blocks if it can not write the whole string into the circular buffer.

Parameters:
sprogram memory string to be transmitted
Returns:
none
See also:
uart_puts_P