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:
Anna Bridge
Date:
Fri Apr 20 11:08:29 2018 +0100
Revision:
166:5aab5a7997ee
Parent:
161:aa5281ff4a02
Updating mbed 2 version number

Who changed what in which revision?

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