aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/UC3
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-07-14 02:58:07 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-07-14 02:58:07 +0000
commitf4528c4aefcadd3342e9de2360d4c48196394fde (patch)
tree05782a8247534fc7a08175fe04ec9c03dc48b480 /LUFA/Drivers/USB/Core/UC3
parent13951ab043c43d0e3ea4ac0ae6a641fd88e7fcb0 (diff)
downloadlufa-f4528c4aefcadd3342e9de2360d4c48196394fde.tar.gz
lufa-f4528c4aefcadd3342e9de2360d4c48196394fde.tar.bz2
lufa-f4528c4aefcadd3342e9de2360d4c48196394fde.zip
Add high speed USB support for the UC3 devices containing a high speed USB controller.
Add device support preprocessor checks and use symbolic bit names in the UC3 platform clock management driver.
Diffstat (limited to 'LUFA/Drivers/USB/Core/UC3')
-rw-r--r--LUFA/Drivers/USB/Core/UC3/Device_UC3.h66
-rw-r--r--LUFA/Drivers/USB/Core/UC3/USBController_UC3.c15
-rw-r--r--LUFA/Drivers/USB/Core/UC3/USBController_UC3.h8
3 files changed, 60 insertions, 29 deletions
diff --git a/LUFA/Drivers/USB/Core/UC3/Device_UC3.h b/LUFA/Drivers/USB/Core/UC3/Device_UC3.h
index 55e4b0cf7..9b324ab69 100644
--- a/LUFA/Drivers/USB/Core/UC3/Device_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/Device_UC3.h
@@ -50,6 +50,7 @@
/* Includes: */
#include "../../../../Common/Common.h"
+ #include "../USBController.h"
#include "../StdDescriptors.h"
#include "../USBInterrupt.h"
#include "../Endpoint.h"
@@ -80,6 +81,13 @@
* USB interface should be initialized in full speed (12Mb/s) mode.
*/
#define USB_DEVICE_OPT_FULLSPEED (0 << 0)
+
+ #if defined(USB_SERIES_UC3A3_AVR32) || defined(USB_SERIES_UC3A4_AVR32) || defined(__DOXYGEN__)
+ /** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the
+ * USB interface should be initialized in high speed (480Mb/s) mode.
+ */
+ #define USB_DEVICE_OPT_HIGHSPEED (1 << 1)
+ #endif
//@}
#if (!defined(NO_INTERNAL_SERIAL) && \
@@ -145,28 +153,28 @@
}
#if !defined(NO_SOF_EVENTS)
- /** Enables the device mode Start Of Frame events. When enabled, this causes the
- * \ref EVENT_USB_Device_StartOfFrame() event to fire once per millisecond, synchronized to the USB bus,
- * at the start of each USB frame when enumerated in device mode.
- *
- * \note Not available when the \c NO_SOF_EVENTS compile time token is defined.
- */
- static inline void USB_Device_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;
- static inline void USB_Device_EnableSOFEvents(void)
- {
- USB_INT_Enable(USB_INT_SOFI);
- }
+ /** Enables the device mode Start Of Frame events. When enabled, this causes the
+ * \ref EVENT_USB_Device_StartOfFrame() event to fire once per millisecond, synchronized to the USB bus,
+ * at the start of each USB frame when enumerated in device mode.
+ *
+ * \note Not available when the \c NO_SOF_EVENTS compile time token is defined.
+ */
+ static inline void USB_Device_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Device_EnableSOFEvents(void)
+ {
+ USB_INT_Enable(USB_INT_SOFI);
+ }
- /** Disables the device mode Start Of Frame events. When disabled, this stops the firing of the
- * \ref EVENT_USB_Device_StartOfFrame() event when enumerated in device mode.
- *
- * \note Not available when the \c NO_SOF_EVENTS compile time token is defined.
- */
- static inline void USB_Device_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;
- static inline void USB_Device_DisableSOFEvents(void)
- {
- USB_INT_Disable(USB_INT_SOFI);
- }
+ /** Disables the device mode Start Of Frame events. When disabled, this stops the firing of the
+ * \ref EVENT_USB_Device_StartOfFrame() event when enumerated in device mode.
+ *
+ * \note Not available when the \c NO_SOF_EVENTS compile time token is defined.
+ */
+ static inline void USB_Device_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Device_DisableSOFEvents(void)
+ {
+ USB_INT_Disable(USB_INT_SOFI);
+ }
#endif
/* Private Interface - For use in library only: */
@@ -175,15 +183,27 @@
static inline void USB_Device_SetLowSpeed(void) ATTR_ALWAYS_INLINE;
static inline void USB_Device_SetLowSpeed(void)
{
- AVR32_USBB.UDCON.ls = true;
+ AVR32_USBB.UDCON.ls = true;
}
static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE;
static inline void USB_Device_SetFullSpeed(void)
{
- AVR32_USBB.UDCON.ls = false;
+ AVR32_USBB.UDCON.ls = false;
+ #if defined(USB_DEVICE_OPT_HIGHSPEED)
+ AVR32_USBB.UDCON.spdconf = 3;
+ #endif
}
+ #if defined(USB_DEVICE_OPT_HIGHSPEED)
+ static inline void USB_Device_SetHighSpeed(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Device_SetHighSpeed(void)
+ {
+ AVR32_USBB.UDCON.ls = false;
+ AVR32_USBB.UDCON.spdconf = 0;
+ }
+ #endif
+
static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
static inline void USB_Device_SetDeviceAddress(const uint8_t Address)
{
diff --git a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c
index 7cfa28ede..1472dd6a8 100644
--- a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c
@@ -166,9 +166,20 @@ static void USB_Init_Device(void)
#endif
if (USB_Options & USB_DEVICE_OPT_LOWSPEED)
- USB_Device_SetLowSpeed();
+ {
+ USB_Device_SetLowSpeed();
+ }
else
- USB_Device_SetFullSpeed();
+ {
+ #if defined(USB_DEVICE_OPT_HIGHSPEED)
+ if (USB_Options & USB_DEVICE_OPT_HIGHSPEED)
+ USB_Device_SetHighSpeed();
+ else
+ USB_Device_SetFullSpeed();
+ #else
+ USB_Device_SetFullSpeed();
+ #endif
+ }
USB_INT_Enable(USB_INT_VBUSTI);
diff --git a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h
index eaff22278..0bad549ca 100644
--- a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h
@@ -92,19 +92,19 @@
* generation module. This indicates that an external oscillator should be used directly instead of an
* internal PLL clock source.
*/
- #define USB_OPT_GCLK_SRC_OSC (1 << 1)
+ #define USB_OPT_GCLK_SRC_OSC (1 << 2)
/** Selects one of the system's PLL oscillators as the input clock to the USB Generic Clock source
* generation module. This indicates that one of the device's PLL outputs should be used instead of an
* external oscillator source.
*/
- #define USB_OPT_GCLK_SRC_PLL (0 << 1)
+ #define USB_OPT_GCLK_SRC_PLL (0 << 2)
/** Selects PLL or External Oscillator 0 as the USB Generic Clock source module input clock. */
- #define USB_OPT_GCLK_CHANNEL_0 (1 << 2)
+ #define USB_OPT_GCLK_CHANNEL_0 (1 << 3)
/** Selects PLL or External Oscillator 1 as the USB Generic Clock source module input clock. */
- #define USB_OPT_GCLK_CHANNEL_1 (0 << 2)
+ #define USB_OPT_GCLK_CHANNEL_1 (0 << 3)
//@}
/** \name Endpoint/Pipe Type Masks */