📄 lowlevel.h
字号:
*/ #define USB_Detach() MACROS{ UDCON |= (1 << DETACH); }MACROE /** Attaches the device to the USB bus. This announces the device's presence to any attached * USB host, starting the enumeration process. If no host is present, attaching the device * will allow for enumeration once a host is connected to the device. * * This is inexplicably also required for proper operation while in host mode, to enable the * attachment of a device to the host. This is despite the bit being located in the device-mode * register and despite the datasheet making no mention of its requirement in host mode. */ #define USB_Attach() MACROS{ UDCON &= ~(1 << DETACH); }MACROE #if !defined(USB_STREAM_TIMEOUT_MS) || defined(__DOXYGEN__) /** Constant for the maximum software timeout period of the USB data stream transfer functions * (both control and standard) when in either device or host mode. If the next packet of a stream * is not received or acknowedged within this time period, the stream function will fail. * * This value may be overridden in the user project makefile as the value of the * USB_STREAM_TIMEOUT_MS token, and passed to the compiler using the -D switch. */ #define USB_STREAM_TIMEOUT_MS 100 #endif /* Function Prototypes: */ /** Main function to initialize and start the USB interface. Once active, the USB interface will * allow for device connection to a host when in device mode, or for device enumeration while in * host mode. * * As the USB library relies on USB interrupts for some of its functionality, this routine will * enable global interrupts. * * Calling this function when the USB interface is already initialized will cause a complete USB * interface reset and re-enumeration. * * \param Mode This is a mask indicating what mode the USB interface is to be initialized to. * Valid mode masks are USB_MODE_DEVICE, USB_MODE_HOST or USB_MODE_UID. * * \param Options Mask indicating the options which should be used when initializing the USB * interface to control the USB interface's behaviour. This should be comprised of * a USB_OPT_REG_* mask to control the regulator, a USB_OPT_*_PLL mask to control the * PLL, and a USB_DEVICE_OPT_* mask (when the device mode is enabled) to set the device * mode speed. * * \note To reduce the FLASH requirements of the library if only device or host mode is required, * this can be statically set via defining the token USB_DEVICE_ONLY for device mode or * USB_HOST_ONLY for host mode in the use project makefile, passing the token to the compiler * via the -D switch. If the mode is statically set, this parameter does not exist in the * function prototype. * * \note To reduce the FLASH requirements of the library if only fixed settings are are required, * the options may be set statically in the same manner as the mode (see the Mode parameter of * this function). To statically set the USB options, pass in the USE_STATIC_OPTIONS token, * defined to the appropriate options masks. When the options are statically set, this * parameter does not exist in the function prototype. * * \note The mode parameter does not exist on devices where only one mode is possible, such as USB * AVR models which only implement the USB device mode in hardware. * * \see Device.h for the USB_DEVICE_OPT_* masks. */ void USB_Init( #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__) const uint8_t Mode #endif #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS)) || defined(__DOXYGEN__) , #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS)) void #endif #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__) const uint8_t Options #endif ); /** Shuts down the USB interface. This turns off the USB interface after deallocating all USB FIFO * memory, endpoints and pipes. When turned off, no USB functionality can be used until the interface * is restarted with the USB_Init() function. */ void USB_ShutDown(void); /** Resets the interface, when already initialized. This will re-enumerate the device if already connected * to a host, or re-enumerate an already attached device when in host mode. */ void USB_ResetInterface(void); /* Enums: */ /** Enum for error codes relating to the powering on of the USB interface. These error codes are * used in the ErrorCode parameter value of the USB_PowerOnFail event. */ enum USB_PowerOnErrorCodes_t { POWERON_ERROR_NoUSBModeSpecified = 0, /**< Indicates that USB_Init() was called with an * invalid or missing Mode parameter. */ }; /* Global Variables: */ #if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY)) || defined(__DOXYGEN__) /** Indicates the mode that the USB interface is currently initialized to. This value will be * one of the USB_MODE_* masks defined elsewhere in this module. * * \note This variable should be treated as read-only in the user application, and never manually * changed in value. */ extern volatile uint8_t USB_CurrentMode; #endif #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__) extern volatile uint8_t USB_Options; /** Indicates the current USB options that the USB interface was initialized with when USB_Init() * was called. This value will be one of the USB_MODE_* masks defined elsewhere in this module. * * \note This variable should be treated as read-only in the user application, and never manually * changed in value. */ #endif /* Throwable Events: */ /** This module raises the USB_Disconnect event if the USB interface is reset (such as during a mode * change while in UID mode) while the USB interface is connected to a device when in host mode, or * a host while in device mode. * * \see Events.h for more information on this event. */ RAISES_EVENT(USB_Disconnect); #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__) /** This module raises the Power On Failure event when an error occurs while initializing the USB * interface. * * \see Events.h for more information on this event. */ RAISES_EVENT(USB_PowerOnFail); #endif /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__) /* Macros: */ #define USB_PLL_On() MACROS{ PLLCSR = USB_PLL_PSC; PLLCSR |= (1 << PLLE); }MACROE #define USB_PLL_Off() MACROS{ PLLCSR = 0; }MACROE #define USB_PLL_IsReady() ((PLLCSR & (1 << PLOCK)) ? true : false) #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) #define USB_REG_On() MACROS{ UHWCON |= (1 << UVREGE); }MACROE #define USB_REG_Off() MACROS{ UHWCON &= ~(1 << UVREGE); }MACROE #else #define USB_REG_On() MACROS{ REGCR &= ~(1 << REGDIS); }MACROE #define USB_REG_Off() MACROS{ REGCR |= (1 << REGDIS); }MACROE #endif #define USB_OTGPAD_On() MACROS{ USBCON |= (1 << OTGPADE); }MACROE #define USB_OTGPAD_Off() MACROS{ USBCON &= ~(1 << OTGPADE); }MACROE #define USB_CLK_Freeze() MACROS{ USBCON |= (1 << FRZCLK); }MACROE #define USB_CLK_Unfreeze() MACROS{ USBCON &= ~(1 << FRZCLK); }MACROE #define USB_Interface_Enable() MACROS{ USBCON |= (1 << USBE); }MACROE #define USB_Interface_Disable() MACROS{ USBCON &= ~(1 << USBE); }MACROE #define USB_Interface_Reset() MACROS{ uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \ USBCON = (Temp | (1 << USBE)); }MACROE /* Inline Functions: */ static inline uint8_t USB_GetUSBModeFromUID(void) ATTR_WARN_UNUSED_RESULT; static inline uint8_t USB_GetUSBModeFromUID(void) { #if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__)) if (USBSTA & (1 << ID)) return USB_MODE_DEVICE; else return USB_MODE_HOST; #else return USB_MODE_DEVICE; #endif } #endif /* Disable C linkage for C++ Compilers: */ #if defined(__cplusplus) } #endif #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -