mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

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

Committer:
mbed_official
Date:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Parent:
441:d2c15dda23c1
Child:
630:825f75ca301e
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

Full URL: https://github.com/mbedmicro/mbed/commit/d5b4d2ab9c47edb4dc5776e7177b0c2263459081/

Initial version of drivers for SAMR21

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 340:28d1f895c6fe 1 /**
mbed_official 340:28d1f895c6fe 2 ******************************************************************************
mbed_official 340:28d1f895c6fe 3 * @file stm32f0xx_hal_pcd.h
mbed_official 340:28d1f895c6fe 4 * @author MCD Application Team
mbed_official 441:d2c15dda23c1 5 * @version V1.2.0
mbed_official 441:d2c15dda23c1 6 * @date 11-December-2014
mbed_official 340:28d1f895c6fe 7 * @brief Header file of PCD HAL module.
mbed_official 340:28d1f895c6fe 8 ******************************************************************************
mbed_official 340:28d1f895c6fe 9 * @attention
mbed_official 340:28d1f895c6fe 10 *
mbed_official 340:28d1f895c6fe 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 340:28d1f895c6fe 12 *
mbed_official 340:28d1f895c6fe 13 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 340:28d1f895c6fe 14 * are permitted provided that the following conditions are met:
mbed_official 340:28d1f895c6fe 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 340:28d1f895c6fe 16 * this list of conditions and the following disclaimer.
mbed_official 340:28d1f895c6fe 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 340:28d1f895c6fe 18 * this list of conditions and the following disclaimer in the documentation
mbed_official 340:28d1f895c6fe 19 * and/or other materials provided with the distribution.
mbed_official 340:28d1f895c6fe 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 340:28d1f895c6fe 21 * may be used to endorse or promote products derived from this software
mbed_official 340:28d1f895c6fe 22 * without specific prior written permission.
mbed_official 340:28d1f895c6fe 23 *
mbed_official 340:28d1f895c6fe 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 340:28d1f895c6fe 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 340:28d1f895c6fe 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 340:28d1f895c6fe 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 340:28d1f895c6fe 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 340:28d1f895c6fe 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 340:28d1f895c6fe 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 340:28d1f895c6fe 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 340:28d1f895c6fe 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 340:28d1f895c6fe 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 340:28d1f895c6fe 34 *
mbed_official 340:28d1f895c6fe 35 ******************************************************************************
mbed_official 340:28d1f895c6fe 36 */
mbed_official 340:28d1f895c6fe 37
mbed_official 340:28d1f895c6fe 38 /* Define to prevent recursive inclusion -------------------------------------*/
mbed_official 340:28d1f895c6fe 39 #ifndef __STM32F0xx_HAL_PCD_H
mbed_official 340:28d1f895c6fe 40 #define __STM32F0xx_HAL_PCD_H
mbed_official 340:28d1f895c6fe 41
mbed_official 340:28d1f895c6fe 42 #ifdef __cplusplus
mbed_official 340:28d1f895c6fe 43 extern "C" {
mbed_official 340:28d1f895c6fe 44 #endif
mbed_official 340:28d1f895c6fe 45
mbed_official 441:d2c15dda23c1 46 #if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)|| defined(STM32F070x6)
mbed_official 340:28d1f895c6fe 47
mbed_official 340:28d1f895c6fe 48 /* Includes ------------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 49 #include "stm32f0xx_hal_def.h"
mbed_official 340:28d1f895c6fe 50
mbed_official 340:28d1f895c6fe 51 /** @addtogroup STM32F0xx_HAL_Driver
mbed_official 340:28d1f895c6fe 52 * @{
mbed_official 340:28d1f895c6fe 53 */
mbed_official 340:28d1f895c6fe 54
mbed_official 340:28d1f895c6fe 55 /** @addtogroup PCD
mbed_official 340:28d1f895c6fe 56 * @{
mbed_official 340:28d1f895c6fe 57 */
mbed_official 340:28d1f895c6fe 58
mbed_official 340:28d1f895c6fe 59 /* Exported types ------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 60 /** @defgroup PCD_Exported_Types PCD Exported Types
mbed_official 340:28d1f895c6fe 61 * @{
mbed_official 340:28d1f895c6fe 62 */
mbed_official 340:28d1f895c6fe 63
mbed_official 340:28d1f895c6fe 64 /**
mbed_official 340:28d1f895c6fe 65 * @brief PCD State structures definition
mbed_official 340:28d1f895c6fe 66 */
mbed_official 340:28d1f895c6fe 67 typedef enum
mbed_official 340:28d1f895c6fe 68 {
mbed_official 340:28d1f895c6fe 69 PCD_READY = 0x00,
mbed_official 340:28d1f895c6fe 70 PCD_ERROR = 0x01,
mbed_official 340:28d1f895c6fe 71 PCD_BUSY = 0x02,
mbed_official 340:28d1f895c6fe 72 PCD_TIMEOUT = 0x03
mbed_official 340:28d1f895c6fe 73 } PCD_StateTypeDef;
mbed_official 340:28d1f895c6fe 74
mbed_official 340:28d1f895c6fe 75 typedef enum
mbed_official 340:28d1f895c6fe 76 {
mbed_official 340:28d1f895c6fe 77 /* double buffered endpoint direction */
mbed_official 340:28d1f895c6fe 78 PCD_EP_DBUF_OUT,
mbed_official 340:28d1f895c6fe 79 PCD_EP_DBUF_IN,
mbed_official 340:28d1f895c6fe 80 PCD_EP_DBUF_ERR,
mbed_official 340:28d1f895c6fe 81 }PCD_EP_DBUF_DIR;
mbed_official 340:28d1f895c6fe 82
mbed_official 340:28d1f895c6fe 83 /* endpoint buffer number */
mbed_official 340:28d1f895c6fe 84 typedef enum
mbed_official 340:28d1f895c6fe 85 {
mbed_official 340:28d1f895c6fe 86 PCD_EP_NOBUF,
mbed_official 340:28d1f895c6fe 87 PCD_EP_BUF0,
mbed_official 340:28d1f895c6fe 88 PCD_EP_BUF1
mbed_official 340:28d1f895c6fe 89 }PCD_EP_BUF_NUM;
mbed_official 340:28d1f895c6fe 90
mbed_official 340:28d1f895c6fe 91 /**
mbed_official 340:28d1f895c6fe 92 * @brief PCD Initialization Structure definition
mbed_official 340:28d1f895c6fe 93 */
mbed_official 340:28d1f895c6fe 94 typedef struct
mbed_official 340:28d1f895c6fe 95 {
mbed_official 340:28d1f895c6fe 96 uint32_t dev_endpoints; /*!< Device Endpoints number.
mbed_official 340:28d1f895c6fe 97 This parameter depends on the used USB core.
mbed_official 340:28d1f895c6fe 98 This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
mbed_official 340:28d1f895c6fe 99
mbed_official 340:28d1f895c6fe 100 uint32_t speed; /*!< USB Core speed.
mbed_official 441:d2c15dda23c1 101 This parameter can be any value of @ref PCD_Core_Speed */
mbed_official 340:28d1f895c6fe 102
mbed_official 340:28d1f895c6fe 103 uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size.
mbed_official 441:d2c15dda23c1 104 This parameter can be any value of @ref PCD_EP0_MPS */
mbed_official 340:28d1f895c6fe 105
mbed_official 340:28d1f895c6fe 106 uint32_t phy_itface; /*!< Select the used PHY interface.
mbed_official 441:d2c15dda23c1 107 This parameter can be any value of @ref PCD_Core_PHY */
mbed_official 340:28d1f895c6fe 108
mbed_official 340:28d1f895c6fe 109 uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal.
mbed_official 340:28d1f895c6fe 110 This parameter can be set to ENABLE or DISABLE */
mbed_official 340:28d1f895c6fe 111
mbed_official 340:28d1f895c6fe 112 uint32_t low_power_enable; /*!< Enable or disable Low Power mode
mbed_official 340:28d1f895c6fe 113 This parameter can be set to ENABLE or DISABLE */
mbed_official 340:28d1f895c6fe 114
mbed_official 340:28d1f895c6fe 115 uint32_t lpm_enable; /*!< Enable or disable the Link Power Management .
mbed_official 340:28d1f895c6fe 116 This parameter can be set to ENABLE or DISABLE */
mbed_official 340:28d1f895c6fe 117
mbed_official 340:28d1f895c6fe 118 uint32_t battery_charging_enable; /*!< Enable or disable Battery charging.
mbed_official 340:28d1f895c6fe 119 This parameter can be set to ENABLE or DISABLE */
mbed_official 340:28d1f895c6fe 120
mbed_official 340:28d1f895c6fe 121 }PCD_InitTypeDef;
mbed_official 340:28d1f895c6fe 122
mbed_official 340:28d1f895c6fe 123 typedef struct
mbed_official 340:28d1f895c6fe 124 {
mbed_official 340:28d1f895c6fe 125 uint8_t num; /*!< Endpoint number
mbed_official 340:28d1f895c6fe 126 This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
mbed_official 340:28d1f895c6fe 127
mbed_official 340:28d1f895c6fe 128 uint8_t is_in; /*!< Endpoint direction
mbed_official 340:28d1f895c6fe 129 This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
mbed_official 340:28d1f895c6fe 130
mbed_official 340:28d1f895c6fe 131 uint8_t is_stall; /*!< Endpoint stall condition
mbed_official 340:28d1f895c6fe 132 This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
mbed_official 340:28d1f895c6fe 133
mbed_official 340:28d1f895c6fe 134 uint8_t type; /*!< Endpoint type
mbed_official 441:d2c15dda23c1 135 This parameter can be any value of @ref PCD_EP_Type */
mbed_official 340:28d1f895c6fe 136
mbed_official 340:28d1f895c6fe 137 uint16_t pmaadress; /*!< PMA Address
mbed_official 340:28d1f895c6fe 138 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
mbed_official 340:28d1f895c6fe 139
mbed_official 340:28d1f895c6fe 140
mbed_official 340:28d1f895c6fe 141 uint16_t pmaaddr0; /*!< PMA Address0
mbed_official 340:28d1f895c6fe 142 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
mbed_official 340:28d1f895c6fe 143
mbed_official 340:28d1f895c6fe 144
mbed_official 340:28d1f895c6fe 145 uint16_t pmaaddr1; /*!< PMA Address1
mbed_official 340:28d1f895c6fe 146 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
mbed_official 340:28d1f895c6fe 147
mbed_official 340:28d1f895c6fe 148
mbed_official 340:28d1f895c6fe 149 uint8_t doublebuffer; /*!< Double buffer enable
mbed_official 340:28d1f895c6fe 150 This parameter can be 0 or 1 */
mbed_official 340:28d1f895c6fe 151
mbed_official 340:28d1f895c6fe 152 uint32_t maxpacket; /*!< Endpoint Max packet size
mbed_official 340:28d1f895c6fe 153 This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */
mbed_official 340:28d1f895c6fe 154
mbed_official 340:28d1f895c6fe 155 uint8_t *xfer_buff; /*!< Pointer to transfer buffer */
mbed_official 340:28d1f895c6fe 156
mbed_official 340:28d1f895c6fe 157
mbed_official 340:28d1f895c6fe 158 uint32_t xfer_len; /*!< Current transfer length */
mbed_official 340:28d1f895c6fe 159
mbed_official 340:28d1f895c6fe 160 uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */
mbed_official 340:28d1f895c6fe 161
mbed_official 340:28d1f895c6fe 162 }PCD_EPTypeDef;
mbed_official 340:28d1f895c6fe 163
mbed_official 340:28d1f895c6fe 164 typedef USB_TypeDef PCD_TypeDef;
mbed_official 340:28d1f895c6fe 165
mbed_official 340:28d1f895c6fe 166 /**
mbed_official 340:28d1f895c6fe 167 * @brief PCD Handle Structure definition
mbed_official 340:28d1f895c6fe 168 */
mbed_official 340:28d1f895c6fe 169 typedef struct
mbed_official 340:28d1f895c6fe 170 {
mbed_official 340:28d1f895c6fe 171 PCD_TypeDef *Instance; /*!< Register base address */
mbed_official 340:28d1f895c6fe 172 PCD_InitTypeDef Init; /*!< PCD required parameters */
mbed_official 340:28d1f895c6fe 173 __IO uint8_t USB_Address; /*!< USB Address */
mbed_official 340:28d1f895c6fe 174 PCD_EPTypeDef IN_ep[8]; /*!< IN endpoint parameters */
mbed_official 340:28d1f895c6fe 175 PCD_EPTypeDef OUT_ep[8]; /*!< OUT endpoint parameters */
mbed_official 340:28d1f895c6fe 176 HAL_LockTypeDef Lock; /*!< PCD peripheral status */
mbed_official 340:28d1f895c6fe 177 __IO PCD_StateTypeDef State; /*!< PCD communication state */
mbed_official 340:28d1f895c6fe 178 uint32_t Setup[12]; /*!< Setup packet buffer */
mbed_official 340:28d1f895c6fe 179 void *pData; /*!< Pointer to upper stack Handler */
mbed_official 340:28d1f895c6fe 180
mbed_official 340:28d1f895c6fe 181 } PCD_HandleTypeDef;
mbed_official 340:28d1f895c6fe 182
mbed_official 340:28d1f895c6fe 183 /**
mbed_official 340:28d1f895c6fe 184 * @}
mbed_official 340:28d1f895c6fe 185 */
mbed_official 340:28d1f895c6fe 186
mbed_official 340:28d1f895c6fe 187 #include "stm32f0xx_hal_pcd_ex.h"
mbed_official 340:28d1f895c6fe 188 /* Exported constants --------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 189 /** @defgroup PCD_Exported_Constants PCD Exported Constants
mbed_official 340:28d1f895c6fe 190 * @{
mbed_official 340:28d1f895c6fe 191 */
mbed_official 340:28d1f895c6fe 192
mbed_official 441:d2c15dda23c1 193 /** @defgroup PCD_Core_Speed PCD Core Speed
mbed_official 340:28d1f895c6fe 194 * @{
mbed_official 340:28d1f895c6fe 195 */
mbed_official 340:28d1f895c6fe 196 #define PCD_SPEED_HIGH 0 /* Not Supported */
mbed_official 340:28d1f895c6fe 197 #define PCD_SPEED_FULL 2
mbed_official 340:28d1f895c6fe 198 /**
mbed_official 340:28d1f895c6fe 199 * @}
mbed_official 340:28d1f895c6fe 200 */
mbed_official 340:28d1f895c6fe 201
mbed_official 441:d2c15dda23c1 202 /** @defgroup PCD_Core_PHY PCD Core PHY
mbed_official 340:28d1f895c6fe 203 * @{
mbed_official 340:28d1f895c6fe 204 */
mbed_official 340:28d1f895c6fe 205 #define PCD_PHY_EMBEDDED 2
mbed_official 340:28d1f895c6fe 206 /**
mbed_official 340:28d1f895c6fe 207 * @}
mbed_official 340:28d1f895c6fe 208 */
mbed_official 340:28d1f895c6fe 209
mbed_official 441:d2c15dda23c1 210 /** @defgroup PCD_EP0_MPS PCD EP0 MPS
mbed_official 340:28d1f895c6fe 211 * @{
mbed_official 340:28d1f895c6fe 212 */
mbed_official 340:28d1f895c6fe 213 #define DEP0CTL_MPS_64 0
mbed_official 340:28d1f895c6fe 214 #define DEP0CTL_MPS_32 1
mbed_official 340:28d1f895c6fe 215 #define DEP0CTL_MPS_16 2
mbed_official 340:28d1f895c6fe 216 #define DEP0CTL_MPS_8 3
mbed_official 340:28d1f895c6fe 217
mbed_official 340:28d1f895c6fe 218 #define PCD_EP0MPS_64 DEP0CTL_MPS_64
mbed_official 340:28d1f895c6fe 219 #define PCD_EP0MPS_32 DEP0CTL_MPS_32
mbed_official 340:28d1f895c6fe 220 #define PCD_EP0MPS_16 DEP0CTL_MPS_16
mbed_official 340:28d1f895c6fe 221 #define PCD_EP0MPS_08 DEP0CTL_MPS_8
mbed_official 340:28d1f895c6fe 222 /**
mbed_official 340:28d1f895c6fe 223 * @}
mbed_official 340:28d1f895c6fe 224 */
mbed_official 340:28d1f895c6fe 225
mbed_official 441:d2c15dda23c1 226 /** @defgroup PCD_EP_Type PCD EP Type
mbed_official 340:28d1f895c6fe 227 * @{
mbed_official 340:28d1f895c6fe 228 */
mbed_official 340:28d1f895c6fe 229 #define PCD_EP_TYPE_CTRL 0
mbed_official 340:28d1f895c6fe 230 #define PCD_EP_TYPE_ISOC 1
mbed_official 340:28d1f895c6fe 231 #define PCD_EP_TYPE_BULK 2
mbed_official 340:28d1f895c6fe 232 #define PCD_EP_TYPE_INTR 3
mbed_official 340:28d1f895c6fe 233 /**
mbed_official 340:28d1f895c6fe 234 * @}
mbed_official 340:28d1f895c6fe 235 */
mbed_official 340:28d1f895c6fe 236
mbed_official 441:d2c15dda23c1 237 /** @defgroup PCD_ENDP_Type PCD_ENDP_Type
mbed_official 340:28d1f895c6fe 238 * @{
mbed_official 340:28d1f895c6fe 239 */
mbed_official 340:28d1f895c6fe 240
mbed_official 340:28d1f895c6fe 241 #define PCD_ENDP0 ((uint8_t)0)
mbed_official 340:28d1f895c6fe 242 #define PCD_ENDP1 ((uint8_t)1)
mbed_official 340:28d1f895c6fe 243 #define PCD_ENDP2 ((uint8_t)2)
mbed_official 340:28d1f895c6fe 244 #define PCD_ENDP3 ((uint8_t)3)
mbed_official 340:28d1f895c6fe 245 #define PCD_ENDP4 ((uint8_t)4)
mbed_official 340:28d1f895c6fe 246 #define PCD_ENDP5 ((uint8_t)5)
mbed_official 340:28d1f895c6fe 247 #define PCD_ENDP6 ((uint8_t)6)
mbed_official 340:28d1f895c6fe 248 #define PCD_ENDP7 ((uint8_t)7)
mbed_official 340:28d1f895c6fe 249
mbed_official 340:28d1f895c6fe 250 /* Endpoint Kind */
mbed_official 340:28d1f895c6fe 251 #define PCD_SNG_BUF 0
mbed_official 340:28d1f895c6fe 252 #define PCD_DBL_BUF 1
mbed_official 340:28d1f895c6fe 253
mbed_official 340:28d1f895c6fe 254 #define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE
mbed_official 340:28d1f895c6fe 255 /**
mbed_official 340:28d1f895c6fe 256 * @}
mbed_official 340:28d1f895c6fe 257 */
mbed_official 340:28d1f895c6fe 258
mbed_official 340:28d1f895c6fe 259 /**
mbed_official 340:28d1f895c6fe 260 * @}
mbed_official 340:28d1f895c6fe 261 */
mbed_official 340:28d1f895c6fe 262
mbed_official 340:28d1f895c6fe 263 /* Exported macros -----------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 264
mbed_official 340:28d1f895c6fe 265 /** @defgroup PCD_Exported_Macros PCD Exported Macros
mbed_official 340:28d1f895c6fe 266 * @brief macros to handle interrupts and specific clock configurations
mbed_official 340:28d1f895c6fe 267 * @{
mbed_official 340:28d1f895c6fe 268 */
mbed_official 340:28d1f895c6fe 269 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISTR) & (__INTERRUPT__)) == (__INTERRUPT__))
mbed_official 441:d2c15dda23c1 270 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= ~(__INTERRUPT__))
mbed_official 340:28d1f895c6fe 271
mbed_official 340:28d1f895c6fe 272 #define USB_EXTI_LINE_WAKEUP ((uint32_t)0x00040000) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */
mbed_official 340:28d1f895c6fe 273
mbed_official 340:28d1f895c6fe 274 #define __HAL_USB_EXTI_ENABLE_IT() EXTI->IMR |= USB_EXTI_LINE_WAKEUP
mbed_official 340:28d1f895c6fe 275 #define __HAL_USB_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_EXTI_LINE_WAKEUP)
mbed_official 340:28d1f895c6fe 276 #define __HAL_USB_EXTI_GENERATE_SWIT(__EXTILINE__) (EXTI->SWIER |= (__EXTILINE__))
mbed_official 340:28d1f895c6fe 277
mbed_official 340:28d1f895c6fe 278 /**
mbed_official 340:28d1f895c6fe 279 * @}
mbed_official 340:28d1f895c6fe 280 */
mbed_official 340:28d1f895c6fe 281
mbed_official 340:28d1f895c6fe 282 /* Internal macros -----------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 283
mbed_official 340:28d1f895c6fe 284 /** @defgroup PCD_Private_Macros PCD Private Macros
mbed_official 340:28d1f895c6fe 285 * @brief macros to handle interrupts and specific clock configurations
mbed_official 340:28d1f895c6fe 286 * @{
mbed_official 340:28d1f895c6fe 287 */
mbed_official 340:28d1f895c6fe 288
mbed_official 340:28d1f895c6fe 289 /* SetENDPOINT */
mbed_official 340:28d1f895c6fe 290 #define PCD_SET_ENDPOINT(USBx, bEpNum,wRegValue) (*(&(USBx)->EP0R + (bEpNum) * 2)= (uint16_t)(wRegValue))
mbed_official 340:28d1f895c6fe 291
mbed_official 340:28d1f895c6fe 292 /* GetENDPOINT */
mbed_official 340:28d1f895c6fe 293 #define PCD_GET_ENDPOINT(USBx, bEpNum) (*(&(USBx)->EP0R + (bEpNum) * 2))
mbed_official 340:28d1f895c6fe 294
mbed_official 340:28d1f895c6fe 295
mbed_official 340:28d1f895c6fe 296
mbed_official 340:28d1f895c6fe 297 /**
mbed_official 340:28d1f895c6fe 298 * @brief sets the type in the endpoint register(bits EP_TYPE[1:0])
mbed_official 340:28d1f895c6fe 299 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 300 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 301 * @param wType: Endpoint Type.
mbed_official 340:28d1f895c6fe 302 * @retval None
mbed_official 340:28d1f895c6fe 303 */
mbed_official 340:28d1f895c6fe 304 #define PCD_SET_EPTYPE(USBx, bEpNum,wType) (PCD_SET_ENDPOINT((USBx), (bEpNum),\
mbed_official 340:28d1f895c6fe 305 ((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_MASK) | (wType) )))
mbed_official 340:28d1f895c6fe 306
mbed_official 340:28d1f895c6fe 307 /**
mbed_official 340:28d1f895c6fe 308 * @brief gets the type in the endpoint register(bits EP_TYPE[1:0])
mbed_official 340:28d1f895c6fe 309 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 310 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 311 * @retval Endpoint Type
mbed_official 340:28d1f895c6fe 312 */
mbed_official 340:28d1f895c6fe 313 #define PCD_GET_EPTYPE(USBx, bEpNum) (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_FIELD)
mbed_official 340:28d1f895c6fe 314
mbed_official 340:28d1f895c6fe 315
mbed_official 340:28d1f895c6fe 316 /**
mbed_official 340:28d1f895c6fe 317 * @brief free buffer used from the application realizing it to the line
mbed_official 340:28d1f895c6fe 318 toggles bit SW_BUF in the double buffered endpoint register
mbed_official 340:28d1f895c6fe 319 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 320 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 321 * @param bDir: Direction
mbed_official 340:28d1f895c6fe 322 * @retval None
mbed_official 340:28d1f895c6fe 323 */
mbed_official 340:28d1f895c6fe 324 #define PCD_FreeUserBuffer(USBx, bEpNum, bDir)\
mbed_official 340:28d1f895c6fe 325 {\
mbed_official 340:28d1f895c6fe 326 if ((bDir) == PCD_EP_DBUF_OUT)\
mbed_official 340:28d1f895c6fe 327 { /* OUT double buffered endpoint */\
mbed_official 340:28d1f895c6fe 328 PCD_TX_DTOG((USBx), (bEpNum));\
mbed_official 340:28d1f895c6fe 329 }\
mbed_official 340:28d1f895c6fe 330 else if ((bDir) == PCD_EP_DBUF_IN)\
mbed_official 340:28d1f895c6fe 331 { /* IN double buffered endpoint */\
mbed_official 340:28d1f895c6fe 332 PCD_RX_DTOG((USBx), (bEpNum));\
mbed_official 340:28d1f895c6fe 333 }\
mbed_official 340:28d1f895c6fe 334 }
mbed_official 340:28d1f895c6fe 335
mbed_official 340:28d1f895c6fe 336 /**
mbed_official 340:28d1f895c6fe 337 * @brief gets direction of the double buffered endpoint
mbed_official 340:28d1f895c6fe 338 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 339 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 340 * @retval EP_DBUF_OUT, EP_DBUF_IN,
mbed_official 340:28d1f895c6fe 341 * EP_DBUF_ERR if the endpoint counter not yet programmed.
mbed_official 340:28d1f895c6fe 342 */
mbed_official 340:28d1f895c6fe 343 #define PCD_GET_DB_DIR(USBx, bEpNum)\
mbed_official 340:28d1f895c6fe 344 {\
mbed_official 340:28d1f895c6fe 345 if ((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum)) & 0xFC00) != 0)\
mbed_official 340:28d1f895c6fe 346 return(PCD_EP_DBUF_OUT);\
mbed_official 340:28d1f895c6fe 347 else if (((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x03FF) != 0)\
mbed_official 340:28d1f895c6fe 348 return(PCD_EP_DBUF_IN);\
mbed_official 340:28d1f895c6fe 349 else\
mbed_official 340:28d1f895c6fe 350 return(PCD_EP_DBUF_ERR);\
mbed_official 340:28d1f895c6fe 351 }
mbed_official 340:28d1f895c6fe 352
mbed_official 340:28d1f895c6fe 353 /**
mbed_official 340:28d1f895c6fe 354 * @brief sets the status for tx transfer (bits STAT_TX[1:0]).
mbed_official 340:28d1f895c6fe 355 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 356 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 357 * @param wState: new state
mbed_official 340:28d1f895c6fe 358 * @retval None
mbed_official 340:28d1f895c6fe 359 */
mbed_official 340:28d1f895c6fe 360 #define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) {\
mbed_official 340:28d1f895c6fe 361 register uint16_t _wRegVal; \
mbed_official 340:28d1f895c6fe 362 \
mbed_official 340:28d1f895c6fe 363 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK;\
mbed_official 340:28d1f895c6fe 364 /* toggle first bit ? */ \
mbed_official 340:28d1f895c6fe 365 if((USB_EPTX_DTOG1 & (wState))!= 0) \
mbed_official 340:28d1f895c6fe 366 _wRegVal ^= USB_EPTX_DTOG1; \
mbed_official 340:28d1f895c6fe 367 /* toggle second bit ? */ \
mbed_official 340:28d1f895c6fe 368 if((USB_EPTX_DTOG2 & (wState))!= 0) \
mbed_official 340:28d1f895c6fe 369 _wRegVal ^= USB_EPTX_DTOG2; \
mbed_official 340:28d1f895c6fe 370 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \
mbed_official 340:28d1f895c6fe 371 } /* PCD_SET_EP_TX_STATUS */
mbed_official 340:28d1f895c6fe 372
mbed_official 340:28d1f895c6fe 373 /**
mbed_official 340:28d1f895c6fe 374 * @brief sets the status for rx transfer (bits STAT_TX[1:0])
mbed_official 340:28d1f895c6fe 375 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 376 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 377 * @param wState: new state
mbed_official 340:28d1f895c6fe 378 * @retval None
mbed_official 340:28d1f895c6fe 379 */
mbed_official 340:28d1f895c6fe 380 #define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) {\
mbed_official 340:28d1f895c6fe 381 register uint16_t _wRegVal; \
mbed_official 340:28d1f895c6fe 382 \
mbed_official 340:28d1f895c6fe 383 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK;\
mbed_official 340:28d1f895c6fe 384 /* toggle first bit ? */ \
mbed_official 340:28d1f895c6fe 385 if((USB_EPRX_DTOG1 & (wState))!= 0) \
mbed_official 340:28d1f895c6fe 386 _wRegVal ^= USB_EPRX_DTOG1; \
mbed_official 340:28d1f895c6fe 387 /* toggle second bit ? */ \
mbed_official 340:28d1f895c6fe 388 if((USB_EPRX_DTOG2 & (wState))!= 0) \
mbed_official 340:28d1f895c6fe 389 _wRegVal ^= USB_EPRX_DTOG2; \
mbed_official 340:28d1f895c6fe 390 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \
mbed_official 340:28d1f895c6fe 391 } /* PCD_SET_EP_RX_STATUS */
mbed_official 340:28d1f895c6fe 392
mbed_official 340:28d1f895c6fe 393 /**
mbed_official 340:28d1f895c6fe 394 * @brief sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0])
mbed_official 340:28d1f895c6fe 395 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 396 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 397 * @param wStaterx: new state.
mbed_official 340:28d1f895c6fe 398 * @param wStatetx: new state.
mbed_official 340:28d1f895c6fe 399 * @retval None
mbed_official 340:28d1f895c6fe 400 */
mbed_official 340:28d1f895c6fe 401 #define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) {\
mbed_official 340:28d1f895c6fe 402 register uint32_t _wRegVal; \
mbed_official 340:28d1f895c6fe 403 \
mbed_official 340:28d1f895c6fe 404 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK |USB_EPTX_STAT) ;\
mbed_official 340:28d1f895c6fe 405 /* toggle first bit ? */ \
mbed_official 340:28d1f895c6fe 406 if((USB_EPRX_DTOG1 & ((wStaterx)))!= 0) \
mbed_official 340:28d1f895c6fe 407 _wRegVal ^= USB_EPRX_DTOG1; \
mbed_official 340:28d1f895c6fe 408 /* toggle second bit ? */ \
mbed_official 340:28d1f895c6fe 409 if((USB_EPRX_DTOG2 & (wStaterx))!= 0) \
mbed_official 340:28d1f895c6fe 410 _wRegVal ^= USB_EPRX_DTOG2; \
mbed_official 340:28d1f895c6fe 411 /* toggle first bit ? */ \
mbed_official 340:28d1f895c6fe 412 if((USB_EPTX_DTOG1 & (wStatetx))!= 0) \
mbed_official 340:28d1f895c6fe 413 _wRegVal ^= USB_EPTX_DTOG1; \
mbed_official 340:28d1f895c6fe 414 /* toggle second bit ? */ \
mbed_official 340:28d1f895c6fe 415 if((USB_EPTX_DTOG2 & (wStatetx))!= 0) \
mbed_official 340:28d1f895c6fe 416 _wRegVal ^= USB_EPTX_DTOG2; \
mbed_official 340:28d1f895c6fe 417 PCD_SET_ENDPOINT((USBx), (bEpNum), _wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX); \
mbed_official 340:28d1f895c6fe 418 } /* PCD_SET_EP_TXRX_STATUS */
mbed_official 340:28d1f895c6fe 419
mbed_official 340:28d1f895c6fe 420 /**
mbed_official 340:28d1f895c6fe 421 * @brief gets the status for tx/rx transfer (bits STAT_TX[1:0]
mbed_official 340:28d1f895c6fe 422 * /STAT_RX[1:0])
mbed_official 340:28d1f895c6fe 423 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 424 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 425 * @retval status
mbed_official 340:28d1f895c6fe 426 */
mbed_official 340:28d1f895c6fe 427 #define PCD_GET_EP_TX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_STAT)
mbed_official 340:28d1f895c6fe 428
mbed_official 340:28d1f895c6fe 429 #define PCD_GET_EP_RX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_STAT)
mbed_official 340:28d1f895c6fe 430
mbed_official 340:28d1f895c6fe 431 /**
mbed_official 340:28d1f895c6fe 432 * @brief sets directly the VALID tx/rx-status into the endpoint register
mbed_official 340:28d1f895c6fe 433 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 434 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 435 * @retval None
mbed_official 340:28d1f895c6fe 436 */
mbed_official 340:28d1f895c6fe 437 #define PCD_SET_EP_TX_VALID(USBx, bEpNum) (PCD_SET_EP_TX_STATUS((USBx), (bEpNum), USB_EP_TX_VALID))
mbed_official 340:28d1f895c6fe 438
mbed_official 340:28d1f895c6fe 439 #define PCD_SET_EP_RX_VALID(USBx, bEpNum) (PCD_SET_EP_RX_STATUS((USBx), (bEpNum), USB_EP_RX_VALID))
mbed_official 340:28d1f895c6fe 440
mbed_official 340:28d1f895c6fe 441 /**
mbed_official 340:28d1f895c6fe 442 * @brief checks stall condition in an endpoint.
mbed_official 340:28d1f895c6fe 443 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 444 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 445 * @retval TRUE = endpoint in stall condition.
mbed_official 340:28d1f895c6fe 446 */
mbed_official 340:28d1f895c6fe 447 #define PCD_GET_EP_TX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_TX_STATUS((USBx), (bEpNum)) \
mbed_official 340:28d1f895c6fe 448 == USB_EP_TX_STALL)
mbed_official 340:28d1f895c6fe 449 #define PCD_GET_EP_RX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_RX_STATUS((USBx), (bEpNum)) \
mbed_official 340:28d1f895c6fe 450 == USB_EP_RX_STALL)
mbed_official 340:28d1f895c6fe 451
mbed_official 340:28d1f895c6fe 452 /**
mbed_official 340:28d1f895c6fe 453 * @brief set & clear EP_KIND bit.
mbed_official 340:28d1f895c6fe 454 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 455 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 456 * @retval None
mbed_official 340:28d1f895c6fe 457 */
mbed_official 340:28d1f895c6fe 458 #define PCD_SET_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \
mbed_official 340:28d1f895c6fe 459 (USB_EP_CTR_RX|USB_EP_CTR_TX|((PCD_GET_ENDPOINT((USBx), (bEpNum)) | USB_EP_KIND) & USB_EPREG_MASK))))
mbed_official 340:28d1f895c6fe 460 #define PCD_CLEAR_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \
mbed_official 340:28d1f895c6fe 461 (USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK))))
mbed_official 340:28d1f895c6fe 462
mbed_official 340:28d1f895c6fe 463 /**
mbed_official 340:28d1f895c6fe 464 * @brief Sets/clears directly STATUS_OUT bit in the endpoint register.
mbed_official 340:28d1f895c6fe 465 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 466 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 467 * @retval None
mbed_official 340:28d1f895c6fe 468 */
mbed_official 340:28d1f895c6fe 469 #define PCD_SET_OUT_STATUS(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 470 #define PCD_CLEAR_OUT_STATUS(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 471
mbed_official 340:28d1f895c6fe 472 /**
mbed_official 340:28d1f895c6fe 473 * @brief Sets/clears directly EP_KIND bit in the endpoint register.
mbed_official 340:28d1f895c6fe 474 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 475 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 476 * @retval None
mbed_official 340:28d1f895c6fe 477 */
mbed_official 340:28d1f895c6fe 478 #define PCD_SET_EP_DBUF(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 479 #define PCD_CLEAR_EP_DBUF(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 480
mbed_official 340:28d1f895c6fe 481 /**
mbed_official 340:28d1f895c6fe 482 * @brief Clears bit CTR_RX / CTR_TX in the endpoint register.
mbed_official 340:28d1f895c6fe 483 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 484 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 485 * @retval None
mbed_official 340:28d1f895c6fe 486 */
mbed_official 340:28d1f895c6fe 487 #define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\
mbed_official 340:28d1f895c6fe 488 PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0x7FFF & USB_EPREG_MASK))
mbed_official 340:28d1f895c6fe 489 #define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\
mbed_official 340:28d1f895c6fe 490 PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0xFF7F & USB_EPREG_MASK))
mbed_official 340:28d1f895c6fe 491
mbed_official 340:28d1f895c6fe 492 /**
mbed_official 340:28d1f895c6fe 493 * @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register.
mbed_official 340:28d1f895c6fe 494 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 495 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 496 * @retval None
mbed_official 340:28d1f895c6fe 497 */
mbed_official 340:28d1f895c6fe 498 #define PCD_RX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \
mbed_official 340:28d1f895c6fe 499 USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_RX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK)))
mbed_official 340:28d1f895c6fe 500 #define PCD_TX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \
mbed_official 340:28d1f895c6fe 501 USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_TX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK)))
mbed_official 340:28d1f895c6fe 502
mbed_official 340:28d1f895c6fe 503 /**
mbed_official 340:28d1f895c6fe 504 * @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register.
mbed_official 340:28d1f895c6fe 505 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 506 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 507 * @retval None
mbed_official 340:28d1f895c6fe 508 */
mbed_official 340:28d1f895c6fe 509 #define PCD_CLEAR_RX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_RX) != 0)\
mbed_official 340:28d1f895c6fe 510 PCD_RX_DTOG((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 511 #define PCD_CLEAR_TX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_TX) != 0)\
mbed_official 340:28d1f895c6fe 512 PCD_TX_DTOG((USBx), (bEpNum))
mbed_official 340:28d1f895c6fe 513
mbed_official 340:28d1f895c6fe 514 /**
mbed_official 340:28d1f895c6fe 515 * @brief Sets address in an endpoint register.
mbed_official 340:28d1f895c6fe 516 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 517 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 518 * @param bAddr: Address.
mbed_official 340:28d1f895c6fe 519 * @retval None
mbed_official 340:28d1f895c6fe 520 */
mbed_official 340:28d1f895c6fe 521 #define PCD_SET_EP_ADDRESS(USBx, bEpNum,bAddr) PCD_SET_ENDPOINT((USBx), (bEpNum),\
mbed_official 340:28d1f895c6fe 522 USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr))
mbed_official 340:28d1f895c6fe 523
mbed_official 340:28d1f895c6fe 524 /**
mbed_official 340:28d1f895c6fe 525 * @brief Gets address in an endpoint register.
mbed_official 340:28d1f895c6fe 526 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 527 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 528 * @retval None
mbed_official 340:28d1f895c6fe 529 */
mbed_official 340:28d1f895c6fe 530 #define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD))
mbed_official 340:28d1f895c6fe 531
mbed_official 340:28d1f895c6fe 532 #define PCD_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8)+ ((uint32_t)(USBx) + 0x400)))
mbed_official 340:28d1f895c6fe 533 #define PCD_EP_TX_CNT(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+2)+ ((uint32_t)(USBx) + 0x400)))
mbed_official 340:28d1f895c6fe 534 #define PCD_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+4)+ ((uint32_t)(USBx) + 0x400)))
mbed_official 340:28d1f895c6fe 535 #define PCD_EP_RX_CNT(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+6)+ ((uint32_t)(USBx) + 0x400)))
mbed_official 340:28d1f895c6fe 536
mbed_official 340:28d1f895c6fe 537 /**
mbed_official 340:28d1f895c6fe 538 * @brief sets address of the tx/rx buffer.
mbed_official 340:28d1f895c6fe 539 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 540 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 541 * @param wAddr: address to be set (must be word aligned).
mbed_official 340:28d1f895c6fe 542 * @retval None
mbed_official 340:28d1f895c6fe 543 */
mbed_official 340:28d1f895c6fe 544 #define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_TX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1) << 1))
mbed_official 340:28d1f895c6fe 545 #define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_RX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1) << 1))
mbed_official 340:28d1f895c6fe 546
mbed_official 340:28d1f895c6fe 547 /**
mbed_official 340:28d1f895c6fe 548 * @brief Gets address of the tx/rx buffer.
mbed_official 340:28d1f895c6fe 549 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 550 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 551 * @retval address of the buffer.
mbed_official 340:28d1f895c6fe 552 */
mbed_official 340:28d1f895c6fe 553 #define PCD_GET_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_TX_ADDRESS((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 554 #define PCD_GET_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_RX_ADDRESS((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 555
mbed_official 340:28d1f895c6fe 556 /**
mbed_official 340:28d1f895c6fe 557 * @brief Sets counter of rx buffer with no. of blocks.
mbed_official 340:28d1f895c6fe 558 * @param dwReg: Register
mbed_official 340:28d1f895c6fe 559 * @param wCount: Counter.
mbed_official 340:28d1f895c6fe 560 * @param wNBlocks: no. of Blocks.
mbed_official 340:28d1f895c6fe 561 * @retval None
mbed_official 340:28d1f895c6fe 562 */
mbed_official 340:28d1f895c6fe 563 #define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) {\
mbed_official 340:28d1f895c6fe 564 (wNBlocks) = (wCount) >> 5;\
mbed_official 340:28d1f895c6fe 565 if(((wCount) & 0x1f) == 0)\
mbed_official 340:28d1f895c6fe 566 (wNBlocks)--;\
mbed_official 340:28d1f895c6fe 567 *pdwReg = (uint16_t)(((wNBlocks) << 10) | 0x8000);\
mbed_official 340:28d1f895c6fe 568 }/* PCD_CALC_BLK32 */
mbed_official 340:28d1f895c6fe 569
mbed_official 340:28d1f895c6fe 570 #define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) {\
mbed_official 340:28d1f895c6fe 571 (wNBlocks) = (wCount) >> 1;\
mbed_official 340:28d1f895c6fe 572 if(((wCount) & 0x1) != 0)\
mbed_official 340:28d1f895c6fe 573 (wNBlocks)++;\
mbed_official 340:28d1f895c6fe 574 *pdwReg = (uint16_t)((wNBlocks) << 10);\
mbed_official 340:28d1f895c6fe 575 }/* PCD_CALC_BLK2 */
mbed_official 340:28d1f895c6fe 576
mbed_official 340:28d1f895c6fe 577 #define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) {\
mbed_official 340:28d1f895c6fe 578 uint16_t wNBlocks;\
mbed_official 340:28d1f895c6fe 579 if((wCount) > 62){PCD_CALC_BLK32((dwReg),(wCount),wNBlocks);}\
mbed_official 340:28d1f895c6fe 580 else {PCD_CALC_BLK2((dwReg),(wCount),wNBlocks);}\
mbed_official 340:28d1f895c6fe 581 }/* PCD_SET_EP_CNT_RX_REG */
mbed_official 340:28d1f895c6fe 582
mbed_official 340:28d1f895c6fe 583 #define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) {\
mbed_official 340:28d1f895c6fe 584 uint16_t *pdwReg = PCD_EP_TX_CNT((USBx), (bEpNum)); \
mbed_official 340:28d1f895c6fe 585 PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount));\
mbed_official 340:28d1f895c6fe 586 }
mbed_official 340:28d1f895c6fe 587 /**
mbed_official 340:28d1f895c6fe 588 * @brief sets counter for the tx/rx buffer.
mbed_official 340:28d1f895c6fe 589 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 590 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 591 * @param wCount: Counter value.
mbed_official 340:28d1f895c6fe 592 * @retval None
mbed_official 340:28d1f895c6fe 593 */
mbed_official 340:28d1f895c6fe 594 #define PCD_SET_EP_TX_CNT(USBx, bEpNum,wCount) (*PCD_EP_TX_CNT((USBx), (bEpNum)) = (wCount))
mbed_official 340:28d1f895c6fe 595 #define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) {\
mbed_official 340:28d1f895c6fe 596 uint16_t *pdwReg = PCD_EP_RX_CNT(USBx, bEpNum); \
mbed_official 340:28d1f895c6fe 597 PCD_SET_EP_CNT_RX_REG(pdwReg, wCount);\
mbed_official 340:28d1f895c6fe 598 }
mbed_official 340:28d1f895c6fe 599
mbed_official 340:28d1f895c6fe 600 /**
mbed_official 340:28d1f895c6fe 601 * @brief gets counter of the tx buffer.
mbed_official 340:28d1f895c6fe 602 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 603 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 604 * @retval Counter value
mbed_official 340:28d1f895c6fe 605 */
mbed_official 340:28d1f895c6fe 606 #define PCD_GET_EP_TX_CNT(USBx, bEpNum)((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x3ff)
mbed_official 340:28d1f895c6fe 607 #define PCD_GET_EP_RX_CNT(USBx, bEpNum)((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum))) & 0x3ff)
mbed_official 340:28d1f895c6fe 608
mbed_official 340:28d1f895c6fe 609 /**
mbed_official 340:28d1f895c6fe 610 * @brief Sets buffer 0/1 address in a double buffer endpoint.
mbed_official 340:28d1f895c6fe 611 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 612 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 613 * @param wBuf0Addr: buffer 0 address.
mbed_official 340:28d1f895c6fe 614 * @retval Counter value
mbed_official 340:28d1f895c6fe 615 */
mbed_official 340:28d1f895c6fe 616 #define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum,wBuf0Addr) {PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr));}
mbed_official 340:28d1f895c6fe 617 #define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum,wBuf1Addr) {PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr));}
mbed_official 340:28d1f895c6fe 618
mbed_official 340:28d1f895c6fe 619 /**
mbed_official 340:28d1f895c6fe 620 * @brief Sets addresses in a double buffer endpoint.
mbed_official 340:28d1f895c6fe 621 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 622 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 623 * @param wBuf0Addr: buffer 0 address.
mbed_official 340:28d1f895c6fe 624 * @param wBuf1Addr = buffer 1 address.
mbed_official 340:28d1f895c6fe 625 * @retval None
mbed_official 340:28d1f895c6fe 626 */
mbed_official 340:28d1f895c6fe 627 #define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum,wBuf0Addr,wBuf1Addr) { \
mbed_official 340:28d1f895c6fe 628 PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr));\
mbed_official 340:28d1f895c6fe 629 PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr));\
mbed_official 340:28d1f895c6fe 630 } /* PCD_SET_EP_DBUF_ADDR */
mbed_official 340:28d1f895c6fe 631
mbed_official 340:28d1f895c6fe 632 /**
mbed_official 340:28d1f895c6fe 633 * @brief Gets buffer 0/1 address of a double buffer endpoint.
mbed_official 340:28d1f895c6fe 634 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 635 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 636 * @retval None
mbed_official 340:28d1f895c6fe 637 */
mbed_official 340:28d1f895c6fe 638 #define PCD_GET_EP_DBUF0_ADDR(USBx, bEpNum) (PCD_GET_EP_TX_ADDRESS((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 639 #define PCD_GET_EP_DBUF1_ADDR(USBx, bEpNum) (PCD_GET_EP_RX_ADDRESS((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 640
mbed_official 340:28d1f895c6fe 641 /**
mbed_official 340:28d1f895c6fe 642 * @brief Gets buffer 0/1 address of a double buffer endpoint.
mbed_official 340:28d1f895c6fe 643 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 644 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 645 * @param bDir: endpoint dir EP_DBUF_OUT = OUT
mbed_official 340:28d1f895c6fe 646 * EP_DBUF_IN = IN
mbed_official 340:28d1f895c6fe 647 * @param wCount: Counter value
mbed_official 340:28d1f895c6fe 648 * @retval None
mbed_official 340:28d1f895c6fe 649 */
mbed_official 340:28d1f895c6fe 650 #define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) { \
mbed_official 340:28d1f895c6fe 651 if((bDir) == PCD_EP_DBUF_OUT)\
mbed_official 340:28d1f895c6fe 652 /* OUT endpoint */ \
mbed_official 340:28d1f895c6fe 653 {PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum),(wCount));} \
mbed_official 340:28d1f895c6fe 654 else if((bDir) == PCD_EP_DBUF_IN)\
mbed_official 340:28d1f895c6fe 655 /* IN endpoint */ \
mbed_official 340:28d1f895c6fe 656 *PCD_EP_TX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \
mbed_official 340:28d1f895c6fe 657 } /* SetEPDblBuf0Count*/
mbed_official 340:28d1f895c6fe 658
mbed_official 340:28d1f895c6fe 659 #define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) { \
mbed_official 340:28d1f895c6fe 660 if((bDir) == PCD_EP_DBUF_OUT)\
mbed_official 340:28d1f895c6fe 661 /* OUT endpoint */ \
mbed_official 340:28d1f895c6fe 662 {PCD_SET_EP_RX_CNT((USBx), (bEpNum),(wCount));}\
mbed_official 340:28d1f895c6fe 663 else if((bDir) == PCD_EP_DBUF_IN)\
mbed_official 340:28d1f895c6fe 664 /* IN endpoint */\
mbed_official 340:28d1f895c6fe 665 *PCD_EP_RX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \
mbed_official 340:28d1f895c6fe 666 } /* SetEPDblBuf1Count */
mbed_official 340:28d1f895c6fe 667
mbed_official 340:28d1f895c6fe 668 #define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) {\
mbed_official 340:28d1f895c6fe 669 PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \
mbed_official 340:28d1f895c6fe 670 PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \
mbed_official 340:28d1f895c6fe 671 } /* PCD_SET_EP_DBUF_CNT */
mbed_official 340:28d1f895c6fe 672
mbed_official 340:28d1f895c6fe 673 /**
mbed_official 340:28d1f895c6fe 674 * @brief Gets buffer 0/1 rx/tx counter for double buffering.
mbed_official 340:28d1f895c6fe 675 * @param USBx: USB peripheral instance register address.
mbed_official 340:28d1f895c6fe 676 * @param bEpNum: Endpoint Number.
mbed_official 340:28d1f895c6fe 677 * @retval None
mbed_official 340:28d1f895c6fe 678 */
mbed_official 340:28d1f895c6fe 679 #define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 680 #define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT((USBx), (bEpNum)))
mbed_official 340:28d1f895c6fe 681
mbed_official 340:28d1f895c6fe 682
mbed_official 340:28d1f895c6fe 683 /**
mbed_official 340:28d1f895c6fe 684 * @}
mbed_official 340:28d1f895c6fe 685 */
mbed_official 340:28d1f895c6fe 686
mbed_official 340:28d1f895c6fe 687 /* Exported functions --------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 688
mbed_official 340:28d1f895c6fe 689 /** @addtogroup PCD_Exported_Functions
mbed_official 340:28d1f895c6fe 690 * @{
mbed_official 340:28d1f895c6fe 691 */
mbed_official 340:28d1f895c6fe 692
mbed_official 340:28d1f895c6fe 693 /** @addtogroup PCD_Exported_Functions_Group1
mbed_official 340:28d1f895c6fe 694 * @{
mbed_official 340:28d1f895c6fe 695 */
mbed_official 340:28d1f895c6fe 696 /* Initialization and de-initialization functions **********************************/
mbed_official 340:28d1f895c6fe 697 HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 698 HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 699 void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 700 void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 701
mbed_official 340:28d1f895c6fe 702 /**
mbed_official 340:28d1f895c6fe 703 * @}
mbed_official 340:28d1f895c6fe 704 */
mbed_official 340:28d1f895c6fe 705
mbed_official 340:28d1f895c6fe 706 /** @addtogroup PCD_Exported_Functions_Group2
mbed_official 340:28d1f895c6fe 707 * @{
mbed_official 340:28d1f895c6fe 708 */
mbed_official 340:28d1f895c6fe 709 /* IO operation functions *****************************************************/
mbed_official 340:28d1f895c6fe 710 /* Non Blocking mode: Interrupt */
mbed_official 340:28d1f895c6fe 711 HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 712 HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 713 void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 714
mbed_official 340:28d1f895c6fe 715 void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum);
mbed_official 340:28d1f895c6fe 716 void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum);
mbed_official 340:28d1f895c6fe 717 void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 718 void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 719 void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 720 void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 721 void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 722 void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum);
mbed_official 340:28d1f895c6fe 723 void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum);
mbed_official 340:28d1f895c6fe 724 void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 725 void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 726
mbed_official 340:28d1f895c6fe 727 /**
mbed_official 340:28d1f895c6fe 728 * @}
mbed_official 340:28d1f895c6fe 729 */
mbed_official 340:28d1f895c6fe 730
mbed_official 340:28d1f895c6fe 731 /** @addtogroup PCD_Exported_Functions_Group3
mbed_official 340:28d1f895c6fe 732 * @{
mbed_official 340:28d1f895c6fe 733 */
mbed_official 340:28d1f895c6fe 734 /* Peripheral Control functions ************************************************/
mbed_official 340:28d1f895c6fe 735 HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 736 HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 737 HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address);
mbed_official 340:28d1f895c6fe 738 HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type);
mbed_official 340:28d1f895c6fe 739 HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
mbed_official 340:28d1f895c6fe 740 HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len);
mbed_official 340:28d1f895c6fe 741 HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len);
mbed_official 340:28d1f895c6fe 742 uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
mbed_official 340:28d1f895c6fe 743 HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
mbed_official 340:28d1f895c6fe 744 HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
mbed_official 340:28d1f895c6fe 745 HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
mbed_official 340:28d1f895c6fe 746 HAL_StatusTypeDef HAL_PCD_ActiveRemoteWakeup(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 747 HAL_StatusTypeDef HAL_PCD_DeActiveRemoteWakeup(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 748 /**
mbed_official 340:28d1f895c6fe 749 * @}
mbed_official 340:28d1f895c6fe 750 */
mbed_official 340:28d1f895c6fe 751
mbed_official 340:28d1f895c6fe 752 /** @addtogroup PCD_Exported_Functions_Group4
mbed_official 340:28d1f895c6fe 753 * @{
mbed_official 340:28d1f895c6fe 754 */
mbed_official 340:28d1f895c6fe 755 /* Peripheral State functions **************************************************/
mbed_official 340:28d1f895c6fe 756 PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
mbed_official 340:28d1f895c6fe 757 /**
mbed_official 340:28d1f895c6fe 758 * @}
mbed_official 340:28d1f895c6fe 759 */
mbed_official 340:28d1f895c6fe 760
mbed_official 340:28d1f895c6fe 761 /**
mbed_official 340:28d1f895c6fe 762 * @}
mbed_official 340:28d1f895c6fe 763 */
mbed_official 340:28d1f895c6fe 764
mbed_official 340:28d1f895c6fe 765 /**
mbed_official 340:28d1f895c6fe 766 * @}
mbed_official 340:28d1f895c6fe 767 */
mbed_official 340:28d1f895c6fe 768
mbed_official 340:28d1f895c6fe 769 /**
mbed_official 340:28d1f895c6fe 770 * @}
mbed_official 340:28d1f895c6fe 771 */
mbed_official 340:28d1f895c6fe 772
mbed_official 441:d2c15dda23c1 773 #endif /* STM32F042x6 || STM32F072xB || STM32F078xx || STM32F070xB || STM32F070x6 */
mbed_official 340:28d1f895c6fe 774
mbed_official 340:28d1f895c6fe 775 #ifdef __cplusplus
mbed_official 340:28d1f895c6fe 776 }
mbed_official 340:28d1f895c6fe 777 #endif
mbed_official 340:28d1f895c6fe 778
mbed_official 340:28d1f895c6fe 779
mbed_official 340:28d1f895c6fe 780 #endif /* __STM32F0xx_HAL_PCD_H */
mbed_official 340:28d1f895c6fe 781
mbed_official 340:28d1f895c6fe 782 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
mbed_official 340:28d1f895c6fe 783