/** * @file xmc_usbh.h * @date 2016-06-30 * ********************************************************************************************************************* * XMClib v2.1.16 - XMC Peripheral Driver Library * * Copyright (c) 2015-2017, Infineon Technologies AG * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the * following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following * disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with * Infineon Technologies AG dave@infineon.com). ********************************************************************************************************************* * * Change History * -------------- * * 2016-06-30: * - Initial Version.
* 2016-09-01: * - Removed Keil specific inclusions and macros
* * @endcond * */ #ifndef XMC_USBH_H #define XMC_USBH_H #include #include "xmc_common.h" #include "xmc_scu.h" #include "xmc_gpio.h" #if((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || (UC_SERIES == XMC43) || (UC_SERIES == XMC47) || (UC_SERIES == XMC48) || defined(DOXYGEN)) /** * @addtogroup XMClib XMC Peripheral Library * @{ */ /** * @addtogroup USBH * @brief Universal Serial Bus Host (USBH) driver for the XMC4000 microcontroller family. * * The USBH is the host mode device driver for the USB0 hardware module on XMC4000 family of microcontrollers. * The USB0 module can be used to establish a USB interface between outside world and XMC4000 family of controllers. * The USB module includes the following features in host mode: * -# Complies with the USB 2.0 Specification. * -# Supports up to 14 bidirectional pipes, including control pipe 0. * -# Supports SOFs in Full-Speed modes. * -# Supports clock gating for power saving. * -# Supports FIFO mode data transaction. * * The below figure shows the overview of USB0 module in XMC4 microntroller. * @image html USB_module_overview.png * @image latex ../images/USB_module_overview.png * * * The USBH device driver supports the following features:\n * -# Initialize/Uninitialize the USB0 module on XMC4000 device. * -# Control VBUS state. * -# Reset USB port. * -# Set the USB device address. * -# Allocate pipe for new endpoint communication. * -# Modify an existing pipe. * -# Transfer data on selected pipe. * -# Abort ongoing data transaction. * -# Handle multi packet data transaction by updating toggle information. * * The USBH device driver expects registration of callback functions ::XMC_USBH_SignalPortEvent_t and ::XMC_USBH_SignalPipeEvent_t to be executed * when there is port event interrupt and pipe event interrupt respectively.\n * The USBH driver is CMSIS API compatible. Please use Driver_USBH0 to access the USBH API.\n * For example, to initialize the USB host controller, use Driver_USBH0.Initialize().\n * * @{ */ /********************************************************************************************************************** * MACROS *********************************************************************************************************************/ /*Drive VBUS*/ #define XMC_USB_DRIVE_PORT1 P3_2 /**< Default port(PORT3, pin 2) used to enable VBUS voltage regulator on the board */ #define XMC_USB_DRIVE_PORT2 P0_1 /**< Alternate port that can be used to enable VBUS voltage regulator(PORT0, pin 1) */ #ifndef USBH0_MAX_PIPE_NUM #define USBH0_MAX_PIPE_NUM (14U) /**< Representation of number of pipes available */ #endif #if (USBH0_MAX_PIPE_NUM > 14U) #error Too many Pipes, maximum Pipes that this driver supports is 14 !!! #endif #define XMC_USBH_CLOCK_GATING_ENABLE 1 /**< Used to enable clock gating when the driver is powered down*/ #define XMC_USBH_CLOCK_GATING_DISABLE 0 /**< Used to disable clock gating when the driver is fully powered*/ #define USB_CH_HCCHARx_MPS(x) (((uint32_t) x ) & (uint32_t)USB_CH_HCCHAR_MPS_Msk) /**< Masks maximum packet size information from the HCCHAR register value provided as input */ #define USB_CH_HCCHARx_EPNUM(x) (((uint32_t) x << USB_CH_HCCHAR_EPNum_Pos) & (uint32_t)USB_CH_HCCHAR_EPNum_Msk) /**< Shifts the value to the position of endpoint number(EPNum) in the HCCHAR register*/ #define USB_CH_HCCHARx_EPTYPE(x) (((uint32_t) x << USB_CH_HCCHAR_EPType_Pos) & (uint32_t)USB_CH_HCCHAR_EPType_Msk) /**< Shifts the value to the position of endpoint type(EPType) in the HCCHAR register*/ #define USB_CH_HCCHARx_MCEC(x) (((uint32_t) x << USB_CH_HCCHAR_MC_EC_Pos) & (uint32_t)USB_CH_HCCHAR_MC_EC_Msk) /**< Shifts the value to the position of multi-count(MC_EC) field in the HCCHAR register*/ #define USB_CH_HCCHARx_DEVADDR(x) (((uint32_t) x << USB_CH_HCCHAR_DevAddr_Pos) & (uint32_t)USB_CH_HCCHAR_DevAddr_Msk) /**< Shifts the value to the position of endpoint type(EPType) in the HCCHAR register*/ #define USB_CH_HCCHARx_EPDIR(x) (((uint32_t) x << USB_CH_HCCHAR_EPDir_Pos) & (uint32_t)USB_CH_HCCHAR_EPDir_Msk) /**< Shifts the value to the position of endpoint direction(EPDir) in the HCCHAR register*/ #define USB_CH_HCCHAR_LSDEV_Msk (((uint32_t) 0x1 << 15U) & 0x1U) #define USB_CH_HCTSIZx_DPID(x) (((uint32_t) x << USB_CH_HCTSIZ_BUFFERMODE_Pid_Pos) & (uint32_t)USB_CH_HCTSIZ_BUFFERMODE_Pid_Msk) /**< Shifts the value to the position of packet ID (PID) in the HCTSIZ register*/ #define USB_CH_HCTSIZx_DPID_DATA0 (USB_CH_HCTSIZx_DPID(0U)) /**< Represents DATA toggle DATA0 as in HCTSIZ register*/ #define USB_CH_HCTSIZx_DPID_DATA2 (USB_CH_HCTSIZx_DPID(1U)) /**< Represents DATA toggle DATA2 as in HCTSIZ register*/ #define USB_CH_HCTSIZx_DPID_DATA1 (USB_CH_HCTSIZx_DPID(2U)) /**< Represents DATA toggle DATA1 as in HCTSIZ register*/ #define USB_CH_HCTSIZx_DPID_MDATA (USB_CH_HCTSIZx_DPID(3U)) /**< Represents DATA toggle MDATA as in HCTSIZ register*/ #define USB_CH_HCTSIZx_DPID_SETUP (USB_CH_HCTSIZx_DPID(3U)) /**< Represents SETUP token as in HCTSIZ register*/ #define USB_GRXSTSR_HOSTMODE_PktSts_IN_DATA_PKT 0x2 /**< Represents IN data token as in receive status pop register(GRXSTSP)*/ #define USB_GRXSTSR_HOSTMODE_PktSts_IN_TRSF_CPL 0x3 /**< Represents paket status information as in receive status pop register(GRXSTSP)*/ #define USB_CH_HCFG_FSLSSUP(x) (((uint32_t) x << USB_HCFG_FSLSSupp_Pos) & USB_HCFG_FSLSSupp_Msk) /**< Provides register value to update USB full speed related mask FLSSupp of register HCFG*/ #define USB_CH_HCFG_FSLSPCS(x) (((uint32_t) x ) & USB_HCFG_FSLSPclkSel_Msk) /**< Provides register value to update PHY clock selection in register HCFG*/ #define USB_CH_HCINTx_ALL (USB_CH_HCINTMSK_XferComplMsk_Msk | \ USB_CH_HCINTMSK_ChHltdMsk_Msk | \ USB_CH_HCINTMSK_StallMsk_Msk | \ USB_CH_HCINTMSK_NakMsk_Msk | \ USB_CH_HCINTMSK_AckMsk_Msk | \ USB_CH_HCINTMSK_XactErrMsk_Msk | \ USB_CH_HCINTMSK_BblErrMsk_Msk | \ USB_CH_HCINTMSK_FrmOvrunMsk_Msk | \ USB_CH_HCINTMSK_DataTglErrMsk_Msk) /**< Mask for selecting all channel related events*/ #define USB_CH_HCINTx_ERRORS (USB_CH_HCINTMSK_XactErrMsk_Msk | \ USB_CH_HCINTMSK_BblErrMsk_Msk | \ USB_CH_HCINTMSK_FrmOvrunMsk_Msk | \ USB_CH_HCINTMSK_DataTglErrMsk_Msk) /**< Mask for selecting all channel error related events*/ /*Macro to find pipe index using handle*/ #define USBH_PIPE_GET_INDEX(handle) (((uint32_t)handle - (uint32_t)USB0_CH0_BASE)/(0x20U)) /**< Macro provides index of the USB channel based on its base address*/ #define XMC_USBH_API_VERSION ((uint16_t)((uint16_t)XMC_LIB_MAJOR_VERSION << 8U) |XMC_LIB_MINOR_VERSION) /**< USBH low level driver API version */ /* General return codes */ #define XMC_USBH_DRIVER_OK 0 /**< Operation succeeded */ #define XMC_USBH_DRIVER_ERROR -1 /**< Unspecified error */ #define XMC_USBH_DRIVER_ERROR_BUSY -2 /**< Driver is busy*/ #define XMC_USBH_DRIVER_ERROR_TIMEOUT -3 /**< Timeout occurred */ #define XMC_USBH_DRIVER_ERROR_UNSUPPORTED -4 /**< Operation not supported*/ #define XMC_USBH_DRIVER_ERROR_PARAMETER -5 /**< Parameter error*/ #define XMC_USBH_DRIVER_ERROR_SPECIFIC -6 /**< Start of driver specific errors*/ /* USB Speed */ #define XMC_USBH_SPEED_LOW 0U /**< Low-speed USB*/ #define XMC_USBH_SPEED_FULL 1U /**< Full-speed USB*/ #define XMC_USBH_SPEED_HIGH 2U /**< High-speed USB*/ /* USB Endpoint Type */ #define XMC_USBH_ENDPOINT_CONTROL 0 /**< Control Endpoint*/ #define XMC_USBH_ENDPOINT_ISOCHRONOUS 1 /**< Isochronous Endpoint*/ #define XMC_USBH_ENDPOINT_BULK 2 /**< Bulk Endpoint*/ #define XMC_USBH_ENDPOINT_INTERRUPT 3 /**< Interrupt Endpoint*/ #define XMC_USBH_SignalEndpointEvent_t XMC_USBH_SignalPipeEvent_t /**< Legacy name for the pipe event handler*/ /****** USB Host Packet Information *****/ #define XMC_USBH_PACKET_TOKEN_Pos 0 /**< Packet token position*/ #define XMC_USBH_PACKET_TOKEN_Msk (0x0FUL << XMC_USBH_PACKET_TOKEN_Pos) /**< Packet token mask*/ #define XMC_USBH_PACKET_SETUP (0x01UL << XMC_USBH_PACKET_TOKEN_Pos) /**< SETUP Packet*/ #define XMC_USBH_PACKET_OUT (0x02UL << XMC_USBH_PACKET_TOKEN_Pos) /**< OUT Packet*/ #define XMC_USBH_PACKET_IN (0x03UL << XMC_USBH_PACKET_TOKEN_Pos) /**< IN Packet*/ #define XMC_USBH_PACKET_PING (0x04UL << XMC_USBH_PACKET_TOKEN_Pos) /**< PING Packet*/ #define XMC_USBH_PACKET_DATA_Pos 4 /**< Packet data PID position*/ #define XMC_USBH_PACKET_DATA_Msk (0x0FUL << XMC_USBH_PACKET_DATA_Pos) /**< Packet data PID mask*/ #define XMC_USBH_PACKET_DATA0 (0x01UL << XMC_USBH_PACKET_DATA_Pos) /**< DATA0 PID */ #define XMC_USBH_PACKET_DATA1 (0x02UL << XMC_USBH_PACKET_DATA_Pos) /**< DATA1 PID */ #define XMC_USBH_PACKET_SPLIT_Pos 8 #define XMC_USBH_PACKET_SPLIT_Msk (0x0FUL << XMC_USBH_PACKET_SPLIT_Pos) #define XMC_USBH_PACKET_SSPLIT (0x08UL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet */ #define XMC_USBH_PACKET_SSPLIT_S (0x09UL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data Start */ #define XMC_USBH_PACKET_SSPLIT_E (0x0AUL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data End */ #define XMC_USBH_PACKET_SSPLIT_S_E (0x0BUL << XMC_USBH_PACKET_SPLIT_Pos) /**< SSPLIT Packet: Data All */ #define XMC_USBH_PACKET_CSPLIT (0x0CUL << XMC_USBH_PACKET_SPLIT_Pos) /**< CSPLIT Packet */ #define XMC_USBH_PACKET_PRE (1UL << 12) /**< PRE Token */ /****** USB Host Port Event *****/ #define XMC_USBH_EVENT_CONNECT (1UL << 0) /**< USB Device Connected to Port */ #define XMC_USBH_EVENT_DISCONNECT (1UL << 1) /**< USB Device Disconnected from Port */ #define XMC_USBH_EVENT_OVERCURRENT (1UL << 2) /**< USB Device caused Overcurrent */ #define XMC_USBH_EVENT_RESET (1UL << 3) /**< USB Reset completed */ #define XMC_USBH_EVENT_SUSPEND (1UL << 4) /**< USB Suspend occurred */ #define XMC_USBH_EVENT_RESUME (1UL << 5) /**< USB Resume occurred */ #define XMC_USBH_EVENT_REMOTE_WAKEUP (1UL << 6) /**< USB Device activated Remote Wakeup */ /****** USB Host Pipe Event *****/ #define XMC_USBH_EVENT_TRANSFER_COMPLETE (1UL << 0) /**< Transfer completed */ #define XMC_USBH_EVENT_HANDSHAKE_NAK (1UL << 1) /**< NAK Handshake received */ #define XMC_USBH_EVENT_HANDSHAKE_NYET (1UL << 2) /**< NYET Handshake received */ #define XMC_USBH_EVENT_HANDSHAKE_MDATA (1UL << 3) /**< MDATA Handshake received */ #define XMC_USBH_EVENT_HANDSHAKE_STALL (1UL << 4) /**< STALL Handshake received */ #define XMC_USBH_EVENT_HANDSHAKE_ERR (1UL << 5) /**< ERR Handshake received */ #define XMC_USBH_EVENT_BUS_ERROR (1UL << 6) /**< Bus Error detected */ /******************************************************************************* * ENUMS *******************************************************************************/ /** * @brief General power states of USB peripheral driver */ typedef enum XMC_USBH_POWER_STATE { XMC_USBH_POWER_OFF, /**< Power off: no operation possible */ XMC_USBH_POWER_LOW, /**< Low Power mode: retain state, detect and signal wake-up events */ XMC_USBH_POWER_FULL /**< Power on: full operation at maximum performance */ } XMC_USBH_POWER_STATE_t; /******************************************************************************* * DATA STRUCTURES *******************************************************************************/ /** * @brief USB host Driver Version */ typedef struct XMC_USBH_DRIVER_VERSION { uint16_t api; /**< API version */ uint16_t drv; /**< Driver version */ } XMC_USBH_DRIVER_VERSION_t; /** * @brief USB Host Port State */ typedef struct XMC_USBH_PORT_STATE { uint32_t connected : 1; /**< USB Host Port connected flag */ uint32_t overcurrent : 1; /**< USB Host Port overcurrent flag */ uint32_t speed : 2; /**< USB Host Port speed setting (ARM_USB_SPEED_xxx) */ } XMC_USBH_PORT_STATE_t; /** * @brief USB Host Pipe Handle. It represents the physical address of a USB channel */ typedef uint32_t XMC_USBH_PIPE_HANDLE; #define XMC_USBH_EP_HANDLE XMC_USBH_PIPE_HANDLE /**< Legacy name for pipe handle used by CMSIS*/ /** * @brief USB Host Driver Capabilities. */ typedef struct XMC_USBH_CAPABILITIES { uint32_t port_mask : 15; /**< Root HUB available Ports Mask */ uint32_t auto_split : 1; /**< Automatic SPLIT packet handling */ uint32_t event_connect : 1; /**< Signal Connect event */ uint32_t event_disconnect : 1; /**< Signal Disconnect event */ uint32_t event_overcurrent : 1; /**< Signal Overcurrent event */ } XMC_USBH_CAPABILITIES_t; typedef void (*XMC_USBH_SignalPortEvent_t) (uint8_t port, uint32_t event); /**< Pointer to \ref ARM_USBH_SignalPortEvent : Signal Root HUB Port Event. */ typedef void (*XMC_USBH_SignalPipeEvent_t) (XMC_USBH_PIPE_HANDLE pipe_hndl, uint32_t event); /**< Pointer to \ref ARM_USBH_SignalPipeEvent : Signal Pipe Event. */ /** * @brief Access structure of USB Host Driver. */ typedef struct XMC_USBH_DRIVER { XMC_USBH_DRIVER_VERSION_t (*GetVersion) (void); /**< Pointer to \ref ARM_USBH_GetVersion : Get driver version. */ XMC_USBH_CAPABILITIES_t (*GetCapabilities) (void); /**< Pointer to \ref ARM_USBH_GetCapabilities : Get driver capabilities. */ int32_t (*Initialize) (XMC_USBH_SignalPortEvent_t cb_port_event, XMC_USBH_SignalPipeEvent_t cb_pipe_event); /**< Pointer to \ref ARM_USBH_Initialize : Initialize USB Host Interface. */ int32_t (*Uninitialize) (void); /**< Pointer to \ref ARM_USBH_Uninitialize : De-initialize USB Host Interface. */ int32_t (*PowerControl) (XMC_USBH_POWER_STATE_t state); /**< Pointer to \ref ARM_USBH_PowerControl : Control USB Host Interface Power. */ int32_t (*PortVbusOnOff) (uint8_t port, bool vbus); /**< Pointer to \ref ARM_USBH_PortVbusOnOff : Root HUB Port VBUS on/off. */ int32_t (*PortReset) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortReset : Do Root HUB Port Reset. */ int32_t (*PortSuspend) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortSuspend : Suspend Root HUB Port (stop generating SOFs). */ int32_t (*PortResume) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortResume : Resume Root HUB Port (start generating SOFs). */ XMC_USBH_PORT_STATE_t (*PortGetState) (uint8_t port); /**< Pointer to \ref ARM_USBH_PortGetState : Get current Root HUB Port State. */ XMC_USBH_PIPE_HANDLE (*PipeCreate) (uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_max_packet_size, uint8_t ep_interval); /**< Pointer to \ref ARM_USBH_PipeCreate : Create Pipe in System. */ int32_t (*PipeModify) (XMC_USBH_PIPE_HANDLE pipe_hndl, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint16_t ep_max_packet_size); /**< Pointer to \ref ARM_USBH_PipeModify : Modify Pipe in System. */ int32_t (*PipeDelete) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeDelete : Delete Pipe from System. */ int32_t (*PipeReset) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeReset : Reset Pipe. */ int32_t (*PipeTransfer) (XMC_USBH_PIPE_HANDLE pipe_hndl, uint32_t packet, uint8_t *data, uint32_t num); /**< Pointer to \ref ARM_USBH_PipeTransfer : Transfer packets through USB Pipe. */ uint32_t (*PipeTransferGetResult) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeTransferGetResult : Get result of USB Pipe transfer. */ int32_t (*PipeTransferAbort) (XMC_USBH_PIPE_HANDLE pipe_hndl); /**< Pointer to \ref ARM_USBH_PipeTransferAbort : Abort current USB Pipe transfer. */ uint16_t (*GetFrameNumber) (void); /**< Pointer to \ref ARM_USBH_GetFrameNumber : Get current USB Frame Number. */ } const XMC_USBH_DRIVER_t; /** * @brief Structure to handle various states of USB host driver. An instance exists for each USB channel */ typedef struct XMC_USBH0_pipe { uint32_t packet; /**< Holds packet token and PID information of ongoing data packet transaction*/ uint8_t *data; /**< Holds address of data buffer. It represents source buffer for OUT or SETUP transfer and destination address for IN transfer*/ uint32_t num; /**< Number of bytes of data to be transmitted*/ uint32_t num_transferred_total; /**< Number of bytes transmitted or received at the moment*/ uint32_t num_transferring; /**< Number of bytes being transmitted currently*/ uint16_t ep_max_packet_size; /**< Maximum packet size for the selected pipe*/ uint16_t interval_reload; /**< For INTERRUPT or ISOCHRONOUS pipe, it represents the period for repeated transfer*/ uint16_t interval; /**< For INTERRUPT or ISOCHRONOUS pipe, it represents the decrementing count to reach 0 for initiating retransmission*/ uint8_t ep_type; /**< Endpoint type for selected pipe*/ uint8_t in_use; /**< Set to true when transfer is in progress and reset only after the /ref num of bytes is transferred*/ uint8_t transfer_active; /**< Set to true when a transfer has been initiated and reset when event for transfer complete occurs*/ uint8_t interrupt_triggered; /**< For INTERRUPT or ISOCHRONOUS pipe, indicates if retransmit timeout has occurred*/ uint8_t event; /**< Holds pipe specific event flags*/ } XMC_USBH0_pipe_t; typedef struct xmc_usb_host_device { USB0_GLOBAL_TypeDef *global_register; /**< Global register interface */ USB0_CH_TypeDef *host_channel_registers; /**< Host channel interface */ XMC_USBH_SignalPortEvent_t SignalPortEvent_cb; /**< Port event callback; set during init */ XMC_USBH_SignalPipeEvent_t SignalPipeEvent_cb; /**< Pipe event callback; set during init */ bool init_done; /**< init status */ XMC_USBH_POWER_STATE_t power_state; /**< USB Power status */ bool port_reset_active; /**< Port reset state */ } XMC_USBH0_DEVICE_t; /******************************************************************************* * API PROTOTYPES *******************************************************************************/ #ifdef __cplusplus extern "C" { #endif /** * @param gintsts USB global interrupt status. * @return None. * * \parDescription:
* Updates logical state of the USB host driver based on the input status value. It handles port interrupt * and channel interrupt. It responsible for updating data toggle information for multi-packet data transmission. * It executes the callback function on transfer completion and reception of data. It also does error management and * calls the relevant callback functions to indicate it to the application. */ void XMC_USBH_HandleIrq (uint32_t gintsts); /** * @param ms Delay in milliseconds. * @return uint8_t Value has no significance for the low level driver. * * \parDescription:
* Function implements time delay logic. The USB host low level driver provides a weak definition * for delay which has to re-implemented with time delay logic. The low level driver expects blocking * implementation of the delay. */ uint8_t XMC_USBH_osDelay(uint32_t ms); /** * @param port Address of the port which has the pin used to enable VBUS charge pump. * @param pin Pin number in the port selected in previous argument using which the VBUS charge pump has to be enabled. * @return None * * \parDescription:
* Configures the port pin with alternate output function 1. VBUS enabling pins work with alternate output function 1. \n * Note:The input port pin should support USB VBUS as an alternate function. \n * Typical ports that support VBUS enable are: P3_2 and P0_1. * */ void XMC_USBH_Select_VBUS(XMC_GPIO_PORT_t* port, uint32_t pin); /** * @return USB host mode interrupt status. Bit field USB0_BASE->GINTSTS_HOSTMODE * * \parDescription:
* Provides USB host global interrupt status. \n * This value can be used to provide interrupt status to the IRQ handler function XMC_USBH_HandleIrq(). * */ uint32_t XMC_USBH_GetInterruptStatus(void); /** * @return None * * \parDescription:
* De-asserts resume bit. \n * The function shall be called 20ms after detecting port remote wakeup event. \n * */ void XMC_USBH_TurnOffResumeBit(void); #ifdef __cplusplus } #endif /** * @} */ /** * @} */ #endif #endif /* XMC_USBH_H */