From 9597b33c3320969b8ca53aff0b1b38ee1fa24949 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sat, 31 Jul 2010 06:55:47 +0000 Subject: Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation to occur (thanks to Bob Paddock). --- LUFA/Drivers/Peripheral/Serial.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'LUFA/Drivers') diff --git a/LUFA/Drivers/Peripheral/Serial.h b/LUFA/Drivers/Peripheral/Serial.h index 4eb74b9d2..47f65ea7b 100644 --- a/LUFA/Drivers/Peripheral/Serial.h +++ b/LUFA/Drivers/Peripheral/Serial.h @@ -99,27 +99,27 @@ 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; + + UBRR1 = 0; - DDRD &= ~(1 << 3); + DDRD &= ~(1 << 3); PORTD &= ~(1 << 2); - - UBRR1 = 0; } /** Indicates whether a character has been received through the USART. @@ -143,7 +143,9 @@ 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. */ -- cgit v1.2.3