Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs when automatic PLL mode is specified.

Dean Camera 14 years ago
parent 1a130eed6c
commit b35f93a372
  1. 38
      LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
  2. 9
      LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c
  3. 1
      LUFA/ManPages/ChangeLog.txt

@ -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);
}
#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
}

@ -90,11 +90,20 @@ ISR(USB_GEN_vect, ISR_BLOCK)
if (USB_VBUS_GetStatus())
{
if (!(USB_Options & USB_OPT_MANUAL_PLL))
{
USB_PLL_On();
while (!(USB_PLL_IsReady()));
}
USB_DeviceState = DEVICE_STATE_Powered;
EVENT_USB_Device_Connect();
}
else
{
if (!(USB_Options & USB_OPT_MANUAL_PLL))
USB_PLL_Off();
USB_DeviceState = DEVICE_STATE_Unattached;
EVENT_USB_Device_Disconnect();
}

@ -58,6 +58,7 @@
* - Reduced latency for executing the Start-Of-Frame events (if enabled in the user application)
* - Removed Pipe_ClearErrorFlags(), pipe error flags are now automatically cleared when Pipe_ClearError() is called
* - Endpoint_ResetFIFO() renamed to Endpoint_ResetEndpoint(), to be consistent with the Pipe_ResetPipe() function name
* - Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs when automatic PLL mode is specified
* - Library Applications:
* - Changed the XPLAINBridge software UART to use the regular timer CTC mode instead of the alternative CTC mode
* via the Input Capture register, to reduce user confusion

Loading…
Cancel
Save