Fixed software PDI/TPI programming mode in the AVRISP project not correctly toggling...
[pub/USBasp.git] / LUFA / Drivers / Peripheral / AVR8 / Serial.h
index 282528b..0421dea 100644 (file)
@@ -80,7 +80,7 @@
                                 */\r
                                static inline bool Serial_IsCharReceived(void);\r
                        #else\r
-                               #define Serial_IsCharReceived() /* TODO */\r
+                               #define Serial_IsCharReceived() ((UCSR1A & (1 << RXC1)) ? true : false)\r
                        #endif\r
 \r
                /* Inline Functions: */\r
                         */\r
                        static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)\r
                        {\r
-                               // TODO\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
                        /** Turns off the USART driver, disabling and returning used hardware to their default configuration. */\r
                        static inline void Serial_ShutDown(void)\r
                        {\r
-                               // TODO\r
+                               UCSR1A = 0;\r
+                               UCSR1B = 0;\r
+                               UCSR1C = 0;\r
+                               \r
+                               DDRD  &= ~(1 << 3);     \r
+                               PORTD &= ~(1 << 2);\r
+                               \r
+                               UBRR1  = 0;\r
                        }\r
                        \r
                        /** Transmits a given byte through the USART.\r
                         */\r
                        static inline void Serial_TxByte(const char DataByte)\r
                        {\r
-                               // TODO\r
+                               while (!(UCSR1A & (1 << UDRE1)));\r
+                               UDR1 = DataByte;\r
                        }\r
 \r
                        /** Receives a byte from the USART.\r
                         */\r
                        static inline uint8_t Serial_RxByte(void)\r
                        {\r
-                               // TODO\r
+                               while (!(UCSR1A & (1 << RXC1)));\r
+                               return UDR1; \r
                        }\r
 \r
        /* Disable C linkage for C++ Compilers: */\r