mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Mon Oct 02 15:33:19 2017 +0100
Revision:
174:b96e65c34a4d
This updates the lib to the mbed lib v 152

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 174:b96e65c34a4d 1 /******************************************************************************
AnnaBridge 174:b96e65c34a4d 2 * @file usbd.h
AnnaBridge 174:b96e65c34a4d 3 * @brief NANO100 series USB driver header file
AnnaBridge 174:b96e65c34a4d 4 * @version 2.0.0
AnnaBridge 174:b96e65c34a4d 5 * @date 20, September, 2014
AnnaBridge 174:b96e65c34a4d 6 *
AnnaBridge 174:b96e65c34a4d 7 * @note
AnnaBridge 174:b96e65c34a4d 8 * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 174:b96e65c34a4d 9 ******************************************************************************/
AnnaBridge 174:b96e65c34a4d 10 #ifndef __USBD_H__
AnnaBridge 174:b96e65c34a4d 11 #define __USBD_H__
AnnaBridge 174:b96e65c34a4d 12
AnnaBridge 174:b96e65c34a4d 13
AnnaBridge 174:b96e65c34a4d 14 /** @addtogroup NANO100_Device_Driver NANO100 Device Driver
AnnaBridge 174:b96e65c34a4d 15 @{
AnnaBridge 174:b96e65c34a4d 16 */
AnnaBridge 174:b96e65c34a4d 17
AnnaBridge 174:b96e65c34a4d 18 /** @addtogroup NANO100_USBD_Driver USBD Driver
AnnaBridge 174:b96e65c34a4d 19 @{
AnnaBridge 174:b96e65c34a4d 20 */
AnnaBridge 174:b96e65c34a4d 21
AnnaBridge 174:b96e65c34a4d 22 /** @addtogroup NANO100_USBD_EXPORTED_STRUCTS USBD Exported Structs
AnnaBridge 174:b96e65c34a4d 23 @{
AnnaBridge 174:b96e65c34a4d 24 */
AnnaBridge 174:b96e65c34a4d 25 typedef struct s_usbd_info {
AnnaBridge 174:b96e65c34a4d 26 uint8_t *gu8DevDesc; /*!< Device descriptor */
AnnaBridge 174:b96e65c34a4d 27 uint8_t *gu8ConfigDesc; /*!< Config descriptor */
AnnaBridge 174:b96e65c34a4d 28 uint8_t **gu8StringDesc; /*!< Pointer for USB String Descriptor pointers */
AnnaBridge 174:b96e65c34a4d 29 uint8_t **gu8HidReportDesc; /*!< Pointer for HID Report descriptor */
AnnaBridge 174:b96e65c34a4d 30 uint32_t *gu32HidReportSize; /*!< Pointer for HID Report descriptor Size */
AnnaBridge 174:b96e65c34a4d 31 uint32_t *gu32ConfigHidDescIdx; /*!< Pointer for HID Descriptor start index */
AnnaBridge 174:b96e65c34a4d 32 } S_USBD_INFO_T;
AnnaBridge 174:b96e65c34a4d 33
AnnaBridge 174:b96e65c34a4d 34 /// @cond HIDDEN_SYMBOLS
AnnaBridge 174:b96e65c34a4d 35 extern S_USBD_INFO_T gsInfo;
AnnaBridge 174:b96e65c34a4d 36 /// @endcond /* HIDDEN_SYMBOLS */
AnnaBridge 174:b96e65c34a4d 37
AnnaBridge 174:b96e65c34a4d 38 /*@}*/ /* end of group NANO100_USBD_EXPORTED_STRUCTS */
AnnaBridge 174:b96e65c34a4d 39
AnnaBridge 174:b96e65c34a4d 40 /** @addtogroup NANO100_USBD_EXPORTED_CONSTANTS USBD Exported Constants
AnnaBridge 174:b96e65c34a4d 41 @{
AnnaBridge 174:b96e65c34a4d 42 */
AnnaBridge 174:b96e65c34a4d 43 #define USBD_BUF_BASE (USBD_BASE+0x100)
AnnaBridge 174:b96e65c34a4d 44
AnnaBridge 174:b96e65c34a4d 45 #define USBD_MAX_EP 8
AnnaBridge 174:b96e65c34a4d 46
AnnaBridge 174:b96e65c34a4d 47 #define EP0 0 /*!< Endpoint 0 */
AnnaBridge 174:b96e65c34a4d 48 #define EP1 1 /*!< Endpoint 1 */
AnnaBridge 174:b96e65c34a4d 49 #define EP2 2 /*!< Endpoint 2 */
AnnaBridge 174:b96e65c34a4d 50 #define EP3 3 /*!< Endpoint 3 */
AnnaBridge 174:b96e65c34a4d 51 #define EP4 4 /*!< Endpoint 4 */
AnnaBridge 174:b96e65c34a4d 52 #define EP5 5 /*!< Endpoint 5 */
AnnaBridge 174:b96e65c34a4d 53 #define EP6 6 /*!< Endpoint 6 */
AnnaBridge 174:b96e65c34a4d 54 #define EP7 7 /*!< Endpoint 7 */
AnnaBridge 174:b96e65c34a4d 55
AnnaBridge 174:b96e65c34a4d 56 /// @cond HIDDEN_SYMBOLS
AnnaBridge 174:b96e65c34a4d 57 extern volatile uint32_t g_usbd_UsbConfig;
AnnaBridge 174:b96e65c34a4d 58
AnnaBridge 174:b96e65c34a4d 59 /*!<USB Request Type */
AnnaBridge 174:b96e65c34a4d 60 #define REQ_STANDARD 0x00
AnnaBridge 174:b96e65c34a4d 61 #define REQ_CLASS 0x20
AnnaBridge 174:b96e65c34a4d 62 #define REQ_VENDOR 0x40
AnnaBridge 174:b96e65c34a4d 63
AnnaBridge 174:b96e65c34a4d 64 /*!<USB Standard Request */
AnnaBridge 174:b96e65c34a4d 65 #define GET_STATUS 0x00
AnnaBridge 174:b96e65c34a4d 66 #define CLEAR_FEATURE 0x01
AnnaBridge 174:b96e65c34a4d 67 #define SET_FEATURE 0x03
AnnaBridge 174:b96e65c34a4d 68 #define SET_ADDRESS 0x05
AnnaBridge 174:b96e65c34a4d 69 #define GET_DESCRIPTOR 0x06
AnnaBridge 174:b96e65c34a4d 70 #define SET_DESCRIPTOR 0x07
AnnaBridge 174:b96e65c34a4d 71 #define GET_CONFIGURATION 0x08
AnnaBridge 174:b96e65c34a4d 72 #define SET_CONFIGURATION 0x09
AnnaBridge 174:b96e65c34a4d 73 #define GET_INTERFACE 0x0A
AnnaBridge 174:b96e65c34a4d 74 #define SET_INTERFACE 0x0B
AnnaBridge 174:b96e65c34a4d 75 #define SYNC_FRAME 0x0C
AnnaBridge 174:b96e65c34a4d 76
AnnaBridge 174:b96e65c34a4d 77 /*!<USB Descriptor Type */
AnnaBridge 174:b96e65c34a4d 78 #define DESC_DEVICE 0x01
AnnaBridge 174:b96e65c34a4d 79 #define DESC_CONFIG 0x02
AnnaBridge 174:b96e65c34a4d 80 #define DESC_STRING 0x03
AnnaBridge 174:b96e65c34a4d 81 #define DESC_INTERFACE 0x04
AnnaBridge 174:b96e65c34a4d 82 #define DESC_ENDPOINT 0x05
AnnaBridge 174:b96e65c34a4d 83 #define DESC_QUALIFIER 0x06
AnnaBridge 174:b96e65c34a4d 84 #define DESC_OTHERSPEED 0x07
AnnaBridge 174:b96e65c34a4d 85
AnnaBridge 174:b96e65c34a4d 86 /*!<USB HID Descriptor Type */
AnnaBridge 174:b96e65c34a4d 87 #define DESC_HID 0x21
AnnaBridge 174:b96e65c34a4d 88 #define DESC_HID_RPT 0x22
AnnaBridge 174:b96e65c34a4d 89
AnnaBridge 174:b96e65c34a4d 90 /*!<USB Descriptor Length */
AnnaBridge 174:b96e65c34a4d 91 #define LEN_DEVICE 18
AnnaBridge 174:b96e65c34a4d 92 #define LEN_CONFIG 9
AnnaBridge 174:b96e65c34a4d 93 #define LEN_INTERFACE 9
AnnaBridge 174:b96e65c34a4d 94 #define LEN_ENDPOINT 7
AnnaBridge 174:b96e65c34a4d 95 #define LEN_HID 9
AnnaBridge 174:b96e65c34a4d 96 #define LEN_CCID 0x36
AnnaBridge 174:b96e65c34a4d 97
AnnaBridge 174:b96e65c34a4d 98 /*!<USB Endpoint Type */
AnnaBridge 174:b96e65c34a4d 99 #define EP_ISO 0x01
AnnaBridge 174:b96e65c34a4d 100 #define EP_BULK 0x02
AnnaBridge 174:b96e65c34a4d 101 #define EP_INT 0x03
AnnaBridge 174:b96e65c34a4d 102
AnnaBridge 174:b96e65c34a4d 103 #define EP_INPUT 0x80
AnnaBridge 174:b96e65c34a4d 104 #define EP_OUTPUT 0x00
AnnaBridge 174:b96e65c34a4d 105
AnnaBridge 174:b96e65c34a4d 106 /*!<USB Feature Selector */
AnnaBridge 174:b96e65c34a4d 107 #define FEATURE_DEVICE_REMOTE_WAKEUP 0x01
AnnaBridge 174:b96e65c34a4d 108 #define FEATURE_ENDPOINT_HALT 0x00
AnnaBridge 174:b96e65c34a4d 109
AnnaBridge 174:b96e65c34a4d 110 /// @endcond
AnnaBridge 174:b96e65c34a4d 111
AnnaBridge 174:b96e65c34a4d 112 #define USBD_WAKEUP_EN USBD_CTL_WAKEUP_EN_Msk /*!< USB Wake-up Enable */
AnnaBridge 174:b96e65c34a4d 113 #define USBD_DRVSE0 USBD_CTL_DRVSE0_Msk /*!< Drive SE0 */
AnnaBridge 174:b96e65c34a4d 114
AnnaBridge 174:b96e65c34a4d 115 #define USBD_DPPU_EN USBD_CTL_DPPU_EN_Msk /*!< USB D+ Pull-up Enable */
AnnaBridge 174:b96e65c34a4d 116 #define USBD_PWRDN USBD_CTL_PWRDB_Msk /*!< PHY Turn-On */
AnnaBridge 174:b96e65c34a4d 117 #define USBD_PHY_EN USBD_CTL_PHY_EN_Msk /*!< PHY Enable */
AnnaBridge 174:b96e65c34a4d 118 #define USBD_USB_EN USBD_CTL_USB_EN_Msk /*!< USB Enable */
AnnaBridge 174:b96e65c34a4d 119
AnnaBridge 174:b96e65c34a4d 120 #define USBD_INT_BUS USBD_INTEN_BUSEVT_IE_Msk /*!< USB Bus Event Interrupt */
AnnaBridge 174:b96e65c34a4d 121 #define USBD_INT_USB USBD_INTEN_USBEVT_IE_Msk /*!< USB usb Event Interrupt */
AnnaBridge 174:b96e65c34a4d 122 #define USBD_INT_FLDET USBD_INTEN_FLDET_IE_Msk /*!< USB Float Detect Interrupt */
AnnaBridge 174:b96e65c34a4d 123 #define USBD_INT_WAKEUP USBD_INTEN_WAKEUP_IE_Msk /*!< USB Wake-up Interrupt */
AnnaBridge 174:b96e65c34a4d 124
AnnaBridge 174:b96e65c34a4d 125 #define USBD_INTSTS_WAKEUP USBD_INTSTS_WKEUP_STS_Msk /*!< USB Wakeup Interrupt Status */
AnnaBridge 174:b96e65c34a4d 126 #define USBD_INTSTS_FLDET USBD_INTSTS_FLD_STS_Msk /*!< USB Float Detect Interrupt Status */
AnnaBridge 174:b96e65c34a4d 127 #define USBD_INTSTS_BUS USBD_INTSTS_BUS_STS_Msk /*!< USB Bus Event Interrupt Status */
AnnaBridge 174:b96e65c34a4d 128 #define USBD_INTSTS_USB USBD_INTSTS_USB_STS_Msk /*!< USB usb Event Interrupt Status */
AnnaBridge 174:b96e65c34a4d 129 #define USBD_INTSTS_SETUP USBD_INTSTS_SETUP_Msk /*!< USB Setup Event */
AnnaBridge 174:b96e65c34a4d 130 #define USBD_INTSTS_EP0 USBD_INTSTS_EPEVT0_Msk /*!< USB Endpoint 0 Event */
AnnaBridge 174:b96e65c34a4d 131 #define USBD_INTSTS_EP1 USBD_INTSTS_EPEVT1_Msk /*!< USB Endpoint 1 Event */
AnnaBridge 174:b96e65c34a4d 132 #define USBD_INTSTS_EP2 USBD_INTSTS_EPEVT2_Msk /*!< USB Endpoint 2 Event */
AnnaBridge 174:b96e65c34a4d 133 #define USBD_INTSTS_EP3 USBD_INTSTS_EPEVT3_Msk /*!< USB Endpoint 3 Event */
AnnaBridge 174:b96e65c34a4d 134 #define USBD_INTSTS_EP4 USBD_INTSTS_EPEVT4_Msk /*!< USB Endpoint 4 Event */
AnnaBridge 174:b96e65c34a4d 135 #define USBD_INTSTS_EP5 USBD_INTSTS_EPEVT5_Msk /*!< USB Endpoint 5 Event */
AnnaBridge 174:b96e65c34a4d 136 #define USBD_INTSTS_EP6 USBD_INTSTS_EPEVT6_Msk /*!< USB Endpoint 6 Event */
AnnaBridge 174:b96e65c34a4d 137 #define USBD_INTSTS_EP7 USBD_INTSTS_EPEVT7_Msk /*!< USB Endpoint 7 Event */
AnnaBridge 174:b96e65c34a4d 138
AnnaBridge 174:b96e65c34a4d 139 #define USBD_STATE_USBRST USBD_BUSSTS_USBRST_Msk /*!< USB Bus Reset */
AnnaBridge 174:b96e65c34a4d 140 #define USBD_STATE_SUSPEND USBD_BUSSTS_SUSPEND_Msk /*!< USB Bus Suspend */
AnnaBridge 174:b96e65c34a4d 141 #define USBD_STATE_RESUME USBD_BUSSTS_RESUME_Msk /*!< USB Bus Resume */
AnnaBridge 174:b96e65c34a4d 142 #define USBD_STATE_TIMEOUT USBD_BUSSTS_TIMEOUT_Msk /*!< USB Bus Timeout */
AnnaBridge 174:b96e65c34a4d 143
AnnaBridge 174:b96e65c34a4d 144 #define USBD_CFG_SSTALL USBD_CFG_SSTALL_Msk /*!< Set Stall */
AnnaBridge 174:b96e65c34a4d 145 #define USBD_CFG_CSTALL USBD_CFG_CSTALL_Msk /*!< Clear Stall */
AnnaBridge 174:b96e65c34a4d 146
AnnaBridge 174:b96e65c34a4d 147 #define USBD_CFG_EPMODE_DISABLE (0ul << USBD_CFG_EPMODE_Pos)/*!< Endpoint Disable */
AnnaBridge 174:b96e65c34a4d 148 #define USBD_CFG_EPMODE_OUT (1ul << USBD_CFG_EPMODE_Pos)/*!< Out Endpoint */
AnnaBridge 174:b96e65c34a4d 149 #define USBD_CFG_EPMODE_IN (2ul << USBD_CFG_EPMODE_Pos)/*!< In Endpoint */
AnnaBridge 174:b96e65c34a4d 150 #define USBD_CFG_TYPE_ISO (1ul << USBD_CFG_ISOCH_Pos) /*!< Isochronous */
AnnaBridge 174:b96e65c34a4d 151
AnnaBridge 174:b96e65c34a4d 152
AnnaBridge 174:b96e65c34a4d 153 /*@}*/ /* end of group NANO100_USBD_EXPORTED_CONSTANTS */
AnnaBridge 174:b96e65c34a4d 154
AnnaBridge 174:b96e65c34a4d 155
AnnaBridge 174:b96e65c34a4d 156 /** @addtogroup NANO100_USBD_EXPORTED_FUNCTIONS USBD Exported Functions
AnnaBridge 174:b96e65c34a4d 157 @{
AnnaBridge 174:b96e65c34a4d 158 */
AnnaBridge 174:b96e65c34a4d 159
AnnaBridge 174:b96e65c34a4d 160 /**
AnnaBridge 174:b96e65c34a4d 161 * @brief Compare two input numbers and return maximum one.
AnnaBridge 174:b96e65c34a4d 162 *
AnnaBridge 174:b96e65c34a4d 163 * @param[in] a First number to be compared.
AnnaBridge 174:b96e65c34a4d 164 * @param[in] b Second number to be compared.
AnnaBridge 174:b96e65c34a4d 165 *
AnnaBridge 174:b96e65c34a4d 166 * @return Maximum value between a and b.
AnnaBridge 174:b96e65c34a4d 167 *
AnnaBridge 174:b96e65c34a4d 168 * @details If a > b, then return a. Otherwise, return b.
AnnaBridge 174:b96e65c34a4d 169 */
AnnaBridge 174:b96e65c34a4d 170 #define Maximum(a,b) ((a)>(b) ? (a) : (b))
AnnaBridge 174:b96e65c34a4d 171
AnnaBridge 174:b96e65c34a4d 172
AnnaBridge 174:b96e65c34a4d 173 /**
AnnaBridge 174:b96e65c34a4d 174 * @brief Compare two input numbers and return minimum one
AnnaBridge 174:b96e65c34a4d 175 *
AnnaBridge 174:b96e65c34a4d 176 * @param[in] a First number to be compared
AnnaBridge 174:b96e65c34a4d 177 * @param[in] b Second number to be compared
AnnaBridge 174:b96e65c34a4d 178 *
AnnaBridge 174:b96e65c34a4d 179 * @return Minimum value between a and b
AnnaBridge 174:b96e65c34a4d 180 *
AnnaBridge 174:b96e65c34a4d 181 * @details If a < b, then return a. Otherwise, return b.
AnnaBridge 174:b96e65c34a4d 182 */
AnnaBridge 174:b96e65c34a4d 183 #define Minimum(a,b) ((a)<(b) ? (a) : (b))
AnnaBridge 174:b96e65c34a4d 184
AnnaBridge 174:b96e65c34a4d 185 /**
AnnaBridge 174:b96e65c34a4d 186 * @brief Enable USBD engine
AnnaBridge 174:b96e65c34a4d 187 * @param None
AnnaBridge 174:b96e65c34a4d 188 * @retval None
AnnaBridge 174:b96e65c34a4d 189 */
AnnaBridge 174:b96e65c34a4d 190 #define USBD_ENABLE_USB() ((uint32_t)(USBD->CTL |= 0xF))
AnnaBridge 174:b96e65c34a4d 191
AnnaBridge 174:b96e65c34a4d 192 /**
AnnaBridge 174:b96e65c34a4d 193 * @brief Disable USBD engine
AnnaBridge 174:b96e65c34a4d 194 * @param None
AnnaBridge 174:b96e65c34a4d 195 * @retval None
AnnaBridge 174:b96e65c34a4d 196 */
AnnaBridge 174:b96e65c34a4d 197 #define USBD_DISABLE_USB() ((uint32_t)(USBD->CTL &= ~USBD_USB_EN))
AnnaBridge 174:b96e65c34a4d 198
AnnaBridge 174:b96e65c34a4d 199 /**
AnnaBridge 174:b96e65c34a4d 200 * @brief Enable USBD PHY
AnnaBridge 174:b96e65c34a4d 201 * @param None
AnnaBridge 174:b96e65c34a4d 202 * @retval None
AnnaBridge 174:b96e65c34a4d 203 */
AnnaBridge 174:b96e65c34a4d 204 #define USBD_ENABLE_PHY() ((uint32_t)(USBD->CTL |= USBD_PHY_EN))
AnnaBridge 174:b96e65c34a4d 205
AnnaBridge 174:b96e65c34a4d 206 /**
AnnaBridge 174:b96e65c34a4d 207 * @brief Disable USBD PHY
AnnaBridge 174:b96e65c34a4d 208 * @param None
AnnaBridge 174:b96e65c34a4d 209 * @retval None
AnnaBridge 174:b96e65c34a4d 210 */
AnnaBridge 174:b96e65c34a4d 211 #define USBD_DISABLE_PHY() ((uint32_t)(USBD->CTL &= ~USBD_PHY_EN))
AnnaBridge 174:b96e65c34a4d 212
AnnaBridge 174:b96e65c34a4d 213 /**
AnnaBridge 174:b96e65c34a4d 214 * @brief Force USB PHY Transceiver to Drive SE0
AnnaBridge 174:b96e65c34a4d 215 * @param None
AnnaBridge 174:b96e65c34a4d 216 * @retval None
AnnaBridge 174:b96e65c34a4d 217 */
AnnaBridge 174:b96e65c34a4d 218 #define USBD_SET_SE0() ((uint32_t)(USBD->CTL |= USBD_DRVSE0))
AnnaBridge 174:b96e65c34a4d 219
AnnaBridge 174:b96e65c34a4d 220 /**
AnnaBridge 174:b96e65c34a4d 221 * @brief Release SE0
AnnaBridge 174:b96e65c34a4d 222 * @param None
AnnaBridge 174:b96e65c34a4d 223 * @retval None
AnnaBridge 174:b96e65c34a4d 224 */
AnnaBridge 174:b96e65c34a4d 225 #define USBD_CLR_SE0() ((uint32_t)(USBD->CTL &= ~USBD_DRVSE0))
AnnaBridge 174:b96e65c34a4d 226
AnnaBridge 174:b96e65c34a4d 227 /**
AnnaBridge 174:b96e65c34a4d 228 * @brief Set USBD address
AnnaBridge 174:b96e65c34a4d 229 * @param[in] addr host assign address number
AnnaBridge 174:b96e65c34a4d 230 * @retval None
AnnaBridge 174:b96e65c34a4d 231 */
AnnaBridge 174:b96e65c34a4d 232 #define USBD_SET_ADDR(addr) (USBD->FADDR = (addr))
AnnaBridge 174:b96e65c34a4d 233
AnnaBridge 174:b96e65c34a4d 234 /**
AnnaBridge 174:b96e65c34a4d 235 * @brief Get USBD address
AnnaBridge 174:b96e65c34a4d 236 * @param None
AnnaBridge 174:b96e65c34a4d 237 * @retval USBD address
AnnaBridge 174:b96e65c34a4d 238 */
AnnaBridge 174:b96e65c34a4d 239 #define USBD_GET_ADDR() ((uint32_t)(USBD->FADDR))
AnnaBridge 174:b96e65c34a4d 240
AnnaBridge 174:b96e65c34a4d 241 /**
AnnaBridge 174:b96e65c34a4d 242 * @brief Enable USBD interrupt
AnnaBridge 174:b96e65c34a4d 243 * @param[in] intr interrupt mask
AnnaBridge 174:b96e65c34a4d 244 * @retval None
AnnaBridge 174:b96e65c34a4d 245 */
AnnaBridge 174:b96e65c34a4d 246 #define USBD_ENABLE_INT(intr) (USBD->INTEN |= (intr))
AnnaBridge 174:b96e65c34a4d 247
AnnaBridge 174:b96e65c34a4d 248 /**
AnnaBridge 174:b96e65c34a4d 249 * @brief Get USBD interrupt flag
AnnaBridge 174:b96e65c34a4d 250 * @param None
AnnaBridge 174:b96e65c34a4d 251 * @retval interrupt status
AnnaBridge 174:b96e65c34a4d 252 */
AnnaBridge 174:b96e65c34a4d 253 #define USBD_GET_INT_FLAG() ((uint32_t)(USBD->INTSTS))
AnnaBridge 174:b96e65c34a4d 254
AnnaBridge 174:b96e65c34a4d 255 /**
AnnaBridge 174:b96e65c34a4d 256 * @brief Clear USBD interrupt
AnnaBridge 174:b96e65c34a4d 257 * @param[in] flag interrupt flag
AnnaBridge 174:b96e65c34a4d 258 * @retval None
AnnaBridge 174:b96e65c34a4d 259 */
AnnaBridge 174:b96e65c34a4d 260 #define USBD_CLR_INT_FLAG(flag) (USBD->INTSTS = flag)
AnnaBridge 174:b96e65c34a4d 261
AnnaBridge 174:b96e65c34a4d 262 /**
AnnaBridge 174:b96e65c34a4d 263 * @brief Get USBD Endpoint status
AnnaBridge 174:b96e65c34a4d 264 * @param None
AnnaBridge 174:b96e65c34a4d 265 * @retval endpoint status
AnnaBridge 174:b96e65c34a4d 266 */
AnnaBridge 174:b96e65c34a4d 267 #define USBD_GET_EP_FLAG() ((uint32_t)(USBD->EPSTS))
AnnaBridge 174:b96e65c34a4d 268
AnnaBridge 174:b96e65c34a4d 269 /**
AnnaBridge 174:b96e65c34a4d 270 * @brief Get USBD bus state
AnnaBridge 174:b96e65c34a4d 271 * @param None
AnnaBridge 174:b96e65c34a4d 272 * @retval bus status
AnnaBridge 174:b96e65c34a4d 273 */
AnnaBridge 174:b96e65c34a4d 274 #define USBD_GET_BUS_STATE() ((uint32_t)(USBD->BUSSTS & 0xf))
AnnaBridge 174:b96e65c34a4d 275
AnnaBridge 174:b96e65c34a4d 276 /**
AnnaBridge 174:b96e65c34a4d 277 * @brief check cable connect state
AnnaBridge 174:b96e65c34a4d 278 * @param None
AnnaBridge 174:b96e65c34a4d 279 * @retval connect / disconnect
AnnaBridge 174:b96e65c34a4d 280 */
AnnaBridge 174:b96e65c34a4d 281 #define USBD_IS_ATTACHED() ((uint32_t)(USBD->BUSSTS & USBD_BUSSTS_FLDET_Msk))
AnnaBridge 174:b96e65c34a4d 282
AnnaBridge 174:b96e65c34a4d 283 /**
AnnaBridge 174:b96e65c34a4d 284 * @brief Stop USB endpoint transaction
AnnaBridge 174:b96e65c34a4d 285 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 286 * @retval None
AnnaBridge 174:b96e65c34a4d 287 */
AnnaBridge 174:b96e65c34a4d 288 #define USBD_STOP_TRANSACTION(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) |= USBD_CFG_CLRRDY_Msk)
AnnaBridge 174:b96e65c34a4d 289
AnnaBridge 174:b96e65c34a4d 290 /**
AnnaBridge 174:b96e65c34a4d 291 * @brief Set USB data1 token
AnnaBridge 174:b96e65c34a4d 292 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 293 * @retval None
AnnaBridge 174:b96e65c34a4d 294 */
AnnaBridge 174:b96e65c34a4d 295 #define USBD_SET_DATA1(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) |= USBD_CFG_DSQ_SYNC_Msk)
AnnaBridge 174:b96e65c34a4d 296
AnnaBridge 174:b96e65c34a4d 297 /**
AnnaBridge 174:b96e65c34a4d 298 * @brief Set USB data0 token
AnnaBridge 174:b96e65c34a4d 299 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 300 * @retval None
AnnaBridge 174:b96e65c34a4d 301 */
AnnaBridge 174:b96e65c34a4d 302 #define USBD_SET_DATA0(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) &= (~USBD_CFG_DSQ_SYNC_Msk))
AnnaBridge 174:b96e65c34a4d 303
AnnaBridge 174:b96e65c34a4d 304 /**
AnnaBridge 174:b96e65c34a4d 305 * @brief Set USB payload size (IN data)
AnnaBridge 174:b96e65c34a4d 306 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 307 * @param[in] size IN transfer length
AnnaBridge 174:b96e65c34a4d 308 * @retval None
AnnaBridge 174:b96e65c34a4d 309 */
AnnaBridge 174:b96e65c34a4d 310 #define USBD_SET_PAYLOAD_LEN(ep, size) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))) = (size))
AnnaBridge 174:b96e65c34a4d 311
AnnaBridge 174:b96e65c34a4d 312 /**
AnnaBridge 174:b96e65c34a4d 313 * @brief Get USB payload size (OUT data)
AnnaBridge 174:b96e65c34a4d 314 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 315 * @retval received data length
AnnaBridge 174:b96e65c34a4d 316 */
AnnaBridge 174:b96e65c34a4d 317 #define USBD_GET_PAYLOAD_LEN(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))))
AnnaBridge 174:b96e65c34a4d 318
AnnaBridge 174:b96e65c34a4d 319 /**
AnnaBridge 174:b96e65c34a4d 320 * @brief config endpoint
AnnaBridge 174:b96e65c34a4d 321 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 322 * @param[in] config config value
AnnaBridge 174:b96e65c34a4d 323 * @retval None
AnnaBridge 174:b96e65c34a4d 324 */
AnnaBridge 174:b96e65c34a4d 325 #define USBD_CONFIG_EP(ep, config) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) = (config))
AnnaBridge 174:b96e65c34a4d 326
AnnaBridge 174:b96e65c34a4d 327 /**
AnnaBridge 174:b96e65c34a4d 328 * @brief Set buffer for USB endpoint
AnnaBridge 174:b96e65c34a4d 329 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 330 * @param[in] offset buffer offset
AnnaBridge 174:b96e65c34a4d 331 * @retval None
AnnaBridge 174:b96e65c34a4d 332 */
AnnaBridge 174:b96e65c34a4d 333 #define USBD_SET_EP_BUF_ADDR(ep, offset) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4))) = (offset))
AnnaBridge 174:b96e65c34a4d 334
AnnaBridge 174:b96e65c34a4d 335 /**
AnnaBridge 174:b96e65c34a4d 336 * @brief Get buffer for USB endpoint
AnnaBridge 174:b96e65c34a4d 337 * @param[in] ep endpoint
AnnaBridge 174:b96e65c34a4d 338 * @retval buffer offset
AnnaBridge 174:b96e65c34a4d 339 */
AnnaBridge 174:b96e65c34a4d 340 #define USBD_GET_EP_BUF_ADDR(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4))))
AnnaBridge 174:b96e65c34a4d 341
AnnaBridge 174:b96e65c34a4d 342 /**
AnnaBridge 174:b96e65c34a4d 343 * @brief Set USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 344 *
AnnaBridge 174:b96e65c34a4d 345 * @param[in] ep The USB endpoint ID.
AnnaBridge 174:b96e65c34a4d 346 *
AnnaBridge 174:b96e65c34a4d 347 * @return None
AnnaBridge 174:b96e65c34a4d 348 *
AnnaBridge 174:b96e65c34a4d 349 * @details Set USB endpoint stall state for the specified endpoint ID. Endpoint will respond STALL token automatically.
AnnaBridge 174:b96e65c34a4d 350 *
AnnaBridge 174:b96e65c34a4d 351 */
AnnaBridge 174:b96e65c34a4d 352 #define USBD_SET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) |= USBD_CFG_SSTALL_Msk)
AnnaBridge 174:b96e65c34a4d 353
AnnaBridge 174:b96e65c34a4d 354 /**
AnnaBridge 174:b96e65c34a4d 355 * @brief Clear USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 356 *
AnnaBridge 174:b96e65c34a4d 357 * @param[in] ep The USB endpoint ID.
AnnaBridge 174:b96e65c34a4d 358 *
AnnaBridge 174:b96e65c34a4d 359 * @return None
AnnaBridge 174:b96e65c34a4d 360 *
AnnaBridge 174:b96e65c34a4d 361 * @details Clear USB endpoint stall state for the specified endpoint ID. Endpoint will respond ACK/NAK token.
AnnaBridge 174:b96e65c34a4d 362 */
AnnaBridge 174:b96e65c34a4d 363 #define USBD_CLR_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) &= ~USBD_CFG_SSTALL_Msk)
AnnaBridge 174:b96e65c34a4d 364
AnnaBridge 174:b96e65c34a4d 365 /**
AnnaBridge 174:b96e65c34a4d 366 * @brief Get USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 367 *
AnnaBridge 174:b96e65c34a4d 368 * @param[in] ep The USB endpoint ID.
AnnaBridge 174:b96e65c34a4d 369 *
AnnaBridge 174:b96e65c34a4d 370 * @retval 0 USB endpoint is not stalled.
AnnaBridge 174:b96e65c34a4d 371 * @retval Others USB endpoint is stalled.
AnnaBridge 174:b96e65c34a4d 372 *
AnnaBridge 174:b96e65c34a4d 373 * @details Get USB endpoint stall state of the specified endpoint ID.
AnnaBridge 174:b96e65c34a4d 374 *
AnnaBridge 174:b96e65c34a4d 375 */
AnnaBridge 174:b96e65c34a4d 376 #define USBD_GET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) & USBD_CFG_SSTALL_Msk)
AnnaBridge 174:b96e65c34a4d 377
AnnaBridge 174:b96e65c34a4d 378 /**
AnnaBridge 174:b96e65c34a4d 379 * @brief To support byte access between USB SRAM and system SRAM
AnnaBridge 174:b96e65c34a4d 380 *
AnnaBridge 174:b96e65c34a4d 381 * @param[in] dest Destination pointer.
AnnaBridge 174:b96e65c34a4d 382 *
AnnaBridge 174:b96e65c34a4d 383 * @param[in] src Source pointer.
AnnaBridge 174:b96e65c34a4d 384 *
AnnaBridge 174:b96e65c34a4d 385 * @param[in] size Byte count.
AnnaBridge 174:b96e65c34a4d 386 *
AnnaBridge 174:b96e65c34a4d 387 * @return None
AnnaBridge 174:b96e65c34a4d 388 *
AnnaBridge 174:b96e65c34a4d 389 * @details This function will copy the number of data specified by size and src parameters to the address specified by dest parameter.
AnnaBridge 174:b96e65c34a4d 390 *
AnnaBridge 174:b96e65c34a4d 391 */
AnnaBridge 174:b96e65c34a4d 392 static __INLINE void USBD_MemCopy(uint8_t *dest, uint8_t *src, int32_t size)
AnnaBridge 174:b96e65c34a4d 393 {
AnnaBridge 174:b96e65c34a4d 394 while (size--) *dest++ = *src++;
AnnaBridge 174:b96e65c34a4d 395 }
AnnaBridge 174:b96e65c34a4d 396
AnnaBridge 174:b96e65c34a4d 397
AnnaBridge 174:b96e65c34a4d 398 /**
AnnaBridge 174:b96e65c34a4d 399 * @brief Set USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 400 *
AnnaBridge 174:b96e65c34a4d 401 * @param[in] epnum USB endpoint number
AnnaBridge 174:b96e65c34a4d 402 * @return None
AnnaBridge 174:b96e65c34a4d 403 *
AnnaBridge 174:b96e65c34a4d 404 * @details Set USB endpoint stall state, endpoint will return STALL token.
AnnaBridge 174:b96e65c34a4d 405 */
AnnaBridge 174:b96e65c34a4d 406 static __INLINE void USBD_SetStall(uint8_t epnum)
AnnaBridge 174:b96e65c34a4d 407 {
AnnaBridge 174:b96e65c34a4d 408 uint32_t u32CfgAddr;
AnnaBridge 174:b96e65c34a4d 409 uint32_t u32Cfg;
AnnaBridge 174:b96e65c34a4d 410 int i;
AnnaBridge 174:b96e65c34a4d 411
AnnaBridge 174:b96e65c34a4d 412 for (i=0; i<USBD_MAX_EP; i++) {
AnnaBridge 174:b96e65c34a4d 413 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 174:b96e65c34a4d 414 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
AnnaBridge 174:b96e65c34a4d 415
AnnaBridge 174:b96e65c34a4d 416 if((u32Cfg & 0xf) == epnum) {
AnnaBridge 174:b96e65c34a4d 417 *((__IO uint32_t *) (u32CfgAddr)) = (u32Cfg | USBD_CFG_SSTALL);
AnnaBridge 174:b96e65c34a4d 418 break;
AnnaBridge 174:b96e65c34a4d 419 }
AnnaBridge 174:b96e65c34a4d 420 }
AnnaBridge 174:b96e65c34a4d 421 }
AnnaBridge 174:b96e65c34a4d 422
AnnaBridge 174:b96e65c34a4d 423 /**
AnnaBridge 174:b96e65c34a4d 424 * @brief Clear USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 425 *
AnnaBridge 174:b96e65c34a4d 426 * @param[in] epnum USB endpoint number
AnnaBridge 174:b96e65c34a4d 427 * @return None
AnnaBridge 174:b96e65c34a4d 428 *
AnnaBridge 174:b96e65c34a4d 429 * @details Clear USB endpoint stall state, endpoint will return ACK/NAK token.
AnnaBridge 174:b96e65c34a4d 430 */
AnnaBridge 174:b96e65c34a4d 431 static __INLINE void USBD_ClearStall(uint8_t epnum)
AnnaBridge 174:b96e65c34a4d 432 {
AnnaBridge 174:b96e65c34a4d 433 uint32_t u32CfgAddr;
AnnaBridge 174:b96e65c34a4d 434 uint32_t u32Cfg;
AnnaBridge 174:b96e65c34a4d 435 int i;
AnnaBridge 174:b96e65c34a4d 436
AnnaBridge 174:b96e65c34a4d 437 for (i=0; i<USBD_MAX_EP; i++) {
AnnaBridge 174:b96e65c34a4d 438 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 174:b96e65c34a4d 439 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
AnnaBridge 174:b96e65c34a4d 440
AnnaBridge 174:b96e65c34a4d 441 if((u32Cfg & 0xf) == epnum) {
AnnaBridge 174:b96e65c34a4d 442 *((__IO uint32_t *) (u32CfgAddr)) = (u32Cfg & ~USBD_CFG_SSTALL);
AnnaBridge 174:b96e65c34a4d 443 break;
AnnaBridge 174:b96e65c34a4d 444 }
AnnaBridge 174:b96e65c34a4d 445 }
AnnaBridge 174:b96e65c34a4d 446 }
AnnaBridge 174:b96e65c34a4d 447
AnnaBridge 174:b96e65c34a4d 448 /**
AnnaBridge 174:b96e65c34a4d 449 * @brief Get USB endpoint stall state
AnnaBridge 174:b96e65c34a4d 450 *
AnnaBridge 174:b96e65c34a4d 451 * @param[in] epnum USB endpoint number
AnnaBridge 174:b96e65c34a4d 452 * @retval 0 USB endpoint is not stalled.
AnnaBridge 174:b96e65c34a4d 453 * @retval non-0 USB endpoint is stalled.
AnnaBridge 174:b96e65c34a4d 454 *
AnnaBridge 174:b96e65c34a4d 455 * @details Get USB endpoint stall state.
AnnaBridge 174:b96e65c34a4d 456 */
AnnaBridge 174:b96e65c34a4d 457 static __INLINE uint32_t USBD_GetStall(uint8_t epnum)
AnnaBridge 174:b96e65c34a4d 458 {
AnnaBridge 174:b96e65c34a4d 459 uint32_t u32CfgAddr;
AnnaBridge 174:b96e65c34a4d 460 uint32_t u32Cfg;
AnnaBridge 174:b96e65c34a4d 461 int i;
AnnaBridge 174:b96e65c34a4d 462
AnnaBridge 174:b96e65c34a4d 463 for (i=0; i<USBD_MAX_EP; i++) {
AnnaBridge 174:b96e65c34a4d 464 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 174:b96e65c34a4d 465 u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
AnnaBridge 174:b96e65c34a4d 466
AnnaBridge 174:b96e65c34a4d 467 if((u32Cfg & 0xf) == epnum)
AnnaBridge 174:b96e65c34a4d 468 break;
AnnaBridge 174:b96e65c34a4d 469 }
AnnaBridge 174:b96e65c34a4d 470 return (u32Cfg & USBD_CFG_SSTALL);
AnnaBridge 174:b96e65c34a4d 471 }
AnnaBridge 174:b96e65c34a4d 472
AnnaBridge 174:b96e65c34a4d 473
AnnaBridge 174:b96e65c34a4d 474 /*--------------------------------------------------------------------*/
AnnaBridge 174:b96e65c34a4d 475 extern volatile uint8_t g_usbd_RemoteWakeupEn;
AnnaBridge 174:b96e65c34a4d 476
AnnaBridge 174:b96e65c34a4d 477 typedef void (*VENDOR_REQ)(void); /*!<USB Vendor request callback function */
AnnaBridge 174:b96e65c34a4d 478
AnnaBridge 174:b96e65c34a4d 479 typedef void (*CLASS_REQ)(void); /*!<USB Class request callback function */
AnnaBridge 174:b96e65c34a4d 480
AnnaBridge 174:b96e65c34a4d 481 typedef void (*SET_INTERFACE_REQ)(uint32_t u32AltInterface); /*!<USB Standard request "Set Interface" callback function */
AnnaBridge 174:b96e65c34a4d 482
AnnaBridge 174:b96e65c34a4d 483 /*--------------------------------------------------------------------*/
AnnaBridge 174:b96e65c34a4d 484 void USBD_Open(S_USBD_INFO_T *param, CLASS_REQ pfnClassReq, SET_INTERFACE_REQ pfnSetInterface);
AnnaBridge 174:b96e65c34a4d 485 void USBD_Start(void);
AnnaBridge 174:b96e65c34a4d 486 void USBD_GetSetupPacket(uint8_t *buf);
AnnaBridge 174:b96e65c34a4d 487 void USBD_ProcessSetupPacket(void);
AnnaBridge 174:b96e65c34a4d 488 void USBD_StandardRequest(void);
AnnaBridge 174:b96e65c34a4d 489 void USBD_PrepareCtrlIn(uint8_t *pu8Buf, uint32_t u32Size);
AnnaBridge 174:b96e65c34a4d 490 void USBD_CtrlIn(void);
AnnaBridge 174:b96e65c34a4d 491 void USBD_PrepareCtrlOut(uint8_t *pu8Buf, uint32_t u32Size);
AnnaBridge 174:b96e65c34a4d 492 void USBD_CtrlOut(void);
AnnaBridge 174:b96e65c34a4d 493 void USBD_SwReset(void);
AnnaBridge 174:b96e65c34a4d 494 void USBD_SetVendorRequest(VENDOR_REQ pfnVendorReq);
AnnaBridge 174:b96e65c34a4d 495 void USBD_LockEpStall(uint32_t u32EpBitmap);
AnnaBridge 174:b96e65c34a4d 496
AnnaBridge 174:b96e65c34a4d 497
AnnaBridge 174:b96e65c34a4d 498 /*@}*/ /* end of group NANO100_USBD_EXPORTED_FUNCTIONS */
AnnaBridge 174:b96e65c34a4d 499
AnnaBridge 174:b96e65c34a4d 500 /*@}*/ /* end of group NANO100_USBD_Driver */
AnnaBridge 174:b96e65c34a4d 501
AnnaBridge 174:b96e65c34a4d 502 /*@}*/ /* end of group NANO100_Device_Driver */
AnnaBridge 174:b96e65c34a4d 503
AnnaBridge 174:b96e65c34a4d 504
AnnaBridge 174:b96e65c34a4d 505 #endif //__USBD_H__
AnnaBridge 174:b96e65c34a4d 506
AnnaBridge 174:b96e65c34a4d 507 /*** (C) COPYRIGHT 2013~2014 Nuvoton Technology Corp. ***/