mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

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