Serial driver now correctly calculates the baud register value when in double speed...
authorDean Camera <dean@fourwalledcubicle.com>
Thu, 7 May 2009 11:12:23 +0000 (11:12 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Thu, 7 May 2009 11:12:23 +0000 (11:12 +0000)
Init function of the Serial driver is now static inline to product smaller code for the common-case of static init.

LUFA/ChangeLog.txt
LUFA/Drivers/Peripheral/Serial.c
LUFA/Drivers/Peripheral/Serial.h

index 98b82d3..bca8d9f 100644 (file)
@@ -78,6 +78,8 @@
   *  - Changed LED board driver code to define dummy LED masks for the first four board LEDs, so that user code can be compiled for boards\r
   *    with less than four LEDs without code modifications (thanks to Morten Lund)\r
   *  - Changed HWB board driver to Buttons driver, to allow for the support of future boards with more than one mounted GPIO button\r
   *  - Changed LED board driver code to define dummy LED masks for the first four board LEDs, so that user code can be compiled for boards\r
   *    with less than four LEDs without code modifications (thanks to Morten Lund)\r
   *  - Changed HWB board driver to Buttons driver, to allow for the support of future boards with more than one mounted GPIO button\r
+  *  - Serial driver now correctly calculates the baud register value when in double speed mode\r
+  *  - Init function of the Serial driver is now static inline to product smaller code for the common-case of static init values\r
   *    \r
   *\r
   *  \section Sec_ChangeLog090401 Version 090401\r
   *    \r
   *\r
   *  \section Sec_ChangeLog090401 Version 090401\r
index e1c7449..f9aa6a7 100644 (file)
 \r
 #include "Serial.h"\r
 \r
 \r
 #include "Serial.h"\r
 \r
-void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)\r
-{\r
-       UCSR1A = ((DoubleSpeed) ? (1 << U2X1) : 0);\r
-       UCSR1B = ((1 << RXEN1)  | (1 << TXEN1));\r
-       UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));\r
-       \r
-       DDRD  |= (1 << 3);      \r
-       PORTD |= (1 << 2);\r
-       \r
-       UBRR1  = SERIAL_UBBRVAL(BaudRate);\r
-}\r
-\r
 void Serial_TxString_P(const char *FlashStringPtr)\r
 {\r
        uint8_t CurrByte;\r
 void Serial_TxString_P(const char *FlashStringPtr)\r
 {\r
        uint8_t CurrByte;\r
index a50456b..7e718fe 100644 (file)
@@ -63,7 +63,7 @@
                #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
                #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
-               /* Macros: */   \r
+               /* Macros: */\r
                        /** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is\r
                         *  not set.\r
                         */\r
                        /** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is\r
                         *  not set.\r
                         */\r
                        #endif\r
 \r
                /* Function Prototypes: */\r
                        #endif\r
 \r
                /* Function Prototypes: */\r
-                       /** Initializes the USART, ready for serial data transmission and reception.\r
-                        *\r
-                        *  \param BaudRate     Baud rate to configure the USART to\r
-                        *  \param DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate\r
-                        */\r
-                       void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed);\r
-\r
                        /** Transmits a given string located in program space (FLASH) through the USART.\r
                         *\r
                         *  \param FlashStringPtr  Pointer to a string located in program space\r
                        /** Transmits a given string located in program space (FLASH) through the USART.\r
                         *\r
                         *  \param FlashStringPtr  Pointer to a string located in program space\r
                        void Serial_TxString(const char *StringPtr) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                /* Inline Functions: */\r
                        void Serial_TxString(const char *StringPtr) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                /* Inline Functions: */\r
+                       /** Initializes the USART, ready for serial data transmission and reception. This initialises the interface to\r
+                        *  standard 8-bit, no parity, 1 stop bit settings suitable for most applications.\r
+                        *\r
+                        *  \param BaudRate     Serial baud rate, in bits per second\r
+                        *  \param DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate\r
+                        */\r
+                       static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)\r
+                       {\r
+                               UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);\r
+                               UCSR1B = ((1 << TXEN1)  | (1 << RXEN1));\r
+                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));\r
+                               \r
+                               DDRD  |= (1 << 3);      \r
+                               PORTD |= (1 << 2);\r
+                               \r
+                               UBRR1  = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));\r
+                       }\r
+\r
                        /** Transmits a given byte through the USART.\r
                         *\r
                         *  \param DataByte  Byte to transmit through the USART\r
                        /** Transmits a given byte through the USART.\r
                         *\r
                         *  \param DataByte  Byte to transmit through the USART\r