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
Parent:
TARGET_DISCO_F303VC/TARGET_STM/TARGET_STM32F3/device/stm32f3xx_hal_pcd.h@168:b9e159c1930a
mbed library. Release version 164

Who changed what in which revision?

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