diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c index 892d1c21cd..cab978a854 100644 --- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c +++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c @@ -53,13 +53,13 @@ TMC_Capabilities_t Capabilities = }; /** Current TMC control request that is being processed */ -uint8_t RequestInProgress = 0; +uint8_t RequestInProgress = 0; /** Stream callback abort flag for bulk IN data */ -bool IsTMCBulkINReset = false; +bool IsTMCBulkINReset = false; /** Stream callback abort flag for bulk OUT data */ -bool IsTMCBulkOUTReset = false; +bool IsTMCBulkOUTReset = false; /** Last used tag value for data transfers */ uint8_t CurrentTransferTag = 0; diff --git a/LUFA/Drivers/Peripheral/Serial.h b/LUFA/Drivers/Peripheral/Serial.h index 4eb74b9d24..47f65ea7bc 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. */ diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 202cd2ce5e..789cb898eb 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -65,6 +65,8 @@ * - Fixed MIDI_Device_SendEventPacket() not correctly waiting for the endpoint to become ready (thanks to Robin Green) * - Fixed Benito and USBtoSerial projects not turning off the USART before reconfiguring it, which could cause incorrect * operation to occur (thanks to Bob Paddock) + * - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation + * to occur (thanks to Bob Paddock) * * \section Sec_ChangeLog100513 Version 100513 * New: diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c index d7df3d91fb..4f3fcf524d 100644 --- a/Projects/USBtoSerial/USBtoSerial.c +++ b/Projects/USBtoSerial/USBtoSerial.c @@ -86,7 +86,7 @@ int main(void) if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer))) RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte); - /* Check if the software USART flush timer has expired */ + /* Check if the UART receive buffer flush timer has expired */ if (TIFR0 & (1 << TOV0)) { TIFR0 |= (1 << TOV0); diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c index 7a1bcb34de..7272fd8256 100644 --- a/Projects/XPLAINBridge/XPLAINBridge.c +++ b/Projects/XPLAINBridge/XPLAINBridge.c @@ -124,7 +124,7 @@ void UARTBridge_Task(void) if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUART_Buffer))) RingBuffer_AtomicInsert(&USBtoUART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)); - /* Check if the software UART flush timer has expired */ + /* Check if the UART receive buffer flush timer has expired */ if (TIFR0 & (1 << TOV0)) { TIFR0 |= (1 << TOV0);