Speed up bit-banged USART code in the AVRISP project.
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / LowLevel.h
index 4279ca3..8b441c2 100644 (file)
 \r
        /* Preprocessor Checks and Defines: */\r
                #if !defined(F_CLOCK)\r
 \r
        /* Preprocessor Checks and Defines: */\r
                #if !defined(F_CLOCK)\r
-                       #error F_CLOCK is not defined. You must device F_CLOCK to the frequency of the unprescaled input clock in your project makefile.\r
+                       #error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled input clock in your project makefile.\r
                #endif\r
        \r
                #if (F_CLOCK == 8000000)\r
                #endif\r
        \r
                #if (F_CLOCK == 8000000)\r
-                       #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
+                       #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+                            defined(__AVR_ATMEGA8U2__) || defined(__AVR_ATMEGA16U2__))\r
                                #define USB_PLL_PSC                0\r
                                #define USB_PLL_PSC                0\r
-                       #elif (defined(__AVR_AT90USB646__)  || defined(__AVR_AT90USB647__)  || \\r
-                              defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || \\r
-                                  defined(__AVR_ATmega32U6__))\r
-                               #define USB_PLL_PSC                ((1 << PLLP1) | (1 << PLLP0))\r
                        #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
                                #define USB_PLL_PSC                0\r
                        #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
                                #define USB_PLL_PSC                0\r
+                       #elif (defined(__AVR_AT90USB646__)  || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP1) | (1 << PLLP0))\r
+                       #elif (defined(__AVR_AT90USB647__)  || defined(__AVR_AT90USB1287__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP1) | (1 << PLLP0))\r
                        #endif\r
                #elif (F_CLOCK == 16000000)\r
                        #endif\r
                #elif (F_CLOCK == 16000000)\r
-                       #if (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))\r
-                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP1))\r
-                       #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))\r
-                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP0))\r
-                       #elif (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__))\r
+                       #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+                            defined(__AVR_ATMEGA8U2__) || defined(__AVR_ATMEGA16U2__))\r
                                #define USB_PLL_PSC                (1 << PLLP0)\r
                        #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
                                #define USB_PLL_PSC                (1 << PINDIV)\r
                                #define USB_PLL_PSC                (1 << PLLP0)\r
                        #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
                                #define USB_PLL_PSC                (1 << PINDIV)\r
+                       #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP1))\r
+                       #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP0))\r
                        #endif\r
                #endif\r
                \r
                        #endif\r
                #endif\r
                \r
                         *  USB interface is or should be initialized in the USB device mode.\r
                         */\r
                        #define USB_MODE_DEVICE                    1\r
                         *  USB interface is or should be initialized in the USB device mode.\r
                         */\r
                        #define USB_MODE_DEVICE                    1\r
-\r
-                       #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)\r
-                               /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
-                                *  USB interface is or should be initialized in the USB host mode.\r
-                                *\r
-                                *  \note This token is not available on AVR models which do not support host mode.\r
-                                */\r
-                               #define USB_MODE_HOST                  2\r
-                       #endif\r
+                       \r
+                       /** Mode mask for the \ref USB_CurrentMode global and the \ref USB_Init() function. This indicates that the\r
+                        *  USB interface is or should be initialized in the USB host mode.\r
+                        */\r
+                       #define USB_MODE_HOST                      2\r
                        \r
                        #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)\r
                                /** Mode mask for the the \ref USB_Init() function. This indicates that the USB interface should be\r
                        \r
                        #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)\r
                                /** Mode mask for the the \ref USB_Init() function. This indicates that the USB interface should be\r
                         */\r
                        #define EP_TYPE_INTERRUPT                  0x03\r
 \r
                         */\r
                        #define EP_TYPE_INTERRUPT                  0x03\r
 \r
-                       #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
                                /** Returns boolean true if the VBUS line is currently high (i.e. the USB host is supplying power),\r
                                 *  otherwise returns false.\r
                                 *\r
                                /** Returns boolean true if the VBUS line is currently high (i.e. the USB host is supplying power),\r
                                 *  otherwise returns false.\r
                                 *\r
                        #endif\r
 \r
                        /** Detaches the device from the USB bus. This has the effect of removing the device from any\r
                        #endif\r
 \r
                        /** Detaches the device from the USB bus. This has the effect of removing the device from any\r
-                        *  host if, ceasing USB communications. If no host is present, this prevents any host from\r
+                        *  attached host, ceasing USB communications. If no host is present, this prevents any host from\r
                         *  enumerating the device once attached until \ref USB_Attach() is called.\r
                         */\r
                        #define USB_Detach()                    MACROS{ UDCON  |=  (1 << DETACH);  }MACROE\r
                         *  enumerating the device once attached until \ref USB_Attach() is called.\r
                         */\r
                        #define USB_Detach()                    MACROS{ UDCON  |=  (1 << DETACH);  }MACROE\r
                         *  Calling this function when the USB interface is already initialized will cause a complete USB\r
                         *  interface reset and re-enumeration.\r
                         *\r
                         *  Calling this function when the USB interface is already initialized will cause a complete USB\r
                         *  interface reset and re-enumeration.\r
                         *\r
