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 Nov 08 17:18:06 2017 +0000
Revision:
156:ff21514d8981
Child:
161:aa5281ff4a02
Reverting back to release 154 of the mbed library

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