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)
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)
USB_INT_Disable(USB_INT_SUSPEND);
USB_INT_Enable(USB_INT_WAKEUP);
- Endpoint_ClearEndpoints();
-
Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,
ENDPOINT_DIR_OUT, USB_ControlEndpointSize,
ENDPOINT_BANK_SINGLE);
#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);
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))
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))
USB_CurrentMode = USB_GetUSBModeFromUID();
EVENT_USB_UIDChange();
- USB_ResetInterface();
+ MustResetInterface = true;
}
+
+ if (MustResetInterface)
+ USB_ResetInterface();
#endif
}