diff options
Diffstat (limited to 'LUFA/Drivers/Peripheral/AVR8/Serial.h')
-rw-r--r-- | LUFA/Drivers/Peripheral/AVR8/Serial.h | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/LUFA/Drivers/Peripheral/AVR8/Serial.h b/LUFA/Drivers/Peripheral/AVR8/Serial.h index 282528bb0..0421dea73 100644 --- a/LUFA/Drivers/Peripheral/AVR8/Serial.h +++ b/LUFA/Drivers/Peripheral/AVR8/Serial.h @@ -80,7 +80,7 @@ */
static inline bool Serial_IsCharReceived(void);
#else
- #define Serial_IsCharReceived() /* TODO */
+ #define Serial_IsCharReceived() ((UCSR1A & (1 << RXC1)) ? true : false)
#endif
/* Inline Functions: */
@@ -92,13 +92,27 @@ */
static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)
{
- // TODO
+ UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
+ UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
+ UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
+
+ 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)
{
- // TODO
+ UCSR1A = 0;
+ UCSR1B = 0;
+ UCSR1C = 0;
+
+ DDRD &= ~(1 << 3);
+ PORTD &= ~(1 << 2);
+
+ UBRR1 = 0;
}
/** Transmits a given byte through the USART.
@@ -107,7 +121,8 @@ */
static inline void Serial_TxByte(const char DataByte)
{
- // TODO
+ while (!(UCSR1A & (1 << UDRE1)));
+ UDR1 = DataByte;
}
/** Receives a byte from the USART.
@@ -116,7 +131,8 @@ */
static inline uint8_t Serial_RxByte(void)
{
- // TODO
+ while (!(UCSR1A & (1 << RXC1)));
+ return UDR1;
}
/* Disable C linkage for C++ Compilers: */
|