void USB_ShutDown(void) { USB_ResetInterface(); USB_Detach(); USB_Controller_Disable(); USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) UHWCON &= ~(1 << UIMOD); #endif if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); USB_REG_Off(); #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USB_OTGPAD_Off(); #endif #if defined(USB_CAN_BE_BOTH) UHWCON &= ~(1 << UIDE); #endif USB_IsInitialized = false; #if defined(USB_CAN_BE_BOTH) USB_CurrentMode = USB_MODE_NONE; #endif }
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 defined(USB_CAN_BE_BOTH) if (UIDModeSelectEnabled) 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 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 } else if (USB_CurrentMode == USB_MODE_Host) { #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 } #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif }
void USB_ShutDown(void) { if (USB_IsConnected) RAISE_EVENT(USB_Disconnect); USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); USB_IsConnected = false; USB_IsInitialized = false; #if defined(USB_CAN_BE_HOST) USB_HostState = HOST_STATE_Unattached; #endif #if defined(USB_CAN_BE_DEVICE) USB_ConfigurationNumber = 0; #endif #if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY)) USB_CurrentMode = USB_MODE_NONE; #endif #if !defined(USE_STATIC_OPTIONS) USB_Options = 0; #endif USB_Interface_Disable(); USB_PLL_Off(); #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) USB_OTGPAD_Off(); #endif #if defined(USB_CAN_BE_BOTH) UHWCON &= ~(1 << UIDE); #endif }
void USB_Disable(void) { USB_INT_DisableAllInterrupts(); USB_INT_ClearAllInterrupts(); USB_Detach(); USB_Controller_Disable(); if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); USB_REG_Off(); #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USB_OTGPAD_Off(); #endif #if defined(USB_CAN_BE_BOTH) USB_CurrentMode = USB_MODE_None; #endif USB_IsInitialized = false; }
ISR(USB_GEN_vect, ISR_BLOCK) { #if defined(USB_CAN_BE_DEVICE) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); } #endif #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) if (USB_INT_HasOccurred(USB_INT_VBUSTI) && USB_INT_IsEnabled(USB_INT_VBUSTI)) { USB_INT_Clear(USB_INT_VBUSTI); 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(); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) { USB_INT_Disable(USB_INT_SUSPI); USB_INT_Enable(USB_INT_WAKEUPI); USB_CLK_Freeze(); if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = DEVICE_STATE_Unattached; EVENT_USB_Device_Disconnect(); #else USB_DeviceState = DEVICE_STATE_Suspended; EVENT_USB_Device_Suspend(); #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); } USB_CLK_Unfreeze(); USB_INT_Clear(USB_INT_WAKEUPI); USB_INT_Disable(USB_INT_WAKEUPI); USB_INT_Enable(USB_INT_SUSPI); if (USB_Device_ConfigurationNumber) USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); #else EVENT_USB_Device_WakeUp(); #endif } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; USB_Device_ConfigurationNumber = 0; USB_INT_Clear(USB_INT_SUSPI); USB_INT_Disable(USB_INT_SUSPI); USB_INT_Enable(USB_INT_WAKEUPI); Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL, ENDPOINT_DIR_OUT, USB_Device_ControlEndpointSize, ENDPOINT_BANK_SINGLE); #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); } #endif #if defined(USB_CAN_BE_HOST) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI)) { USB_INT_Clear(USB_INT_HSOFI); EVENT_USB_Host_StartOfFrame(); } #endif if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI)) { USB_INT_Clear(USB_INT_DDISCI); USB_INT_Clear(USB_INT_DCONNI); USB_INT_Disable(USB_INT_DDISCI); EVENT_USB_Host_DeviceUnattached(); USB_ResetInterface(); } if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI)) { USB_INT_Clear(USB_INT_VBERRI); USB_Host_VBUS_Manual_Off(); USB_Host_VBUS_Auto_Off(); EVENT_USB_Host_HostError(HOST_ERROR_VBusVoltageDip); EVENT_USB_Host_DeviceUnattached(); USB_HostState = HOST_STATE_Unattached; } if (USB_INT_HasOccurred(USB_INT_SRPI) && USB_INT_IsEnabled(USB_INT_SRPI)) { USB_INT_Clear(USB_INT_SRPI); USB_INT_Disable(USB_INT_SRPI); EVENT_USB_Host_DeviceAttached(); USB_INT_Enable(USB_INT_DDISCI); USB_HostState = HOST_STATE_Powered; } if (USB_INT_HasOccurred(USB_INT_BCERRI) && USB_INT_IsEnabled(USB_INT_BCERRI)) { USB_INT_Clear(USB_INT_BCERRI); EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0); EVENT_USB_Host_DeviceUnattached(); USB_ResetInterface(); } #endif #if defined(USB_CAN_BE_BOTH) if (USB_INT_HasOccurred(USB_INT_IDTI) && USB_INT_IsEnabled(USB_INT_IDTI)) { USB_INT_Clear(USB_INT_IDTI); if (USB_DeviceState != DEVICE_STATE_Unattached) EVENT_USB_Device_Disconnect(); if (USB_HostState != HOST_STATE_Unattached) EVENT_USB_Host_DeviceUnattached(); USB_CurrentMode = USB_GetUSBModeFromUID(); USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif }
ISR(USB_GEN_vect, ISR_BLOCK) { #if defined(USB_CAN_BE_DEVICE) #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) if (USB_INT_HasOccurred(USB_INT_VBUS) && USB_INT_IsEnabled(USB_INT_VBUS)) { USB_INT_Clear(USB_INT_VBUS); RAISE_EVENT(USB_VBUSChange); if (USB_VBUS_GetStatus()) { RAISE_EVENT(USB_VBUSConnect); if (USB_IsConnected) RAISE_EVENT(USB_Disconnect); USB_ResetInterface(); USB_IsConnected = true; RAISE_EVENT(USB_Connect); } else { RAISE_EVENT(USB_Disconnect); USB_Detach(); USB_CLK_Freeze(); USB_PLL_Off(); USB_REG_Off(); USB_IsConnected = false; RAISE_EVENT(USB_VBUSDisconnect); USB_INT_Clear(USB_INT_VBUS); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPEND) && USB_INT_IsEnabled(USB_INT_SUSPEND)) { USB_INT_Clear(USB_INT_SUSPEND); USB_INT_Disable(USB_INT_SUSPEND); USB_INT_Enable(USB_INT_WAKEUP); USB_CLK_Freeze(); if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); USB_IsSuspended = true; RAISE_EVENT(USB_Suspend); #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT) if (USB_IsConnected) { USB_IsConnected = false; RAISE_EVENT(USB_Disconnect); } #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUP) && USB_INT_IsEnabled(USB_INT_WAKEUP)) { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); } USB_CLK_Unfreeze(); USB_INT_Clear(USB_INT_WAKEUP); USB_INT_Disable(USB_INT_WAKEUP); USB_INT_Enable(USB_INT_SUSPEND); #if defined(USB_LIMITED_CONTROLLER) && !defined(NO_LIMITED_CONTROLLER_CONNECT) if (!(USB_IsConnected)) { USB_IsConnected = true; RAISE_EVENT(USB_Connect); } #endif USB_IsSuspended = false; RAISE_EVENT(USB_WakeUp); } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) { USB_INT_Clear(USB_INT_EORSTI); USB_ConfigurationNumber = 0; USB_INT_Clear(USB_INT_SUSPEND); 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); RAISE_EVENT(USB_Reset); } #endif #if defined(USB_CAN_BE_HOST) if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI)) { USB_INT_Clear(USB_INT_DDISCI); USB_INT_Clear(USB_INT_DCONNI); USB_INT_Disable(USB_INT_DDISCI); RAISE_EVENT(USB_DeviceUnattached); RAISE_EVENT(USB_Disconnect); USB_ResetInterface(); } if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI)) { USB_INT_Clear(USB_INT_VBERRI); USB_Host_VBUS_Manual_Off(); USB_Host_VBUS_Auto_Off(); RAISE_EVENT(USB_HostError, HOST_ERROR_VBusVoltageDip); RAISE_EVENT(USB_DeviceUnattached); USB_HostState = HOST_STATE_Unattached; } if (USB_INT_HasOccurred(USB_INT_SRPI) && USB_INT_IsEnabled(USB_INT_SRPI)) { USB_INT_Clear(USB_INT_SRPI); USB_INT_Disable(USB_INT_SRPI); RAISE_EVENT(USB_DeviceAttached); USB_INT_Enable(USB_INT_DDISCI); USB_HostState = HOST_STATE_Attached; } if (USB_INT_HasOccurred(USB_INT_BCERRI) && USB_INT_IsEnabled(USB_INT_BCERRI)) { USB_INT_Clear(USB_INT_BCERRI); RAISE_EVENT(USB_DeviceEnumerationFailed, HOST_ENUMERROR_NoDeviceDetected, 0); RAISE_EVENT(USB_DeviceUnattached); if (USB_IsConnected) RAISE_EVENT(USB_Disconnect); USB_ResetInterface(); } #endif #if defined(USB_CAN_BE_BOTH) if (USB_INT_HasOccurred(USB_INT_IDTI) && USB_INT_IsEnabled(USB_INT_IDTI)) { USB_INT_Clear(USB_INT_IDTI); if (USB_IsConnected) { if (USB_CurrentMode == USB_MODE_HOST) RAISE_EVENT(USB_DeviceUnattached); else RAISE_EVENT(USB_Disconnect); } RAISE_EVENT(USB_UIDChange); USB_ResetInterface(); } #endif }