X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/cce8760b9169dffe1a126e221f4b4c48c83192b9..1621158c622e8dbe49deaacf88ea3f5b843b54ac:/LUFA/Drivers/USB/LowLevel/USBInterrupt.c diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c index a49b8da7b..311a7be4e 100644 --- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c +++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c @@ -34,14 +34,17 @@ void USB_INT_DisableAllInterrupts(void) { #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) - USBCON &= ~((1 << VBUSTE) | (1 << IDTE)); + USBCON &= ~((1 << OTGPADE) | (1 << VBUSTE) | (1 << IDTE)); #elif defined(USB_SERIES_4_AVR) USBCON &= ~(1 << VBUSTE); #endif + #if defined(USB_CAN_BE_BOTH) + OTGIEN = 0; + #endif + #if defined(USB_CAN_BE_HOST) UHIEN = 0; - OTGIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) @@ -55,9 +58,12 @@ void USB_INT_ClearAllInterrupts(void) USBINT = 0; #endif + #if defined(USB_CAN_BE_BOTH) + OTGINT = 0; + #endif + #if defined(USB_CAN_BE_HOST) UHINT = 0; - OTGINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) @@ -162,6 +168,8 @@ ISR(USB_GEN_vect, ISR_BLOCK) #endif #if defined(USB_CAN_BE_HOST) + bool MustResetInterface = false; + if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI)) { USB_INT_Clear(USB_INT_DDISCI); @@ -169,8 +177,8 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_INT_Disable(USB_INT_DDISCI); EVENT_USB_Host_DeviceUnattached(); - - USB_ResetInterface(); + + MustResetInterface = true; } if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI)) @@ -205,7 +213,7 @@ ISR(USB_GEN_vect, ISR_BLOCK) EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0); EVENT_USB_Host_DeviceUnattached(); - USB_ResetInterface(); + MustResetInterface = true; } if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI)) @@ -230,8 +238,11 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_CurrentMode = USB_GetUSBModeFromUID(); EVENT_USB_UIDChange(); - USB_ResetInterface(); + MustResetInterface = true; } + + if (MustResetInterface) + USB_ResetInterface(); #endif }