-                        *  \param Mode     This is a mask indicating what mode the USB interface is to be initialized to.\r
-                        *                  Valid mode masks are \ref USB_MODE_DEVICE, \ref USB_MODE_HOST or \ref USB_MODE_UID.\r
+                        *  \param[in] Mode     This is a mask indicating what mode the USB interface is to be initialized to.\r
+                        *                      Valid mode masks are \ref USB_MODE_DEVICE, \ref USB_MODE_HOST or \ref USB_MODE_UID.\r
                         *\r
                         *\r
-                        *  \param Options  Mask indicating the options which should be used when initializing the USB\r
-                        *                  interface to control the USB interface's behaviour. This should be comprised of\r
-                        *                  a USB_OPT_REG_* mask to control the regulator, a USB_OPT_*_PLL mask to control the\r
-                        *                  PLL, and a USB_DEVICE_OPT_* mask (when the device mode is enabled) to set the device\r
-                        *                  mode speed.\r
+                        *  \param[in] Options  Mask indicating the options which should be used when initializing the USB\r
+                        *                      interface to control the USB interface's behaviour. This should be comprised of\r
+                        *                      a USB_OPT_REG_* mask to control the regulator, a USB_OPT_*_PLL mask to control the\r
+                        *                      PLL, and a USB_DEVICE_OPT_* mask (when the device mode is enabled) to set the device\r
+                        *                      mode speed.\r
                         *\r
                         *  \note To reduce the FLASH requirements of the library if only device or host mode is required, \r
                         *        this can be statically set via defining the token USB_DEVICE_ONLY for device mode or \r
                         *\r
                         *  \note To reduce the FLASH requirements of the library if only device or host mode is required, \r
                         *        this can be statically set via defining the token USB_DEVICE_ONLY for device mode or \r
                                 *        changed in value.\r
                                 */\r
                                extern volatile uint8_t USB_CurrentMode;\r
                                 *        changed in value.\r
                                 */\r
                                extern volatile uint8_t USB_CurrentMode;\r
+                       #elif defined(USB_HOST_ONLY)\r
+                               #define USB_CurrentMode USB_MODE_HOST\r
+                       #elif defined(USB_DEVICE_ONLY)\r
+                               #define USB_CurrentMode USB_MODE_DEVICE\r
                        #endif\r
                        \r
                        #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__)\r
                        #endif\r
                        \r
                        #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__)\r
                                 *        changed in value.\r
                                 */\r
                                extern volatile uint8_t USB_Options;\r
                                 *        changed in value.\r
                                 */\r
                                extern volatile uint8_t USB_Options;\r
+                       #elif defined(USE_STATIC_OPTIONS)\r
+                               #define USB_Options USE_STATIC_OPTIONS\r
                        #endif\r
 \r
        /* Private Interface - For use in library only: */\r
                        #endif\r
 \r
        /* Private Interface - For use in library only: */\r
                        #define USB_PLL_Off()              MACROS{ PLLCSR   =  0;                           }MACROE\r
                        #define USB_PLL_IsReady()                ((PLLCSR  &   (1 << PLOCK)) ? true : false)\r
 \r
                        #define USB_PLL_Off()              MACROS{ PLLCSR   =  0;                           }MACROE\r
                        #define USB_PLL_IsReady()                ((PLLCSR  &   (1 << PLOCK)) ? true : false)\r
 \r
-                       #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)               \r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
                                #define USB_REG_On()           MACROS{ UHWCON  |=  (1 << UVREGE);               }MACROE\r
                                #define USB_REG_Off()          MACROS{ UHWCON  &= ~(1 << UVREGE);               }MACROE\r
                        #else\r
                                #define USB_REG_On()           MACROS{ UHWCON  |=  (1 << UVREGE);               }MACROE\r
                                #define USB_REG_Off()          MACROS{ UHWCON  &= ~(1 << UVREGE);               }MACROE\r
                        #else\r
                        #define USB_CLK_Freeze()           MACROS{ USBCON  |=  (1 << FRZCLK);               }MACROE\r
                        #define USB_CLK_Unfreeze()         MACROS{ USBCON  &= ~(1 << FRZCLK);               }MACROE\r
 \r
                        #define USB_CLK_Freeze()           MACROS{ USBCON  |=  (1 << FRZCLK);               }MACROE\r
                        #define USB_CLK_Unfreeze()         MACROS{ USBCON  &= ~(1 << FRZCLK);               }MACROE\r
 \r
-                       #define USB_Interface_Enable()     MACROS{ USBCON  |=  (1 << USBE);                 }MACROE\r
-                       #define USB_Interface_Disable()    MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE\r
-                       #define USB_Interface_Reset()      MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \\r
+                       #define USB_Controller_Enable()    MACROS{ USBCON  |=  (1 << USBE);                 }MACROE\r
+                       #define USB_Controller_Disable()   MACROS{ USBCON  &= ~(1 << USBE);                 }MACROE\r
+                       #define USB_Controller_Reset()     MACROS{ const uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \\r
                                                                   USBCON = (Temp | (1 << USBE));           }MACROE\r
        \r
                /* Inline Functions: */\r
                                                                   USBCON = (Temp | (1 << USBE));           }MACROE\r
        \r
                /* Inline Functions: */\r
                                  return USB_MODE_HOST;\r
                        }\r
                        #endif\r
                                  return USB_MODE_HOST;\r
                        }\r
                        #endif\r
-               \r
-               /* External Variables: */\r
-                       extern volatile bool FrameElapsed;\r
                        \r
        #endif\r
        \r
                        \r
        #endif\r
        \r