The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /******************************************************************************
AnnaBridge 171:3a7713b1edbc 2 * @file usbd.h
AnnaBridge 171:3a7713b1edbc 3 * @brief M451 series USB driver header file
AnnaBridge 171:3a7713b1edbc 4 * @version 2.0.0
AnnaBridge 171:3a7713b1edbc 5 * @date 10, January, 2014
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * @note
AnnaBridge 171:3a7713b1edbc 8 * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved.
AnnaBridge 171:3a7713b1edbc 9 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 10 #ifndef __USBD_H__
AnnaBridge 171:3a7713b1edbc 11 #define __USBD_H__
AnnaBridge 171:3a7713b1edbc 12
AnnaBridge 171:3a7713b1edbc 13 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 14 extern "C"
AnnaBridge 171:3a7713b1edbc 15 {
AnnaBridge 171:3a7713b1edbc 16 #endif
AnnaBridge 171:3a7713b1edbc 17
AnnaBridge 171:3a7713b1edbc 18 /** @addtogroup Standard_Driver Standard Driver
AnnaBridge 171:3a7713b1edbc 19 @{
AnnaBridge 171:3a7713b1edbc 20 */
AnnaBridge 171:3a7713b1edbc 21
AnnaBridge 171:3a7713b1edbc 22 /** @addtogroup USBD_Driver USBD Driver
AnnaBridge 171:3a7713b1edbc 23 @{
AnnaBridge 171:3a7713b1edbc 24 */
AnnaBridge 171:3a7713b1edbc 25
AnnaBridge 171:3a7713b1edbc 26 /** @addtogroup USBD_EXPORTED_STRUCTS USBD Exported Structs
AnnaBridge 171:3a7713b1edbc 27 @{
AnnaBridge 171:3a7713b1edbc 28 */
AnnaBridge 171:3a7713b1edbc 29 typedef struct s_usbd_info
AnnaBridge 171:3a7713b1edbc 30 {
AnnaBridge 171:3a7713b1edbc 31 const uint8_t *gu8DevDesc; /*!< Pointer for USB Device Descriptor */
AnnaBridge 171:3a7713b1edbc 32 const uint8_t *gu8ConfigDesc; /*!< Pointer for USB Configuration Descriptor */
AnnaBridge 171:3a7713b1edbc 33 const uint8_t **gu8StringDesc; /*!< Pointer for USB String Descriptor pointers */
AnnaBridge 171:3a7713b1edbc 34 const uint8_t **gu8HidReportDesc; /*!< Pointer for USB HID Report Descriptor */
AnnaBridge 171:3a7713b1edbc 35 const uint32_t *gu32HidReportSize; /*!< Pointer for HID Report descriptor Size */
AnnaBridge 171:3a7713b1edbc 36 const uint32_t *gu32ConfigHidDescIdx; /*!< Pointer for HID Descriptor start index */
AnnaBridge 171:3a7713b1edbc 37
AnnaBridge 171:3a7713b1edbc 38 } S_USBD_INFO_T;
AnnaBridge 171:3a7713b1edbc 39
AnnaBridge 171:3a7713b1edbc 40 extern const S_USBD_INFO_T gsInfo;
AnnaBridge 171:3a7713b1edbc 41
AnnaBridge 171:3a7713b1edbc 42 /*@}*/ /* end of group USBD_EXPORTED_STRUCTS */
AnnaBridge 171:3a7713b1edbc 43
AnnaBridge 171:3a7713b1edbc 44
AnnaBridge 171:3a7713b1edbc 45
AnnaBridge 171:3a7713b1edbc 46
AnnaBridge 171:3a7713b1edbc 47 /** @addtogroup USBD_EXPORTED_CONSTANTS USBD Exported Constants
AnnaBridge 171:3a7713b1edbc 48 @{
AnnaBridge 171:3a7713b1edbc 49 */
AnnaBridge 171:3a7713b1edbc 50 #define USBD_BUF_BASE (USBD_BASE+0x100)
AnnaBridge 171:3a7713b1edbc 51 #define USBD_MAX_EP 8
AnnaBridge 171:3a7713b1edbc 52
AnnaBridge 171:3a7713b1edbc 53 #define EP0 0 /*!< Endpoint 0 */
AnnaBridge 171:3a7713b1edbc 54 #define EP1 1 /*!< Endpoint 1 */
AnnaBridge 171:3a7713b1edbc 55 #define EP2 2 /*!< Endpoint 2 */
AnnaBridge 171:3a7713b1edbc 56 #define EP3 3 /*!< Endpoint 3 */
AnnaBridge 171:3a7713b1edbc 57 #define EP4 4 /*!< Endpoint 4 */
AnnaBridge 171:3a7713b1edbc 58 #define EP5 5 /*!< Endpoint 5 */
AnnaBridge 171:3a7713b1edbc 59 #define EP6 6 /*!< Endpoint 6 */
AnnaBridge 171:3a7713b1edbc 60 #define EP7 7 /*!< Endpoint 7 */
AnnaBridge 171:3a7713b1edbc 61
AnnaBridge 171:3a7713b1edbc 62
AnnaBridge 171:3a7713b1edbc 63 /*!<USB Request Type */
AnnaBridge 171:3a7713b1edbc 64 #define REQ_STANDARD 0x00
AnnaBridge 171:3a7713b1edbc 65 #define REQ_CLASS 0x20
AnnaBridge 171:3a7713b1edbc 66 #define REQ_VENDOR 0x40
AnnaBridge 171:3a7713b1edbc 67
AnnaBridge 171:3a7713b1edbc 68 /*!<USB Standard Request */
AnnaBridge 171:3a7713b1edbc 69 #define USBD_GET_STATUS 0x00
AnnaBridge 171:3a7713b1edbc 70 #define USBD_CLEAR_FEATURE 0x01
AnnaBridge 171:3a7713b1edbc 71 #define USBD_SET_FEATURE 0x03
AnnaBridge 171:3a7713b1edbc 72 #define USBD_SET_ADDRESS 0x05
AnnaBridge 171:3a7713b1edbc 73 #define USBD_GET_DESCRIPTOR 0x06
AnnaBridge 171:3a7713b1edbc 74 #define USBD_SET_DESCRIPTOR 0x07
AnnaBridge 171:3a7713b1edbc 75 #define USBD_GET_CONFIGURATION 0x08
AnnaBridge 171:3a7713b1edbc 76 #define USBD_SET_CONFIGURATION 0x09
AnnaBridge 171:3a7713b1edbc 77 #define USBD_GET_INTERFACE 0x0A
AnnaBridge 171:3a7713b1edbc 78 #define USBD_SET_INTERFACE 0x0B
AnnaBridge 171:3a7713b1edbc 79 #define USBD_SYNC_FRAME 0x0C
AnnaBridge 171:3a7713b1edbc 80
AnnaBridge 171:3a7713b1edbc 81 /*!<USB Descriptor Type */
AnnaBridge 171:3a7713b1edbc 82 #define DESC_DEVICE 0x01
AnnaBridge 171:3a7713b1edbc 83 #define DESC_CONFIG 0x02
AnnaBridge 171:3a7713b1edbc 84 #define DESC_STRING 0x03
AnnaBridge 171:3a7713b1edbc 85 #define DESC_INTERFACE 0x04
AnnaBridge 171:3a7713b1edbc 86 #define DESC_ENDPOINT 0x05
AnnaBridge 171:3a7713b1edbc 87 #define DESC_QUALIFIER 0x06
AnnaBridge 171:3a7713b1edbc 88 #define DESC_OTHERSPEED 0x07
AnnaBridge 171:3a7713b1edbc 89
AnnaBridge 171:3a7713b1edbc 90 /*!<USB HID Descriptor Type */
AnnaBridge 171:3a7713b1edbc 91 #define DESC_HID 0x21
AnnaBridge 171:3a7713b1edbc 92 #define DESC_HID_RPT 0x22
AnnaBridge 171:3a7713b1edbc 93
AnnaBridge 171:3a7713b1edbc 94 /*!<USB Descriptor Length */
AnnaBridge 171:3a7713b1edbc 95 #define LEN_DEVICE 18
AnnaBridge 171:3a7713b1edbc 96 #define LEN_CONFIG 9
AnnaBridge 171:3a7713b1edbc 97 #define LEN_INTERFACE 9
AnnaBridge 171:3a7713b1edbc 98 #define LEN_ENDPOINT 7
AnnaBridge 171:3a7713b1edbc 99 #define LEN_HID 9
AnnaBridge 171:3a7713b1edbc 100 #define LEN_CCID 0x36
AnnaBridge 171:3a7713b1edbc 101
AnnaBridge 171:3a7713b1edbc 102 /*!<USB Endpoint Type */
AnnaBridge 171:3a7713b1edbc 103 #define EP_ISO 0x01
AnnaBridge 171:3a7713b1edbc 104 #define EP_BULK 0x02
AnnaBridge 171:3a7713b1edbc 105 #define EP_INT 0x03
AnnaBridge 171:3a7713b1edbc 106
AnnaBridge 171:3a7713b1edbc 107 #define EP_INPUT 0x80
AnnaBridge 171:3a7713b1edbc 108 #define EP_OUTPUT 0x00
AnnaBridge 171:3a7713b1edbc 109
AnnaBridge 171:3a7713b1edbc 110 /*!<USB Feature Selector */
AnnaBridge 171:3a7713b1edbc 111 #define FEATURE_DEVICE_REMOTE_WAKEUP 0x01
AnnaBridge 171:3a7713b1edbc 112 #define FEATURE_ENDPOINT_HALT 0x00
AnnaBridge 171:3a7713b1edbc 113
AnnaBridge 171:3a7713b1edbc 114 /******************************************************************************/
AnnaBridge 171:3a7713b1edbc 115 /* USB Specific Macros */
AnnaBridge 171:3a7713b1edbc 116 /******************************************************************************/
AnnaBridge 171:3a7713b1edbc 117
AnnaBridge 171:3a7713b1edbc 118 #define USBD_WAKEUP_EN USBD_INTEN_WKEN_Msk /*!< USB Wake-up Enable */
AnnaBridge 171:3a7713b1edbc 119 #define USBD_DRVSE0 USBD_SE0_SE0_Msk /*!< Drive SE0 */
AnnaBridge 171:3a7713b1edbc 120
AnnaBridge 171:3a7713b1edbc 121 #define USBD_DPPU_EN USBD_ATTR_DPPUEN_Msk /*!< USB D+ Pull-up Enable */
AnnaBridge 171:3a7713b1edbc 122 #define USBD_PWRDN USBD_ATTR_PWRDN_Msk /*!< PHY Turn-On */
AnnaBridge 171:3a7713b1edbc 123 #define USBD_PHY_EN USBD_ATTR_PHYEN_Msk /*!< PHY Enable */
AnnaBridge 171:3a7713b1edbc 124 #define USBD_USB_EN USBD_ATTR_USBEN_Msk /*!< USB Enable */
AnnaBridge 171:3a7713b1edbc 125
AnnaBridge 171:3a7713b1edbc 126 #define USBD_INT_BUS USBD_INTEN_BUSIEN_Msk /*!< USB Bus Event Interrupt */
AnnaBridge 171:3a7713b1edbc 127 #define USBD_INT_USB USBD_INTEN_USBIEN_Msk /*!< USB Event Interrupt */
AnnaBridge 171:3a7713b1edbc 128 #define USBD_INT_FLDET USBD_INTEN_VBDETIEN_Msk /*!< USB VBUS Detection Interrupt */
AnnaBridge 171:3a7713b1edbc 129 #define USBD_INT_WAKEUP (USBD_INTEN_NEVWKIEN_Msk | USBD_INTEN_WKEN_Msk) /*!< USB No-Event-Wake-Up Interrupt */
AnnaBridge 171:3a7713b1edbc 130
AnnaBridge 171:3a7713b1edbc 131 #define USBD_INTSTS_WAKEUP USBD_INTSTS_NEVWKIF_Msk /*!< USB No-Event-Wake-Up Interrupt Status */
AnnaBridge 171:3a7713b1edbc 132 #define USBD_INTSTS_FLDET USBD_INTSTS_VBDETIF_Msk /*!< USB Float Detect Interrupt Status */
AnnaBridge 171:3a7713b1edbc 133 #define USBD_INTSTS_BUS USBD_INTSTS_BUSIF_Msk /*!< USB Bus Event Interrupt Status */
AnnaBridge 171:3a7713b1edbc 134 #define USBD_INTSTS_USB USBD_INTSTS_USBIF_Msk /*!< USB Event Interrupt Status */
AnnaBridge 171:3a7713b1edbc 135 #define USBD_INTSTS_SETUP USBD_INTSTS_SETUP_Msk /*!< USB Setup Event */
AnnaBridge 171:3a7713b1edbc 136 #define USBD_INTSTS_EP0 USBD_INTSTS_EPEVT0_Msk /*!< USB Endpoint 0 Event */
AnnaBridge 171:3a7713b1edbc 137 #define USBD_INTSTS_EP1 USBD_INTSTS_EPEVT1_Msk /*!< USB Endpoint 1 Event */
AnnaBridge 171:3a7713b1edbc 138 #define USBD_INTSTS_EP2 USBD_INTSTS_EPEVT2_Msk /*!< USB Endpoint 2 Event */
AnnaBridge 171:3a7713b1edbc 139 #define USBD_INTSTS_EP3 USBD_INTSTS_EPEVT3_Msk /*!< USB Endpoint 3 Event */
AnnaBridge 171:3a7713b1edbc 140 #define USBD_INTSTS_EP4 USBD_INTSTS_EPEVT4_Msk /*!< USB Endpoint 4 Event */
AnnaBridge 171:3a7713b1edbc 141 #define USBD_INTSTS_EP5 USBD_INTSTS_EPEVT5_Msk /*!< USB Endpoint 5 Event */
AnnaBridge 171:3a7713b1edbc 142 #define USBD_INTSTS_EP6 USBD_INTSTS_EPEVT6_Msk /*!< USB Endpoint 6 Event */
AnnaBridge 171:3a7713b1edbc 143 #define USBD_INTSTS_EP7 USBD_INTSTS_EPEVT7_Msk /*!< USB Endpoint 7 Event */
AnnaBridge 171:3a7713b1edbc 144
AnnaBridge 171:3a7713b1edbc 145 #define USBD_STATE_USBRST USBD_ATTR_USBRST_Msk /*!< USB Bus Reset */
AnnaBridge 171:3a7713b1edbc 146 #define USBD_STATE_SUSPEND USBD_ATTR_SUSPEND_Msk /*!< USB Bus Suspend */
AnnaBridge 171:3a7713b1edbc 147 #define USBD_STATE_RESUME USBD_ATTR_RESUME_Msk /*!< USB Bus Resume */
AnnaBridge 171:3a7713b1edbc 148 #define USBD_STATE_TIMEOUT USBD_ATTR_TOUT_Msk /*!< USB Bus Timeout */
AnnaBridge 171:3a7713b1edbc 149
AnnaBridge 171:3a7713b1edbc 150 #define USBD_CFGP_SSTALL USBD_CFGP_SSTALL_Msk /*!< Set Stall */
AnnaBridge 171:3a7713b1edbc 151 #define USBD_CFG_CSTALL USBD_CFG_CSTALL_Msk /*!< Clear Stall */
AnnaBridge 171:3a7713b1edbc 152
AnnaBridge 171:3a7713b1edbc 153 #define USBD_CFG_EPMODE_DISABLE (0ul << USBD_CFG_STATE_Pos)/*!< Endpoint Disable */
AnnaBridge 171:3a7713b1edbc 154 #define USBD_CFG_EPMODE_OUT (1ul << USBD_CFG_STATE_Pos)/*!< Out Endpoint */
AnnaBridge 171:3a7713b1edbc 155 #define USBD_CFG_EPMODE_IN (2ul << USBD_CFG_STATE_Pos)/*!< In Endpoint */
AnnaBridge 171:3a7713b1edbc 156 #define USBD_CFG_TYPE_ISO (1ul << USBD_CFG_ISOCH_Pos) /*!< Isochronous */
AnnaBridge 171:3a7713b1edbc 157
AnnaBridge 171:3a7713b1edbc 158
AnnaBridge 171:3a7713b1edbc 159
AnnaBridge 171:3a7713b1edbc 160 /*@}*/ /* end of group USBD_EXPORTED_CONSTANTS */
AnnaBridge 171:3a7713b1edbc 161
AnnaBridge 171:3a7713b1edbc 162
AnnaBridge 171:3a7713b1edbc 163 /** @addtogroup USBD_EXPORTED_FUNCTIONS USBD Exported Functions
AnnaBridge 171:3a7713b1edbc 164 @{
AnnaBridge 171:3a7713b1edbc 165 */
AnnaBridge 171:3a7713b1edbc 166
AnnaBridge 171:3a7713b1edbc 167 /**
AnnaBridge 171:3a7713b1edbc 168 * @brief Compare two input numbers and return maximum one.
AnnaBridge 171:3a7713b1edbc 169 *
AnnaBridge 171:3a7713b1edbc 170 * @param[in] a First number to be compared.
AnnaBridge 171:3a7713b1edbc 171 * @param[in] b Second number to be compared.
AnnaBridge 171:3a7713b1edbc 172 *
AnnaBridge 171:3a7713b1edbc 173 * @return Maximum value between a and b.
AnnaBridge 171:3a7713b1edbc 174 *
AnnaBridge 171:3a7713b1edbc 175 * @details If a > b, then return a. Otherwise, return b.
AnnaBridge 171:3a7713b1edbc 176 */
AnnaBridge 171:3a7713b1edbc 177 #define Maximum(a,b) ((a)>(b) ? (a) : (b))
AnnaBridge 171:3a7713b1edbc 178
AnnaBridge 171:3a7713b1edbc 179
AnnaBridge 171:3a7713b1edbc 180 /**
AnnaBridge 171:3a7713b1edbc 181 * @brief Compare two input numbers and return minimum one
AnnaBridge 171:3a7713b1edbc 182 *
AnnaBridge 171:3a7713b1edbc 183 * @param[in] a First number to be compared
AnnaBridge 171:3a7713b1edbc 184 * @param[in] b Second number to be compared
AnnaBridge 171:3a7713b1edbc 185 *
AnnaBridge 171:3a7713b1edbc 186 * @return Minimum value between a and b
AnnaBridge 171:3a7713b1edbc 187 *
AnnaBridge 171:3a7713b1edbc 188 * @details If a < b, then return a. Otherwise, return b.
AnnaBridge 171:3a7713b1edbc 189 */
AnnaBridge 171:3a7713b1edbc 190 #define Minimum(a,b) ((a)<(b) ? (a) : (b))
AnnaBridge 171:3a7713b1edbc 191
AnnaBridge 171:3a7713b1edbc 192
AnnaBridge 171:3a7713b1edbc 193 /**
AnnaBridge 171:3a7713b1edbc 194 * @brief Enable USB
AnnaBridge 171:3a7713b1edbc 195 *
AnnaBridge 171:3a7713b1edbc 196 * @param None
AnnaBridge 171:3a7713b1edbc 197 *
AnnaBridge 171:3a7713b1edbc 198 * @return None
AnnaBridge 171:3a7713b1edbc 199 *
AnnaBridge 171:3a7713b1edbc 200 * @details To set USB ATTR control register to enable USB and PHY.
AnnaBridge 171:3a7713b1edbc 201 *
AnnaBridge 171:3a7713b1edbc 202 */
AnnaBridge 171:3a7713b1edbc 203 #define USBD_ENABLE_USB() ((uint32_t)(USBD->ATTR |= (USBD_USB_EN|USBD_PHY_EN)))
AnnaBridge 171:3a7713b1edbc 204
AnnaBridge 171:3a7713b1edbc 205 /**
AnnaBridge 171:3a7713b1edbc 206 * @brief Disable USB
AnnaBridge 171:3a7713b1edbc 207 *
AnnaBridge 171:3a7713b1edbc 208 * @param None
AnnaBridge 171:3a7713b1edbc 209 *
AnnaBridge 171:3a7713b1edbc 210 * @return None
AnnaBridge 171:3a7713b1edbc 211 *
AnnaBridge 171:3a7713b1edbc 212 * @details To set USB ATTR control register to disable USB.
AnnaBridge 171:3a7713b1edbc 213 *
AnnaBridge 171:3a7713b1edbc 214 */
AnnaBridge 171:3a7713b1edbc 215 #define USBD_DISABLE_USB() ((uint32_t)(USBD->ATTR &= ~USBD_USB_EN))
AnnaBridge 171:3a7713b1edbc 216
AnnaBridge 171:3a7713b1edbc 217 /**
AnnaBridge 171:3a7713b1edbc 218 * @brief Enable USB PHY
AnnaBridge 171:3a7713b1edbc 219 *
AnnaBridge 171:3a7713b1edbc 220 * @param None
AnnaBridge 171:3a7713b1edbc 221 *
AnnaBridge 171:3a7713b1edbc 222 * @return None
AnnaBridge 171:3a7713b1edbc 223 *
AnnaBridge 171:3a7713b1edbc 224 * @details To set USB ATTR control register to enable USB PHY.
AnnaBridge 171:3a7713b1edbc 225 *
AnnaBridge 171:3a7713b1edbc 226 */
AnnaBridge 171:3a7713b1edbc 227 #define USBD_ENABLE_PHY() ((uint32_t)(USBD->ATTR |= USBD_PHY_EN))
AnnaBridge 171:3a7713b1edbc 228
AnnaBridge 171:3a7713b1edbc 229 /**
AnnaBridge 171:3a7713b1edbc 230 * @brief Disable USB PHY
AnnaBridge 171:3a7713b1edbc 231 *
AnnaBridge 171:3a7713b1edbc 232 * @param None
AnnaBridge 171:3a7713b1edbc 233 *
AnnaBridge 171:3a7713b1edbc 234 * @return None
AnnaBridge 171:3a7713b1edbc 235 *
AnnaBridge 171:3a7713b1edbc 236 * @details To set USB ATTR control register to disable USB PHY.
AnnaBridge 171:3a7713b1edbc 237 *
AnnaBridge 171:3a7713b1edbc 238 */
AnnaBridge 171:3a7713b1edbc 239 #define USBD_DISABLE_PHY() ((uint32_t)(USBD->ATTR &= ~USBD_PHY_EN))
AnnaBridge 171:3a7713b1edbc 240
AnnaBridge 171:3a7713b1edbc 241 /**
AnnaBridge 171:3a7713b1edbc 242 * @brief Enable SE0. Force USB PHY transceiver to drive SE0.
AnnaBridge 171:3a7713b1edbc 243 *
AnnaBridge 171:3a7713b1edbc 244 * @param None
AnnaBridge 171:3a7713b1edbc 245 *
AnnaBridge 171:3a7713b1edbc 246 * @return None
AnnaBridge 171:3a7713b1edbc 247 *
AnnaBridge 171:3a7713b1edbc 248 * @details Set DRVSE0 bit of USB_DRVSE0 register to enable software-disconnect function. Force USB PHY transceiver to drive SE0 to bus.
AnnaBridge 171:3a7713b1edbc 249 *
AnnaBridge 171:3a7713b1edbc 250 */
AnnaBridge 171:3a7713b1edbc 251 #define USBD_SET_SE0() ((uint32_t)(USBD->SE0 |= USBD_DRVSE0))
AnnaBridge 171:3a7713b1edbc 252
AnnaBridge 171:3a7713b1edbc 253 /**
AnnaBridge 171:3a7713b1edbc 254 * @brief Disable SE0
AnnaBridge 171:3a7713b1edbc 255 *
AnnaBridge 171:3a7713b1edbc 256 * @param None
AnnaBridge 171:3a7713b1edbc 257 *
AnnaBridge 171:3a7713b1edbc 258 * @return None
AnnaBridge 171:3a7713b1edbc 259 *
AnnaBridge 171:3a7713b1edbc 260 * @details Clear DRVSE0 bit of USB_DRVSE0 register to disable software-disconnect function.
AnnaBridge 171:3a7713b1edbc 261 *
AnnaBridge 171:3a7713b1edbc 262 */
AnnaBridge 171:3a7713b1edbc 263 #define USBD_CLR_SE0() ((uint32_t)(USBD->SE0 &= ~USBD_DRVSE0))
AnnaBridge 171:3a7713b1edbc 264
AnnaBridge 171:3a7713b1edbc 265 /**
AnnaBridge 171:3a7713b1edbc 266 * @brief Set USB device address
AnnaBridge 171:3a7713b1edbc 267 *
AnnaBridge 171:3a7713b1edbc 268 * @param[in] addr The USB device address.
AnnaBridge 171:3a7713b1edbc 269 *
AnnaBridge 171:3a7713b1edbc 270 * @return None
AnnaBridge 171:3a7713b1edbc 271 *
AnnaBridge 171:3a7713b1edbc 272 * @details Write USB device address to USB_FADDR register.
AnnaBridge 171:3a7713b1edbc 273 *
AnnaBridge 171:3a7713b1edbc 274 */
AnnaBridge 171:3a7713b1edbc 275 #define USBD_SET_ADDR(addr) (USBD->FADDR = (addr))
AnnaBridge 171:3a7713b1edbc 276
AnnaBridge 171:3a7713b1edbc 277 /**
AnnaBridge 171:3a7713b1edbc 278 * @brief Get USB device address
AnnaBridge 171:3a7713b1edbc 279 *
AnnaBridge 171:3a7713b1edbc 280 * @param None
AnnaBridge 171:3a7713b1edbc 281 *
AnnaBridge 171:3a7713b1edbc 282 * @return USB device address
AnnaBridge 171:3a7713b1edbc 283 *
AnnaBridge 171:3a7713b1edbc 284 * @details Read USB_FADDR register to get USB device address.
AnnaBridge 171:3a7713b1edbc 285 *
AnnaBridge 171:3a7713b1edbc 286 */
AnnaBridge 171:3a7713b1edbc 287 #define USBD_GET_ADDR() ((uint32_t)(USBD->FADDR))
AnnaBridge 171:3a7713b1edbc 288
AnnaBridge 171:3a7713b1edbc 289 /**
AnnaBridge 171:3a7713b1edbc 290 * @brief Enable USB interrupt function
AnnaBridge 171:3a7713b1edbc 291 *
AnnaBridge 171:3a7713b1edbc 292 * @param[in] intr The combination of the specified interrupt enable bits.
AnnaBridge 171:3a7713b1edbc 293 * Each bit corresponds to a interrupt enable bit.
AnnaBridge 171:3a7713b1edbc 294 * This parameter decides which interrupts will be enabled.
AnnaBridge 171:3a7713b1edbc 295 * (USBD_INT_WAKEUP, USBD_INT_FLDET, USBD_INT_USB, USBD_INT_BUS)
AnnaBridge 171:3a7713b1edbc 296 *
AnnaBridge 171:3a7713b1edbc 297 * @return None
AnnaBridge 171:3a7713b1edbc 298 *
AnnaBridge 171:3a7713b1edbc 299 * @details Enable USB related interrupt functions specified by intr parameter.
AnnaBridge 171:3a7713b1edbc 300 *
AnnaBridge 171:3a7713b1edbc 301 */
AnnaBridge 171:3a7713b1edbc 302 #define USBD_ENABLE_INT(intr) (USBD->INTEN |= (intr))
AnnaBridge 171:3a7713b1edbc 303
AnnaBridge 171:3a7713b1edbc 304 /**
AnnaBridge 171:3a7713b1edbc 305 * @brief Get interrupt status
AnnaBridge 171:3a7713b1edbc 306 *
AnnaBridge 171:3a7713b1edbc 307 * @param None
AnnaBridge 171:3a7713b1edbc 308 *
AnnaBridge 171:3a7713b1edbc 309 * @return The value of USB_INTSTS register
AnnaBridge 171:3a7713b1edbc 310 *
AnnaBridge 171:3a7713b1edbc 311 * @details Return all interrupt flags of USB_INTSTS register.
AnnaBridge 171:3a7713b1edbc 312 *
AnnaBridge 171:3a7713b1edbc 313 */
AnnaBridge 171:3a7713b1edbc 314 #define USBD_GET_INT_FLAG() ((uint32_t)(USBD->INTSTS))
AnnaBridge 171:3a7713b1edbc 315
AnnaBridge 171:3a7713b1edbc 316 /**
AnnaBridge 171:3a7713b1edbc 317 * @brief Clear USB interrupt flag
AnnaBridge 171:3a7713b1edbc 318 *
AnnaBridge 171:3a7713b1edbc 319 * @param[in] flag The combination of the specified interrupt flags.
AnnaBridge 171:3a7713b1edbc 320 * Each bit corresponds to a interrupt source.
AnnaBridge 171:3a7713b1edbc 321 * This parameter decides which interrupt flags will be cleared.
AnnaBridge 171:3a7713b1edbc 322 * (USBD_INTSTS_WAKEUP, USBD_INTSTS_FLDET, USBD_INTSTS_BUS, USBD_INTSTS_USB)
AnnaBridge 171:3a7713b1edbc 323 *
AnnaBridge 171:3a7713b1edbc 324 * @return None
AnnaBridge 171:3a7713b1edbc 325 *
AnnaBridge 171:3a7713b1edbc 326 * @details Clear USB related interrupt flags specified by flag parameter.
AnnaBridge 171:3a7713b1edbc 327 *
AnnaBridge 171:3a7713b1edbc 328 */
AnnaBridge 171:3a7713b1edbc 329 #define USBD_CLR_INT_FLAG(flag) (USBD->INTSTS = (flag))
AnnaBridge 171:3a7713b1edbc 330
AnnaBridge 171:3a7713b1edbc 331 /**
AnnaBridge 171:3a7713b1edbc 332 * @brief Get endpoint status
AnnaBridge 171:3a7713b1edbc 333 *
AnnaBridge 171:3a7713b1edbc 334 * @param None
AnnaBridge 171:3a7713b1edbc 335 *
AnnaBridge 171:3a7713b1edbc 336 * @return The value of USB_EPSTS register.
AnnaBridge 171:3a7713b1edbc 337 *
AnnaBridge 171:3a7713b1edbc 338 * @details Return all endpoint status.
AnnaBridge 171:3a7713b1edbc 339 *
AnnaBridge 171:3a7713b1edbc 340 */
AnnaBridge 171:3a7713b1edbc 341 #define USBD_GET_EP_FLAG() ((uint32_t)(USBD->EPSTS))
AnnaBridge 171:3a7713b1edbc 342
AnnaBridge 171:3a7713b1edbc 343 /**
AnnaBridge 171:3a7713b1edbc 344 * @brief Get USB bus state
AnnaBridge 171:3a7713b1edbc 345 *
AnnaBridge 171:3a7713b1edbc 346 * @param None
AnnaBridge 171:3a7713b1edbc 347 *
AnnaBridge 171:3a7713b1edbc 348 * @return The value of USB_ATTR[3:0].
AnnaBridge 171:3a7713b1edbc 349 * Bit 0 indicates USB bus reset status.
AnnaBridge 171:3a7713b1edbc 350 * Bit 1 indicates USB bus suspend status.
AnnaBridge 171:3a7713b1edbc 351 * Bit 2 indicates USB bus resume status.
AnnaBridge 171:3a7713b1edbc 352 * Bit 3 indicates USB bus time-out status.
AnnaBridge 171:3a7713b1edbc 353 *
AnnaBridge 171:3a7713b1edbc 354 * @details Return USB_ATTR[3:0] for USB bus events.
AnnaBridge 171:3a7713b1edbc 355 *
AnnaBridge 171:3a7713b1edbc 356 */
AnnaBridge 171:3a7713b1edbc 357 #define USBD_GET_BUS_STATE() ((uint32_t)(USBD->ATTR & 0xf))
AnnaBridge 171:3a7713b1edbc 358
AnnaBridge 171:3a7713b1edbc 359 /**
AnnaBridge 171:3a7713b1edbc 360 * @brief Check cable connection state
AnnaBridge 171:3a7713b1edbc 361 *
AnnaBridge 171:3a7713b1edbc 362 * @param None
AnnaBridge 171:3a7713b1edbc 363 *
AnnaBridge 171:3a7713b1edbc 364 * @retval 0 USB cable is not attached.
AnnaBridge 171:3a7713b1edbc 365 * @retval 1 USB cable is attached.
AnnaBridge 171:3a7713b1edbc 366 *
AnnaBridge 171:3a7713b1edbc 367 * @details Check the connection state by FLDET bit of USB_FLDET register.
AnnaBridge 171:3a7713b1edbc 368 *
AnnaBridge 171:3a7713b1edbc 369 */
AnnaBridge 171:3a7713b1edbc 370 #define USBD_IS_ATTACHED() ((uint32_t)(USBD->VBUSDET & USBD_VBUSDET_VBUSDET_Msk))
AnnaBridge 171:3a7713b1edbc 371
AnnaBridge 171:3a7713b1edbc 372 /**
AnnaBridge 171:3a7713b1edbc 373 * @brief Stop USB transaction of the specified endpoint ID
AnnaBridge 171:3a7713b1edbc 374 *
AnnaBridge 171:3a7713b1edbc 375 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 376 *
AnnaBridge 171:3a7713b1edbc 377 * @return None
AnnaBridge 171:3a7713b1edbc 378 *
AnnaBridge 171:3a7713b1edbc 379 * @details Write 1 to CLRRDY bit of USB_CFGPx register to stop USB transaction of the specified endpoint ID.
AnnaBridge 171:3a7713b1edbc 380 *
AnnaBridge 171:3a7713b1edbc 381 */
AnnaBridge 171:3a7713b1edbc 382 #define USBD_STOP_TRANSACTION(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) |= USBD_CFGP_CLRRDY_Msk)
AnnaBridge 171:3a7713b1edbc 383
AnnaBridge 171:3a7713b1edbc 384 /**
AnnaBridge 171:3a7713b1edbc 385 * @brief Set USB DATA1 PID for the specified endpoint ID
AnnaBridge 171:3a7713b1edbc 386 *
AnnaBridge 171:3a7713b1edbc 387 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 388 *
AnnaBridge 171:3a7713b1edbc 389 * @return None
AnnaBridge 171:3a7713b1edbc 390 *
AnnaBridge 171:3a7713b1edbc 391 * @details Set DSQ_SYNC bit of USB_CFGx register to specify the DATA1 PID for the following IN token transaction.
AnnaBridge 171:3a7713b1edbc 392 * Base on this setting, hardware will toggle PID between DATA0 and DATA1 automatically for IN token transactions.
AnnaBridge 171:3a7713b1edbc 393 *
AnnaBridge 171:3a7713b1edbc 394 */
AnnaBridge 171:3a7713b1edbc 395 #define USBD_SET_DATA1(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) |= USBD_CFG_DSQSYNC_Msk)
AnnaBridge 171:3a7713b1edbc 396
AnnaBridge 171:3a7713b1edbc 397 /**
AnnaBridge 171:3a7713b1edbc 398 * @brief Set USB DATA0 PID for the specified endpoint ID
AnnaBridge 171:3a7713b1edbc 399 *
AnnaBridge 171:3a7713b1edbc 400 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 401 *
AnnaBridge 171:3a7713b1edbc 402 * @return None
AnnaBridge 171:3a7713b1edbc 403 *
AnnaBridge 171:3a7713b1edbc 404 * @details Clear DSQ_SYNC bit of USB_CFGx register to specify the DATA0 PID for the following IN token transaction.
AnnaBridge 171:3a7713b1edbc 405 * Base on this setting, hardware will toggle PID between DATA0 and DATA1 automatically for IN token transactions.
AnnaBridge 171:3a7713b1edbc 406 *
AnnaBridge 171:3a7713b1edbc 407 */
AnnaBridge 171:3a7713b1edbc 408 #define USBD_SET_DATA0(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) &= (~USBD_CFG_DSQSYNC_Msk))
AnnaBridge 171:3a7713b1edbc 409
AnnaBridge 171:3a7713b1edbc 410 /**
AnnaBridge 171:3a7713b1edbc 411 * @brief Set USB payload size (IN data)
AnnaBridge 171:3a7713b1edbc 412 *
AnnaBridge 171:3a7713b1edbc 413 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 414 *
AnnaBridge 171:3a7713b1edbc 415 * @param[in] size The transfer length.
AnnaBridge 171:3a7713b1edbc 416 *
AnnaBridge 171:3a7713b1edbc 417 * @return None
AnnaBridge 171:3a7713b1edbc 418 *
AnnaBridge 171:3a7713b1edbc 419 * @details This macro will write the transfer length to USB_MXPLDx register for IN data transaction.
AnnaBridge 171:3a7713b1edbc 420 *
AnnaBridge 171:3a7713b1edbc 421 */
AnnaBridge 171:3a7713b1edbc 422 #define USBD_SET_PAYLOAD_LEN(ep, size) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))) = (size))
AnnaBridge 171:3a7713b1edbc 423
AnnaBridge 171:3a7713b1edbc 424 /**
AnnaBridge 171:3a7713b1edbc 425 * @brief Get USB payload size (OUT data)
AnnaBridge 171:3a7713b1edbc 426 *
AnnaBridge 171:3a7713b1edbc 427 * @param[in] ep The USB endpoint ID. M451 Series supports 8 endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 428 *
AnnaBridge 171:3a7713b1edbc 429 * @return The value of USB_MXPLDx register.
AnnaBridge 171:3a7713b1edbc 430 *
AnnaBridge 171:3a7713b1edbc 431 * @details Get the data length of OUT data transaction by reading USB_MXPLDx register.
AnnaBridge 171:3a7713b1edbc 432 *
AnnaBridge 171:3a7713b1edbc 433 */
AnnaBridge 171:3a7713b1edbc 434 #define USBD_GET_PAYLOAD_LEN(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))))
AnnaBridge 171:3a7713b1edbc 435
AnnaBridge 171:3a7713b1edbc 436 /**
AnnaBridge 171:3a7713b1edbc 437 * @brief Configure endpoint
AnnaBridge 171:3a7713b1edbc 438 *
AnnaBridge 171:3a7713b1edbc 439 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 440 *
AnnaBridge 171:3a7713b1edbc 441 * @param[in] config The USB configuration.
AnnaBridge 171:3a7713b1edbc 442 *
AnnaBridge 171:3a7713b1edbc 443 * @return None
AnnaBridge 171:3a7713b1edbc 444 *
AnnaBridge 171:3a7713b1edbc 445 * @details This macro will write config parameter to USB_CFGx register of specified endpoint ID.
AnnaBridge 171:3a7713b1edbc 446 *
AnnaBridge 171:3a7713b1edbc 447 */
AnnaBridge 171:3a7713b1edbc 448 #define USBD_CONFIG_EP(ep, config) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) = (config))
AnnaBridge 171:3a7713b1edbc 449
AnnaBridge 171:3a7713b1edbc 450 /**
AnnaBridge 171:3a7713b1edbc 451 * @brief Set USB endpoint buffer
AnnaBridge 171:3a7713b1edbc 452 *
AnnaBridge 171:3a7713b1edbc 453 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 454 *
AnnaBridge 171:3a7713b1edbc 455 * @param[in] offset The SRAM offset.
AnnaBridge 171:3a7713b1edbc 456 *
AnnaBridge 171:3a7713b1edbc 457 * @return None
AnnaBridge 171:3a7713b1edbc 458 *
AnnaBridge 171:3a7713b1edbc 459 * @details This macro will set the SRAM offset for the specified endpoint ID.
AnnaBridge 171:3a7713b1edbc 460 *
AnnaBridge 171:3a7713b1edbc 461 */
AnnaBridge 171:3a7713b1edbc 462 #define USBD_SET_EP_BUF_ADDR(ep, offset) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4))) = (offset))
AnnaBridge 171:3a7713b1edbc 463
AnnaBridge 171:3a7713b1edbc 464 /**
AnnaBridge 171:3a7713b1edbc 465 * @brief Get the offset of the specified USB endpoint buffer
AnnaBridge 171:3a7713b1edbc 466 *
AnnaBridge 171:3a7713b1edbc 467 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 468 *
AnnaBridge 171:3a7713b1edbc 469 * @return The offset of the specified endpoint buffer.
AnnaBridge 171:3a7713b1edbc 470 *
AnnaBridge 171:3a7713b1edbc 471 * @details This macro will return the SRAM offset of the specified endpoint ID.
AnnaBridge 171:3a7713b1edbc 472 *
AnnaBridge 171:3a7713b1edbc 473 */
AnnaBridge 171:3a7713b1edbc 474 #define USBD_GET_EP_BUF_ADDR(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4))))
AnnaBridge 171:3a7713b1edbc 475
AnnaBridge 171:3a7713b1edbc 476 /**
AnnaBridge 171:3a7713b1edbc 477 * @brief Set USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 478 *
AnnaBridge 171:3a7713b1edbc 479 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 480 *
AnnaBridge 171:3a7713b1edbc 481 * @return None
AnnaBridge 171:3a7713b1edbc 482 *
AnnaBridge 171:3a7713b1edbc 483 * @details Set USB endpoint stall state for the specified endpoint ID. Endpoint will respond STALL token automatically.
AnnaBridge 171:3a7713b1edbc 484 *
AnnaBridge 171:3a7713b1edbc 485 */
AnnaBridge 171:3a7713b1edbc 486 #define USBD_SET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) |= USBD_CFGP_SSTALL_Msk)
AnnaBridge 171:3a7713b1edbc 487
AnnaBridge 171:3a7713b1edbc 488 /**
AnnaBridge 171:3a7713b1edbc 489 * @brief Clear USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 490 *
AnnaBridge 171:3a7713b1edbc 491 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 492 *
AnnaBridge 171:3a7713b1edbc 493 * @return None
AnnaBridge 171:3a7713b1edbc 494 *
AnnaBridge 171:3a7713b1edbc 495 * @details Clear USB endpoint stall state for the specified endpoint ID. Endpoint will respond ACK/NAK token.
AnnaBridge 171:3a7713b1edbc 496 */
AnnaBridge 171:3a7713b1edbc 497 #define USBD_CLR_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) &= ~USBD_CFGP_SSTALL_Msk)
AnnaBridge 171:3a7713b1edbc 498
AnnaBridge 171:3a7713b1edbc 499 /**
AnnaBridge 171:3a7713b1edbc 500 * @brief Get USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 501 *
AnnaBridge 171:3a7713b1edbc 502 * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7.
AnnaBridge 171:3a7713b1edbc 503 *
AnnaBridge 171:3a7713b1edbc 504 * @retval 0 USB endpoint is not stalled.
AnnaBridge 171:3a7713b1edbc 505 * @retval Others USB endpoint is stalled.
AnnaBridge 171:3a7713b1edbc 506 *
AnnaBridge 171:3a7713b1edbc 507 * @details Get USB endpoint stall state of the specified endpoint ID.
AnnaBridge 171:3a7713b1edbc 508 *
AnnaBridge 171:3a7713b1edbc 509 */
AnnaBridge 171:3a7713b1edbc 510 #define USBD_GET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) & USBD_CFGP_SSTALL_Msk)
AnnaBridge 171:3a7713b1edbc 511
AnnaBridge 171:3a7713b1edbc 512 /**
AnnaBridge 171:3a7713b1edbc 513 * @brief To support byte access between USB SRAM and system SRAM
AnnaBridge 171:3a7713b1edbc 514 *
AnnaBridge 171:3a7713b1edbc 515 * @param[in] dest Destination pointer.
AnnaBridge 171:3a7713b1edbc 516 *
AnnaBridge 171:3a7713b1edbc 517 * @param[in] src Source pointer.
AnnaBridge 171:3a7713b1edbc 518 *
AnnaBridge 171:3a7713b1edbc 519 * @param[in] size Byte count.
AnnaBridge 171:3a7713b1edbc 520 *
AnnaBridge 171:3a7713b1edbc 521 * @return None
AnnaBridge 171:3a7713b1edbc 522 *
AnnaBridge 171:3a7713b1edbc 523 * @details This function will copy the number of data specified by size and src parameters to the address specified by dest parameter.
AnnaBridge 171:3a7713b1edbc 524 *
AnnaBridge 171:3a7713b1edbc 525 */
AnnaBridge 171:3a7713b1edbc 526 static __INLINE void USBD_MemCopy(uint8_t *dest, uint8_t *src, int32_t size)
AnnaBridge 171:3a7713b1edbc 527 {
AnnaBridge 171:3a7713b1edbc 528 while(size--) *dest++ = *src++;
AnnaBridge 171:3a7713b1edbc 529 }
AnnaBridge 171:3a7713b1edbc 530
AnnaBridge 171:3a7713b1edbc 531
AnnaBridge 171:3a7713b1edbc 532 /**
AnnaBridge 171:3a7713b1edbc 533 * @brief Set USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 534 *
AnnaBridge 171:3a7713b1edbc 535 * @param[in] epnum USB endpoint number
AnnaBridge 171:3a7713b1edbc 536 *
AnnaBridge 171:3a7713b1edbc 537 * @return None
AnnaBridge 171:3a7713b1edbc 538 *
AnnaBridge 171:3a7713b1edbc 539 * @details Set USB endpoint stall state. Endpoint will respond STALL token automatically.
AnnaBridge 171:3a7713b1edbc 540 *
AnnaBridge 171:3a7713b1edbc 541 */
AnnaBridge 171:3a7713b1edbc 542 static __INLINE void USBD_SetStall(uint8_t epnum)
AnnaBridge 171:3a7713b1edbc 543 {
AnnaBridge 171:3a7713b1edbc 544 uint32_t u32CfgAddr;
AnnaBridge 171:3a7713b1edbc 545 uint32_t u32Cfg;
AnnaBridge 171:3a7713b1edbc 546 int i;
AnnaBridge 171:3a7713b1edbc 547
AnnaBridge 171:3a7713b1edbc 548 for(i = 0; i < USBD_MAX_EP; i++)
AnnaBridge 171:3a7713b1edbc 549 {
AnnaBridge 171:3a7713b1edbc 550 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 171:3a7713b1edbc 551 u32Cfg = *((__IO uint32_t *)(u32CfgAddr));
AnnaBridge 171:3a7713b1edbc 552
AnnaBridge 171:3a7713b1edbc 553 if((u32Cfg & 0xf) == epnum)
AnnaBridge 171:3a7713b1edbc 554 {
AnnaBridge 171:3a7713b1edbc 555 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */
AnnaBridge 171:3a7713b1edbc 556 u32Cfg = *((__IO uint32_t *)(u32CfgAddr));
AnnaBridge 171:3a7713b1edbc 557
AnnaBridge 171:3a7713b1edbc 558 *((__IO uint32_t *)(u32CfgAddr)) = (u32Cfg | USBD_CFGP_SSTALL);
AnnaBridge 171:3a7713b1edbc 559 break;
AnnaBridge 171:3a7713b1edbc 560 }
AnnaBridge 171:3a7713b1edbc 561 }
AnnaBridge 171:3a7713b1edbc 562 }
AnnaBridge 171:3a7713b1edbc 563
AnnaBridge 171:3a7713b1edbc 564 /**
AnnaBridge 171:3a7713b1edbc 565 * @brief Clear USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 566 *
AnnaBridge 171:3a7713b1edbc 567 * @param[in] epnum USB endpoint number
AnnaBridge 171:3a7713b1edbc 568 *
AnnaBridge 171:3a7713b1edbc 569 * @return None
AnnaBridge 171:3a7713b1edbc 570 *
AnnaBridge 171:3a7713b1edbc 571 * @details Clear USB endpoint stall state. Endpoint will respond ACK/NAK token.
AnnaBridge 171:3a7713b1edbc 572 */
AnnaBridge 171:3a7713b1edbc 573 static __INLINE void USBD_ClearStall(uint8_t epnum)
AnnaBridge 171:3a7713b1edbc 574 {
AnnaBridge 171:3a7713b1edbc 575 uint32_t u32CfgAddr;
AnnaBridge 171:3a7713b1edbc 576 uint32_t u32Cfg;
AnnaBridge 171:3a7713b1edbc 577 int i;
AnnaBridge 171:3a7713b1edbc 578
AnnaBridge 171:3a7713b1edbc 579 for(i = 0; i < USBD_MAX_EP; i++)
AnnaBridge 171:3a7713b1edbc 580 {
AnnaBridge 171:3a7713b1edbc 581 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 171:3a7713b1edbc 582 u32Cfg = *((__IO uint32_t *)(u32CfgAddr));
AnnaBridge 171:3a7713b1edbc 583
AnnaBridge 171:3a7713b1edbc 584 if((u32Cfg & 0xf) == epnum)
AnnaBridge 171:3a7713b1edbc 585 {
AnnaBridge 171:3a7713b1edbc 586 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */
AnnaBridge 171:3a7713b1edbc 587 u32Cfg = *((__IO uint32_t *)(u32CfgAddr));
AnnaBridge 171:3a7713b1edbc 588
AnnaBridge 171:3a7713b1edbc 589 *((__IO uint32_t *)(u32CfgAddr)) = (u32Cfg & ~USBD_CFGP_SSTALL);
AnnaBridge 171:3a7713b1edbc 590 break;
AnnaBridge 171:3a7713b1edbc 591 }
AnnaBridge 171:3a7713b1edbc 592 }
AnnaBridge 171:3a7713b1edbc 593 }
AnnaBridge 171:3a7713b1edbc 594
AnnaBridge 171:3a7713b1edbc 595 /**
AnnaBridge 171:3a7713b1edbc 596 * @brief Get USB endpoint stall state
AnnaBridge 171:3a7713b1edbc 597 *
AnnaBridge 171:3a7713b1edbc 598 * @param[in] epnum USB endpoint number
AnnaBridge 171:3a7713b1edbc 599 *
AnnaBridge 171:3a7713b1edbc 600 * @retval 0 USB endpoint is not stalled.
AnnaBridge 171:3a7713b1edbc 601 * @retval Others USB endpoint is stalled.
AnnaBridge 171:3a7713b1edbc 602 *
AnnaBridge 171:3a7713b1edbc 603 * @details Get USB endpoint stall state.
AnnaBridge 171:3a7713b1edbc 604 *
AnnaBridge 171:3a7713b1edbc 605 */
AnnaBridge 171:3a7713b1edbc 606 static __INLINE uint32_t USBD_GetStall(uint8_t epnum)
AnnaBridge 171:3a7713b1edbc 607 {
AnnaBridge 171:3a7713b1edbc 608 uint32_t u32CfgAddr;
AnnaBridge 171:3a7713b1edbc 609 uint32_t u32Cfg;
AnnaBridge 171:3a7713b1edbc 610 int i;
AnnaBridge 171:3a7713b1edbc 611
AnnaBridge 171:3a7713b1edbc 612 for(i = 0; i < USBD_MAX_EP; i++)
AnnaBridge 171:3a7713b1edbc 613 {
AnnaBridge 171:3a7713b1edbc 614 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */
AnnaBridge 171:3a7713b1edbc 615 u32Cfg = *((__IO uint32_t *)(u32CfgAddr));
AnnaBridge 171:3a7713b1edbc 616
AnnaBridge 171:3a7713b1edbc 617 if((u32Cfg & 0xf) == epnum)
AnnaBridge 171:3a7713b1edbc 618 {
AnnaBridge 171:3a7713b1edbc 619 u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */
AnnaBridge 171:3a7713b1edbc 620 break;
AnnaBridge 171:3a7713b1edbc 621 }
AnnaBridge 171:3a7713b1edbc 622 }
AnnaBridge 171:3a7713b1edbc 623
AnnaBridge 171:3a7713b1edbc 624 return ((*((__IO uint32_t *)(u32CfgAddr))) & USBD_CFGP_SSTALL);
AnnaBridge 171:3a7713b1edbc 625 }
AnnaBridge 171:3a7713b1edbc 626
AnnaBridge 171:3a7713b1edbc 627
AnnaBridge 171:3a7713b1edbc 628 extern volatile uint8_t g_usbd_RemoteWakeupEn;
AnnaBridge 171:3a7713b1edbc 629
AnnaBridge 171:3a7713b1edbc 630
AnnaBridge 171:3a7713b1edbc 631 typedef void (*VENDOR_REQ)(void); /*!< Functional pointer type definition for Vendor class */
AnnaBridge 171:3a7713b1edbc 632 typedef void (*CLASS_REQ)(void); /*!< Functional pointer type declaration for USB class request callback handler */
AnnaBridge 171:3a7713b1edbc 633 typedef void (*SET_INTERFACE_REQ)(void); /*!< Functional pointer type declaration for USB set interface request callback handler */
AnnaBridge 171:3a7713b1edbc 634 typedef void (*SET_CONFIG_CB)(void); /*!< Functional pointer type declaration for USB set configuration request callback handler */
AnnaBridge 171:3a7713b1edbc 635
AnnaBridge 171:3a7713b1edbc 636
AnnaBridge 171:3a7713b1edbc 637 /*--------------------------------------------------------------------*/
AnnaBridge 171:3a7713b1edbc 638 void USBD_Open(const S_USBD_INFO_T *param, CLASS_REQ pfnClassReq, SET_INTERFACE_REQ pfnSetInterface);
AnnaBridge 171:3a7713b1edbc 639 void USBD_Start(void);
AnnaBridge 171:3a7713b1edbc 640 void USBD_GetSetupPacket(uint8_t *buf);
AnnaBridge 171:3a7713b1edbc 641 void USBD_ProcessSetupPacket(void);
AnnaBridge 171:3a7713b1edbc 642 void USBD_StandardRequest(void);
AnnaBridge 171:3a7713b1edbc 643 void USBD_PrepareCtrlIn(uint8_t *pu8Buf, uint32_t u32Size);
AnnaBridge 171:3a7713b1edbc 644 void USBD_CtrlIn(void);
AnnaBridge 171:3a7713b1edbc 645 void USBD_PrepareCtrlOut(uint8_t *pu8Buf, uint32_t u32Size);
AnnaBridge 171:3a7713b1edbc 646 void USBD_CtrlOut(void);
AnnaBridge 171:3a7713b1edbc 647 void USBD_SwReset(void);
AnnaBridge 171:3a7713b1edbc 648 void USBD_SetVendorRequest(VENDOR_REQ pfnVendorReq);
AnnaBridge 171:3a7713b1edbc 649 void USBD_SetConfigCallback(SET_CONFIG_CB pfnSetConfigCallback);
AnnaBridge 171:3a7713b1edbc 650 void USBD_LockEpStall(uint32_t u32EpBitmap);
AnnaBridge 171:3a7713b1edbc 651
AnnaBridge 171:3a7713b1edbc 652 /*@}*/ /* end of group USBD_EXPORTED_FUNCTIONS */
AnnaBridge 171:3a7713b1edbc 653
AnnaBridge 171:3a7713b1edbc 654 /*@}*/ /* end of group USBD_Driver */
AnnaBridge 171:3a7713b1edbc 655
AnnaBridge 171:3a7713b1edbc 656 /*@}*/ /* end of group Standard_Driver */
AnnaBridge 171:3a7713b1edbc 657
AnnaBridge 171:3a7713b1edbc 658 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 659 }
AnnaBridge 171:3a7713b1edbc 660 #endif
AnnaBridge 171:3a7713b1edbc 661
AnnaBridge 171:3a7713b1edbc 662 #endif //__USBD_H__
AnnaBridge 171:3a7713b1edbc 663
AnnaBridge 171:3a7713b1edbc 664 /*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/