The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
Parent:
TARGET_DISCO_L496AG/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h@165:d1b4690b3f8b
mbed library. Release version 164

Who changed what in which revision?

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