/*
LUFA Library
Copyright (C) Dean Camera, 2010.
-
+
dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
+ www.lufa-lib.org
*/
/*
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
- Permission to use, copy, modify, distribute, and sell this
+ Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
+ without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
*
* Driver for the USART subsystem on supported USB AVRs.
*/
-
+
/** \ingroup Group_PeripheralDrivers
* @defgroup Group_Serial Serial USART Driver - LUFA/Drivers/Peripheral/Serial.h
*
*
* @{
*/
-
+
#ifndef __SERIAL_H__
#define __SERIAL_H__
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdbool.h>
-
+
#include "../../Common/Common.h"
#include "../Misc/TerminalCodes.h"
void Serial_TxString(const char* StringPtr) ATTR_NON_NULL_PTR_ARG(1);
/* Inline Functions: */
- /** Initialises the USART, ready for serial data transmission and reception. This initialises the interface to
+ /** Initializes the USART, ready for serial data transmission and reception. This initializes the interface to
* standard 8-bit, no parity, 1 stop bit settings suitable for most applications.
*
* \param[in] BaudRate Serial baud rate, in bits per second.
static inline void Serial_Init(const uint32_t BaudRate,
const bool DoubleSpeed)
{
+ UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
+
+ UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
- UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
-
- DDRD |= (1 << 3);
+
+ DDRD |= (1 << 3);
PORTD |= (1 << 2);
-
- UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
}
/** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
static inline void Serial_ShutDown(void)
{
- UCSR1A = 0;
UCSR1B = 0;
+ UCSR1A = 0;
UCSR1C = 0;
-
- DDRD &= ~(1 << 3);
- PORTD &= ~(1 << 2);
-
+
UBRR1 = 0;
+
+ DDRD &= ~(1 << 3);
+ PORTD &= ~(1 << 2);
}
/** Indicates whether a character has been received through the USART.
{
return ((UCSR1A & (1 << RXC1)) ? true : false);
}
-
+
/** Transmits a given byte through the USART.
*
* \param[in] DataByte Byte to transmit through the USART.
UDR1 = DataByte;
}
- /** Receives a byte from the USART.
+ /** Receives a byte from the USART. This function blocks until a byte has been
+ * received; if non-blocking behaviour is required, test for a received character
+ * beforehand with \ref Serial_IsCharReceived().
*
* \return Byte received from the USART.
*/
static inline char Serial_RxByte(void)
{
while (!(UCSR1A & (1 << RXC1)));
- return UDR1;
+ return UDR1;
}
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
-
+
#endif
/** @} */
+