diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-07-31 06:55:47 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-07-31 06:55:47 +0000 |
commit | 9597b33c3320969b8ca53aff0b1b38ee1fa24949 (patch) | |
tree | ad279011a88faca732b49d6bf1c2a362dd28417e | |
parent | 612df774d9fbddc2e9cb36e6bca849746aa925f5 (diff) | |
download | lufa-9597b33c3320969b8ca53aff0b1b38ee1fa24949.tar.gz lufa-9597b33c3320969b8ca53aff0b1b38ee1fa24949.tar.bz2 lufa-9597b33c3320969b8ca53aff0b1b38ee1fa24949.zip |
Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation to occur (thanks to Bob Paddock).
-rw-r--r-- | Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c | 6 | ||||
-rw-r--r-- | LUFA/Drivers/Peripheral/Serial.h | 20 | ||||
-rw-r--r-- | LUFA/ManPages/ChangeLog.txt | 2 | ||||
-rw-r--r-- | Projects/USBtoSerial/USBtoSerial.c | 2 | ||||
-rw-r--r-- | Projects/XPLAINBridge/XPLAINBridge.c | 2 |
5 files changed, 18 insertions, 14 deletions
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c index 892d1c21c..cab978a85 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 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. */ diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 202cd2ce5..789cb898e 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 * <b>New:</b> diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c index d7df3d91f..4f3fcf524 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 7a1bcb34d..7272fd825 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); |