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:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
mbed library release version 165

Who changed what in which revision?

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