X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/e7e1c21bc5476896f99569dc73ffe1f663f1245a..7166c7ba3e27f3458b83360302c8af8a866f7a34:/LUFA/Drivers/USB/LowLevel/USBController.c diff --git a/LUFA/Drivers/USB/LowLevel/USBController.c b/LUFA/Drivers/USB/LowLevel/USBController.c index 7adfcdc35..a542353eb 100644 --- a/LUFA/Drivers/USB/LowLevel/USBController.c +++ b/LUFA/Drivers/USB/LowLevel/USBController.c @@ -60,6 +60,11 @@ void USB_Init( USB_Options = Options; #endif + if (!(USB_Options & USB_OPT_REG_DISABLED)) + USB_REG_On(); + else + USB_REG_Off(); + #if defined(USB_CAN_BE_BOTH) if (Mode == USB_MODE_UID) { @@ -104,17 +109,14 @@ void USB_ShutDown(void) void USB_ResetInterface(void) { + #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); + #endif USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); USB_Controller_Reset(); - - if (!(USB_Options & USB_OPT_REG_DISABLED)) - USB_REG_On(); - else - USB_REG_Off(); if (!(USB_Options & USB_OPT_MANUAL_PLL)) { @@ -124,37 +126,39 @@ void USB_ResetInterface(void) USB_PLL_On(); while (!(USB_PLL_IsReady())); - } - - USB_CLK_Unfreeze(); + } - #if defined(USB_DEVICE_ONLY) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - UHWCON |= (1 << UIMOD); - USB_Init_Device(); - #elif defined(USB_HOST_ONLY) - UHWCON &= ~(1 << UIMOD); - USB_Init_Host(); - #elif defined(USB_CAN_BE_BOTH) + #if defined(USB_CAN_BE_BOTH) if (UIDModeSelectEnabled) { UHWCON |= (1 << UIDE); USB_INT_Enable(USB_INT_IDTI); } + #endif + + USB_CLK_Unfreeze(); if (USB_CurrentMode == USB_MODE_DEVICE) { + #if defined(USB_CAN_BE_DEVICE) + #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) UHWCON |= (1 << UIMOD); + #endif + USB_Init_Device(); + #endif } else { + #if defined(USB_CAN_BE_HOST) UHWCON &= ~(1 << UIMOD); USB_Init_Host(); + #endif } - #endif + #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); - USB_Attach(); + #endif } #if defined(USB_CAN_BE_DEVICE) @@ -195,10 +199,15 @@ static void USB_Init_Device(void) USB_INT_Enable(USB_INT_VBUS); #endif - USB_INT_Clear(USB_INT_SUSPEND); - USB_INT_Enable(USB_INT_SUSPEND); - USB_INT_Clear(USB_INT_EORSTI); + Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL, + ENDPOINT_DIR_OUT, USB_ControlEndpointSize, + ENDPOINT_BANK_SINGLE); + + USB_INT_Clear(USB_INT_SUSPI); + USB_INT_Enable(USB_INT_SUSPI); USB_INT_Enable(USB_INT_EORSTI); + + USB_Attach(); } #endif @@ -209,7 +218,6 @@ static void USB_Init_Host(void) USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE; USB_Host_HostMode_On(); - USB_CLK_Unfreeze(); USB_Host_VBUS_Auto_Off(); USB_Host_VBUS_Manual_Enable(); @@ -217,5 +225,7 @@ static void USB_Init_Host(void) USB_INT_Enable(USB_INT_SRPI); USB_INT_Enable(USB_INT_BCERRI); + + USB_Attach(); } #endif