From b35f93a372d8c872aebab4e3626bfc58d85b84d7 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 15 Mar 2011 06:39:34 +0000 Subject: Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs when automatic PLL mode is specified. --- LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c | 40 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c') 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 } -- cgit v1.2.3