aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-03-15 06:39:34 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-03-15 06:39:34 +0000
commitb35f93a372d8c872aebab4e3626bfc58d85b84d7 (patch)
treee695226ad0d2525042d562f78701522747057265 /LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
parent1a130eed6c990701642afc1a1e9738dfd86b0d4b (diff)
downloadlufa-b35f93a372d8c872aebab4e3626bfc58d85b84d7.tar.gz
lufa-b35f93a372d8c872aebab4e3626bfc58d85b84d7.tar.bz2
lufa-b35f93a372d8c872aebab4e3626bfc58d85b84d7.zip
Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs when automatic PLL mode is specified.
Diffstat (limited to 'LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c')
-rw-r--r--LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
index 18fa48a23..8b4171138 100644
--- a/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
+++ b/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
@@ -65,6 +65,13 @@ void USB_Init(
else
USB_REG_Off();
+ if (!(USB_Options & USB_OPT_MANUAL_PLL))
+ {
+ #if defined(USB_SERIES_4_AVR)
+ PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1));
+ #endif
+ }
+
#if defined(USB_CAN_BE_BOTH)
if (Mode == USB_MODE_UID)
{
@@ -118,22 +125,9 @@ void USB_ResetInterface(void)
USB_Controller_Reset();
- if (!(USB_Options & USB_OPT_MANUAL_PLL))
- {
- #if defined(USB_SERIES_4_AVR)
- PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1));
- #endif
-
- USB_PLL_On();
- while (!(USB_PLL_IsReady()));
- }
-
#if defined(USB_CAN_BE_BOTH)
if (UIDModeSelectEnabled)
- {
- UHWCON |= (1 << UIDE);
- USB_INT_Enable(USB_INT_IDTI);
- }
+ USB_INT_Enable(USB_INT_IDTI);
#endif
USB_CLK_Unfreeze();
@@ -145,6 +139,16 @@ void USB_ResetInterface(void)
UHWCON |= (1 << UIMOD);
#endif
+ if (!(USB_Options & USB_OPT_MANUAL_PLL))
+ {
+ #if defined(USB_SERIES_2_AVR)
+ USB_PLL_On();
+ while (!(USB_PLL_IsReady()));
+ #else
+ USB_PLL_Off();
+ #endif
+ }
+
USB_Init_Device();
#endif
}
@@ -153,6 +157,14 @@ void USB_ResetInterface(void)
#if defined(USB_CAN_BE_HOST)
UHWCON &= ~(1 << UIMOD);
+ if (!(USB_Options & USB_OPT_MANUAL_PLL))
+ {
+ #if defined(USB_CAN_BE_HOST)
+ USB_PLL_On();
+ while (!(USB_PLL_IsReady()));
+ #endif
+ }
+
USB_Init_Host();
#endif
}