Fixed Serial peripheral driver not turning off the USART before reconfiguring it...
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 31 Jul 2010 06:55:47 +0000 (06:55 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 31 Jul 2010 06:55:47 +0000 (06:55 +0000)
Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.c
LUFA/Drivers/Peripheral/Serial.h
LUFA/ManPages/ChangeLog.txt
Projects/USBtoSerial/USBtoSerial.c
Projects/XPLAINBridge/XPLAINBridge.c

index 892d1c2..cab978a 100644 (file)
@@ -53,13 +53,13 @@ TMC_Capabilities_t Capabilities =
        };\r
 \r
 /** Current TMC control request that is being processed */\r
        };\r
 \r
 /** Current TMC control request that is being processed */\r
-uint8_t RequestInProgress   = 0;\r
+uint8_t RequestInProgress = 0;\r
 \r
 /** Stream callback abort flag for bulk IN data */\r
 \r
 /** Stream callback abort flag for bulk IN data */\r
-bool IsTMCBulkINReset      = false;\r
+bool IsTMCBulkINReset = false;\r
 \r
 /** Stream callback abort flag for bulk OUT data */\r
 \r
 /** Stream callback abort flag for bulk OUT data */\r
-bool IsTMCBulkOUTReset     = false;\r
+bool IsTMCBulkOUTReset = false;\r
 \r
 /** Last used tag value for data transfers */\r
 uint8_t CurrentTransferTag = 0;\r
 \r
 /** Last used tag value for data transfers */\r
 uint8_t CurrentTransferTag = 0;\r
index 4eb74b9..47f65ea 100644 (file)
                        static inline void Serial_Init(const uint32_t BaudRate,
                                                       const bool DoubleSpeed)
                        {
                        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));
                                UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
                                UCSR1B = ((1 << TXEN1)  | (1 << RXEN1));
-                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
                                
                                
-                               DDRD  |= (1 << 3);      
+                               DDRD  |= (1 << 3);
                                PORTD |= (1 << 2);
                                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)
                        {
                        }
 
                        /** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
                        static inline void Serial_ShutDown(void)
                        {
-                               UCSR1A = 0;
                                UCSR1B = 0;
                                UCSR1B = 0;
+                               UCSR1A = 0;
                                UCSR1C = 0;
                                UCSR1C = 0;
+
+                               UBRR1  = 0;
                                
                                
-                               DDRD  &= ~(1 << 3);     
+                               DDRD  &= ~(1 << 3);
                                PORTD &= ~(1 << 2);
                                PORTD &= ~(1 << 2);
-                               
-                               UBRR1  = 0;
                        }
 
                        /** Indicates whether a character has been received through the USART.
                        }
 
                        /** Indicates whether a character has been received through the USART.
                                UDR1 = DataByte;
                        }
 
                                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.
                         */
                         *
                         *  \return Byte received from the USART.
                         */
index 202cd2c..789cb89 100644 (file)
@@ -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 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>
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>
index d7df3d9..4f3fcf5 100644 (file)
@@ -86,7 +86,7 @@ int main(void)
                if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer)))
                  RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte);           
                
                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);
                if (TIFR0 & (1 << TOV0))
                {
                        TIFR0 |= (1 << TOV0);
index 7a1bcb3..7272fd8 100644 (file)
@@ -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));
        
        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);
        if (TIFR0 & (1 << TOV0))
        {
                TIFR0 |= (1 << TOV0);