mbed library sources modified for open wear

Dependents:   openwear-lifelogger-example

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Aug 21 15:00:08 2014 +0100
Revision:
297:ec1b66a3d094
Parent:
targets/cmsis/TARGET_STM/TARGET_DISCO_F407VG/stm32f4xx_hal_pcd.c@242:7074e42da0b2
Synchronized with git revision bbc120c4786e99dfa586e7a13f8638064f1e5938

Full URL: https://github.com/mbedmicro/mbed/commit/bbc120c4786e99dfa586e7a13f8638064f1e5938/

DISCO_F407VG - add USBDevice support and a variant - ARCH_MAX

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 133:d4dda5c437f0 1 /**
mbed_official 133:d4dda5c437f0 2 ******************************************************************************
mbed_official 133:d4dda5c437f0 3 * @file stm32f4xx_hal_pcd.c
mbed_official 133:d4dda5c437f0 4 * @author MCD Application Team
mbed_official 242:7074e42da0b2 5 * @version V1.1.0RC2
mbed_official 242:7074e42da0b2 6 * @date 14-May-2014
mbed_official 133:d4dda5c437f0 7 * @brief PCD HAL module driver.
mbed_official 133:d4dda5c437f0 8 * This file provides firmware functions to manage the following
mbed_official 133:d4dda5c437f0 9 * functionalities of the USB Peripheral Controller:
mbed_official 133:d4dda5c437f0 10 * + Initialization and de-initialization functions
mbed_official 133:d4dda5c437f0 11 * + IO operation functions
mbed_official 133:d4dda5c437f0 12 * + Peripheral Control functions
mbed_official 133:d4dda5c437f0 13 * + Peripheral State functions
mbed_official 133:d4dda5c437f0 14 *
mbed_official 133:d4dda5c437f0 15 @verbatim
mbed_official 133:d4dda5c437f0 16 ==============================================================================
mbed_official 133:d4dda5c437f0 17 ##### How to use this driver #####
mbed_official 133:d4dda5c437f0 18 ==============================================================================
mbed_official 133:d4dda5c437f0 19 [..]
mbed_official 133:d4dda5c437f0 20 The PCD HAL driver can be used as follows:
mbed_official 133:d4dda5c437f0 21
mbed_official 133:d4dda5c437f0 22 (#) Declare a PCD_HandleTypeDef handle structure, for example:
mbed_official 133:d4dda5c437f0 23 PCD_HandleTypeDef hpcd;
mbed_official 133:d4dda5c437f0 24
mbed_official 133:d4dda5c437f0 25 (#) Fill parameters of Init structure in HCD handle
mbed_official 133:d4dda5c437f0 26
mbed_official 133:d4dda5c437f0 27 (#) Call HAL_PCD_Init() API to initialize the HCD peripheral (Core, Device core, ...)
mbed_official 133:d4dda5c437f0 28
mbed_official 133:d4dda5c437f0 29 (#) Initialize the PCD low level resources through the HAL_PCD_MspInit() API:
mbed_official 133:d4dda5c437f0 30 (##) Enable the PCD/USB Low Level interface clock using
mbed_official 133:d4dda5c437f0 31 (+++) __OTGFS-OTG_CLK_ENABLE()/__OTGHS-OTG_CLK_ENABLE();
mbed_official 133:d4dda5c437f0 32 (+++) __OTGHSULPI_CLK_ENABLE(); (For High Speed Mode)
mbed_official 133:d4dda5c437f0 33
mbed_official 133:d4dda5c437f0 34 (##) Initialize the related GPIO clocks
mbed_official 133:d4dda5c437f0 35 (##) Configure PCD pin-out
mbed_official 133:d4dda5c437f0 36 (##) Configure PCD NVIC interrupt
mbed_official 133:d4dda5c437f0 37
mbed_official 133:d4dda5c437f0 38 (#)Associate the Upper USB device stack to the HAL PCD Driver:
mbed_official 133:d4dda5c437f0 39 (##) hpcd.pData = pdev;
mbed_official 133:d4dda5c437f0 40
mbed_official 133:d4dda5c437f0 41 (#)Enable HCD transmission and reception:
mbed_official 133:d4dda5c437f0 42 (##) HAL_PCD_Start();
mbed_official 133:d4dda5c437f0 43
mbed_official 133:d4dda5c437f0 44 @endverbatim
mbed_official 133:d4dda5c437f0 45 ******************************************************************************
mbed_official 133:d4dda5c437f0 46 * @attention
mbed_official 133:d4dda5c437f0 47 *
mbed_official 133:d4dda5c437f0 48 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 133:d4dda5c437f0 49 *
mbed_official 133:d4dda5c437f0 50 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 133:d4dda5c437f0 51 * are permitted provided that the following conditions are met:
mbed_official 133:d4dda5c437f0 52 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 133:d4dda5c437f0 53 * this list of conditions and the following disclaimer.
mbed_official 133:d4dda5c437f0 54 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 133:d4dda5c437f0 55 * this list of conditions and the following disclaimer in the documentation
mbed_official 133:d4dda5c437f0 56 * and/or other materials provided with the distribution.
mbed_official 133:d4dda5c437f0 57 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 133:d4dda5c437f0 58 * may be used to endorse or promote products derived from this software
mbed_official 133:d4dda5c437f0 59 * without specific prior written permission.
mbed_official 133:d4dda5c437f0 60 *
mbed_official 133:d4dda5c437f0 61 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 133:d4dda5c437f0 62 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 133:d4dda5c437f0 63 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 133:d4dda5c437f0 64 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 133:d4dda5c437f0 65 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 133:d4dda5c437f0 66 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 133:d4dda5c437f0 67 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 133:d4dda5c437f0 68 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 133:d4dda5c437f0 69 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 133:d4dda5c437f0 70 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 133:d4dda5c437f0 71 *
mbed_official 133:d4dda5c437f0 72 ******************************************************************************
mbed_official 133:d4dda5c437f0 73 */
mbed_official 133:d4dda5c437f0 74
mbed_official 133:d4dda5c437f0 75 /* Includes ------------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 76 #include "stm32f4xx_hal.h"
mbed_official 133:d4dda5c437f0 77
mbed_official 133:d4dda5c437f0 78 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 133:d4dda5c437f0 79 * @{
mbed_official 133:d4dda5c437f0 80 */
mbed_official 133:d4dda5c437f0 81
mbed_official 133:d4dda5c437f0 82 /** @defgroup PCD
mbed_official 133:d4dda5c437f0 83 * @brief PCD HAL module driver
mbed_official 133:d4dda5c437f0 84 * @{
mbed_official 133:d4dda5c437f0 85 */
mbed_official 133:d4dda5c437f0 86
mbed_official 133:d4dda5c437f0 87 #ifdef HAL_PCD_MODULE_ENABLED
mbed_official 133:d4dda5c437f0 88
mbed_official 133:d4dda5c437f0 89 /* Private typedef -----------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 90 /* Private define ------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 91 /* Private macro -------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 92 #define PCD_MIN(a, b) (((a) < (b)) ? (a) : (b))
mbed_official 133:d4dda5c437f0 93 #define PCD_MAX(a, b) (((a) > (b)) ? (a) : (b))
mbed_official 133:d4dda5c437f0 94 /* Private variables ---------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 95 /* Private function prototypes -----------------------------------------------*/
mbed_official 133:d4dda5c437f0 96 static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum);
mbed_official 133:d4dda5c437f0 97 /* Private functions ---------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 98
mbed_official 133:d4dda5c437f0 99 /** @defgroup PCD_Private_Functions
mbed_official 133:d4dda5c437f0 100 * @{
mbed_official 133:d4dda5c437f0 101 */
mbed_official 133:d4dda5c437f0 102
mbed_official 133:d4dda5c437f0 103 /** @defgroup PCD_Group1 Initialization and de-initialization functions
mbed_official 133:d4dda5c437f0 104 * @brief Initialization and Configuration functions
mbed_official 133:d4dda5c437f0 105 *
mbed_official 133:d4dda5c437f0 106 @verbatim
mbed_official 133:d4dda5c437f0 107 ===============================================================================
mbed_official 133:d4dda5c437f0 108 ##### Initialization and de-initialization functions #####
mbed_official 133:d4dda5c437f0 109 ===============================================================================
mbed_official 133:d4dda5c437f0 110 [..] This section provides functions allowing to:
mbed_official 133:d4dda5c437f0 111
mbed_official 133:d4dda5c437f0 112 @endverbatim
mbed_official 133:d4dda5c437f0 113 * @{
mbed_official 133:d4dda5c437f0 114 */
mbed_official 133:d4dda5c437f0 115
mbed_official 133:d4dda5c437f0 116 /**
mbed_official 133:d4dda5c437f0 117 * @brief Initializes the PCD according to the specified
mbed_official 133:d4dda5c437f0 118 * parameters in the PCD_InitTypeDef and create the associated handle.
mbed_official 133:d4dda5c437f0 119 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 120 * @retval HAL status
mbed_official 133:d4dda5c437f0 121 */
mbed_official 133:d4dda5c437f0 122 HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 123 {
mbed_official 133:d4dda5c437f0 124 uint32_t i = 0;
mbed_official 133:d4dda5c437f0 125
mbed_official 133:d4dda5c437f0 126 /* Check the PCD handle allocation */
mbed_official 133:d4dda5c437f0 127 if(hpcd == NULL)
mbed_official 133:d4dda5c437f0 128 {
mbed_official 133:d4dda5c437f0 129 return HAL_ERROR;
mbed_official 133:d4dda5c437f0 130 }
mbed_official 133:d4dda5c437f0 131
mbed_official 133:d4dda5c437f0 132 /* Check the parameters */
mbed_official 133:d4dda5c437f0 133 assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
mbed_official 133:d4dda5c437f0 134
mbed_official 133:d4dda5c437f0 135 hpcd->State = PCD_BUSY;
mbed_official 133:d4dda5c437f0 136
mbed_official 133:d4dda5c437f0 137 /* Init the low level hardware : GPIO, CLOCK, NVIC... */
mbed_official 133:d4dda5c437f0 138 HAL_PCD_MspInit(hpcd);
mbed_official 133:d4dda5c437f0 139
mbed_official 133:d4dda5c437f0 140 /* Disable the Interrupts */
mbed_official 133:d4dda5c437f0 141 __HAL_PCD_DISABLE(hpcd);
mbed_official 133:d4dda5c437f0 142
mbed_official 133:d4dda5c437f0 143 /*Init the Core (common init.) */
mbed_official 133:d4dda5c437f0 144 USB_CoreInit(hpcd->Instance, hpcd->Init);
mbed_official 133:d4dda5c437f0 145
mbed_official 133:d4dda5c437f0 146 /* Force Device Mode*/
mbed_official 133:d4dda5c437f0 147 USB_SetCurrentMode(hpcd->Instance , USB_OTG_DEVICE_MODE);
mbed_official 133:d4dda5c437f0 148
mbed_official 133:d4dda5c437f0 149 /* Init endpoints structures */
mbed_official 133:d4dda5c437f0 150 for (i = 0; i < 15 ; i++)
mbed_official 133:d4dda5c437f0 151 {
mbed_official 133:d4dda5c437f0 152 /* Init ep structure */
mbed_official 133:d4dda5c437f0 153 hpcd->IN_ep[i].is_in = 1;
mbed_official 133:d4dda5c437f0 154 hpcd->IN_ep[i].num = i;
mbed_official 133:d4dda5c437f0 155 hpcd->IN_ep[i].tx_fifo_num = i;
mbed_official 133:d4dda5c437f0 156 /* Control until ep is actvated */
mbed_official 133:d4dda5c437f0 157 hpcd->IN_ep[i].type = EP_TYPE_CTRL;
mbed_official 133:d4dda5c437f0 158 hpcd->IN_ep[i].maxpacket = 0;
mbed_official 133:d4dda5c437f0 159 hpcd->IN_ep[i].xfer_buff = 0;
mbed_official 133:d4dda5c437f0 160 hpcd->IN_ep[i].xfer_len = 0;
mbed_official 133:d4dda5c437f0 161 }
mbed_official 133:d4dda5c437f0 162
mbed_official 133:d4dda5c437f0 163 for (i = 0; i < 15 ; i++)
mbed_official 133:d4dda5c437f0 164 {
mbed_official 133:d4dda5c437f0 165 hpcd->OUT_ep[i].is_in = 0;
mbed_official 133:d4dda5c437f0 166 hpcd->OUT_ep[i].num = i;
mbed_official 133:d4dda5c437f0 167 hpcd->IN_ep[i].tx_fifo_num = i;
mbed_official 133:d4dda5c437f0 168 /* Control until ep is activated */
mbed_official 133:d4dda5c437f0 169 hpcd->OUT_ep[i].type = EP_TYPE_CTRL;
mbed_official 133:d4dda5c437f0 170 hpcd->OUT_ep[i].maxpacket = 0;
mbed_official 133:d4dda5c437f0 171 hpcd->OUT_ep[i].xfer_buff = 0;
mbed_official 133:d4dda5c437f0 172 hpcd->OUT_ep[i].xfer_len = 0;
mbed_official 133:d4dda5c437f0 173
mbed_official 133:d4dda5c437f0 174 hpcd->Instance->DIEPTXF[i] = 0;
mbed_official 133:d4dda5c437f0 175 }
mbed_official 133:d4dda5c437f0 176
mbed_official 133:d4dda5c437f0 177 /* Init Device */
mbed_official 133:d4dda5c437f0 178 USB_DevInit(hpcd->Instance, hpcd->Init);
mbed_official 133:d4dda5c437f0 179
mbed_official 133:d4dda5c437f0 180 hpcd->State= PCD_READY;
mbed_official 133:d4dda5c437f0 181
mbed_official 133:d4dda5c437f0 182 USB_DevDisconnect (hpcd->Instance);
mbed_official 133:d4dda5c437f0 183 return HAL_OK;
mbed_official 133:d4dda5c437f0 184 }
mbed_official 133:d4dda5c437f0 185
mbed_official 133:d4dda5c437f0 186 /**
mbed_official 133:d4dda5c437f0 187 * @brief DeInitializes the PCD peripheral
mbed_official 133:d4dda5c437f0 188 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 189 * @retval HAL status
mbed_official 133:d4dda5c437f0 190 */
mbed_official 133:d4dda5c437f0 191 HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 192 {
mbed_official 133:d4dda5c437f0 193 /* Check the PCD handle allocation */
mbed_official 133:d4dda5c437f0 194 if(hpcd == NULL)
mbed_official 133:d4dda5c437f0 195 {
mbed_official 133:d4dda5c437f0 196 return HAL_ERROR;
mbed_official 133:d4dda5c437f0 197 }
mbed_official 133:d4dda5c437f0 198
mbed_official 133:d4dda5c437f0 199 hpcd->State = PCD_BUSY;
mbed_official 133:d4dda5c437f0 200
mbed_official 133:d4dda5c437f0 201 /* Stop Device */
mbed_official 133:d4dda5c437f0 202 HAL_PCD_Stop(hpcd);
mbed_official 133:d4dda5c437f0 203
mbed_official 133:d4dda5c437f0 204 /* DeInit the low level hardware */
mbed_official 133:d4dda5c437f0 205 HAL_PCD_MspDeInit(hpcd);
mbed_official 133:d4dda5c437f0 206
mbed_official 133:d4dda5c437f0 207 hpcd->State = PCD_READY;
mbed_official 133:d4dda5c437f0 208
mbed_official 133:d4dda5c437f0 209 return HAL_OK;
mbed_official 133:d4dda5c437f0 210 }
mbed_official 133:d4dda5c437f0 211
mbed_official 133:d4dda5c437f0 212 /**
mbed_official 133:d4dda5c437f0 213 * @brief Initializes the PCD MSP.
mbed_official 133:d4dda5c437f0 214 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 215 * @retval None
mbed_official 133:d4dda5c437f0 216 */
mbed_official 133:d4dda5c437f0 217 __weak void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 218 {
mbed_official 133:d4dda5c437f0 219 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 220 the HAL_PCD_MspInit could be implenetd in the user file
mbed_official 133:d4dda5c437f0 221 */
mbed_official 133:d4dda5c437f0 222 }
mbed_official 133:d4dda5c437f0 223
mbed_official 133:d4dda5c437f0 224 /**
mbed_official 133:d4dda5c437f0 225 * @brief DeInitializes PCD MSP.
mbed_official 133:d4dda5c437f0 226 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 227 * @retval None
mbed_official 133:d4dda5c437f0 228 */
mbed_official 133:d4dda5c437f0 229 __weak void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 230 {
mbed_official 133:d4dda5c437f0 231 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 232 the HAL_PCD_MspDeInit could be implenetd in the user file
mbed_official 133:d4dda5c437f0 233 */
mbed_official 133:d4dda5c437f0 234 }
mbed_official 133:d4dda5c437f0 235
mbed_official 133:d4dda5c437f0 236 /**
mbed_official 133:d4dda5c437f0 237 * @}
mbed_official 133:d4dda5c437f0 238 */
mbed_official 133:d4dda5c437f0 239
mbed_official 133:d4dda5c437f0 240 /** @defgroup PCD_Group2 IO operation functions
mbed_official 133:d4dda5c437f0 241 * @brief Data transfers functions
mbed_official 133:d4dda5c437f0 242 *
mbed_official 133:d4dda5c437f0 243 @verbatim
mbed_official 133:d4dda5c437f0 244 ===============================================================================
mbed_official 133:d4dda5c437f0 245 ##### IO operation functions #####
mbed_official 133:d4dda5c437f0 246 ===============================================================================
mbed_official 133:d4dda5c437f0 247 [..]
mbed_official 133:d4dda5c437f0 248 This subsection provides a set of functions allowing to manage the PCD data
mbed_official 133:d4dda5c437f0 249 transfers.
mbed_official 133:d4dda5c437f0 250
mbed_official 133:d4dda5c437f0 251 @endverbatim
mbed_official 133:d4dda5c437f0 252 * @{
mbed_official 133:d4dda5c437f0 253 */
mbed_official 133:d4dda5c437f0 254
mbed_official 133:d4dda5c437f0 255 /**
mbed_official 133:d4dda5c437f0 256 * @brief Start The USB OTG Device.
mbed_official 133:d4dda5c437f0 257 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 258 * @retval HAL status
mbed_official 133:d4dda5c437f0 259 */
mbed_official 133:d4dda5c437f0 260 HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 261 {
mbed_official 133:d4dda5c437f0 262 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 263 USB_DevConnect (hpcd->Instance);
mbed_official 133:d4dda5c437f0 264 __HAL_PCD_ENABLE(hpcd);
mbed_official 133:d4dda5c437f0 265 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 266 return HAL_OK;
mbed_official 133:d4dda5c437f0 267 }
mbed_official 133:d4dda5c437f0 268
mbed_official 133:d4dda5c437f0 269 /**
mbed_official 133:d4dda5c437f0 270 * @brief Stop The USB OTG Device.
mbed_official 133:d4dda5c437f0 271 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 272 * @retval HAL status
mbed_official 133:d4dda5c437f0 273 */
mbed_official 133:d4dda5c437f0 274 HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 275 {
mbed_official 133:d4dda5c437f0 276 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 277 __HAL_PCD_DISABLE(hpcd);
mbed_official 133:d4dda5c437f0 278 USB_StopDevice(hpcd->Instance);
mbed_official 133:d4dda5c437f0 279 USB_DevDisconnect (hpcd->Instance);
mbed_official 133:d4dda5c437f0 280 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 281 return HAL_OK;
mbed_official 133:d4dda5c437f0 282 }
mbed_official 133:d4dda5c437f0 283
mbed_official 133:d4dda5c437f0 284 /**
mbed_official 133:d4dda5c437f0 285 * @brief This function handles PCD interrupt request.
mbed_official 133:d4dda5c437f0 286 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 287 * @retval HAL status
mbed_official 133:d4dda5c437f0 288 */
mbed_official 133:d4dda5c437f0 289 void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 290 {
mbed_official 133:d4dda5c437f0 291 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
mbed_official 133:d4dda5c437f0 292 uint32_t i = 0, ep_intr = 0, epint = 0, epnum = 0;
mbed_official 133:d4dda5c437f0 293 uint32_t fifoemptymsk = 0, temp = 0;
mbed_official 133:d4dda5c437f0 294 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 295
mbed_official 133:d4dda5c437f0 296 /* ensure that we are in device mode */
mbed_official 133:d4dda5c437f0 297 if (USB_GetMode(hpcd->Instance) == USB_OTG_MODE_DEVICE)
mbed_official 133:d4dda5c437f0 298 {
mbed_official 133:d4dda5c437f0 299 /* avoid spurious interrupt */
mbed_official 133:d4dda5c437f0 300 if(__HAL_IS_INVALID_INTERRUPT(hpcd))
mbed_official 133:d4dda5c437f0 301 {
mbed_official 133:d4dda5c437f0 302 return;
mbed_official 133:d4dda5c437f0 303 }
mbed_official 133:d4dda5c437f0 304
mbed_official 133:d4dda5c437f0 305 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_MMIS))
mbed_official 133:d4dda5c437f0 306 {
mbed_official 133:d4dda5c437f0 307 /* incorrect mode, acknowledge the interrupt */
mbed_official 133:d4dda5c437f0 308 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
mbed_official 133:d4dda5c437f0 309 }
mbed_official 133:d4dda5c437f0 310
mbed_official 133:d4dda5c437f0 311 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
mbed_official 133:d4dda5c437f0 312 {
mbed_official 133:d4dda5c437f0 313 epnum = 0;
mbed_official 133:d4dda5c437f0 314
mbed_official 133:d4dda5c437f0 315 /* Read in the device interrupt bits */
mbed_official 133:d4dda5c437f0 316 ep_intr = USB_ReadDevAllOutEpInterrupt(hpcd->Instance);
mbed_official 133:d4dda5c437f0 317
mbed_official 133:d4dda5c437f0 318 while ( ep_intr )
mbed_official 133:d4dda5c437f0 319 {
mbed_official 133:d4dda5c437f0 320 if (ep_intr & 0x1)
mbed_official 133:d4dda5c437f0 321 {
mbed_official 133:d4dda5c437f0 322 epint = USB_ReadDevOutEPInterrupt(hpcd->Instance, epnum);
mbed_official 133:d4dda5c437f0 323
mbed_official 133:d4dda5c437f0 324 if(( epint & USB_OTG_DOEPINT_XFRC) == USB_OTG_DOEPINT_XFRC)
mbed_official 133:d4dda5c437f0 325 {
mbed_official 133:d4dda5c437f0 326 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_XFRC);
mbed_official 133:d4dda5c437f0 327
mbed_official 133:d4dda5c437f0 328 if(hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 329 {
mbed_official 133:d4dda5c437f0 330 hpcd->OUT_ep[epnum].xfer_count = hpcd->OUT_ep[epnum].maxpacket- (USBx_OUTEP(epnum)->DOEPTSIZ & USB_OTG_DOEPTSIZ_XFRSIZ);
mbed_official 133:d4dda5c437f0 331 hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
mbed_official 133:d4dda5c437f0 332 }
mbed_official 133:d4dda5c437f0 333
mbed_official 133:d4dda5c437f0 334 HAL_PCD_DataOutStageCallback(hpcd, epnum);
mbed_official 133:d4dda5c437f0 335 if(hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 336 {
mbed_official 133:d4dda5c437f0 337 if((epnum == 0) && (hpcd->OUT_ep[epnum].xfer_len == 0))
mbed_official 133:d4dda5c437f0 338 {
mbed_official 133:d4dda5c437f0 339 /* this is ZLP, so prepare EP0 for next setup */
mbed_official 133:d4dda5c437f0 340 USB_EP0_OutStart(hpcd->Instance, 1, (uint8_t *)hpcd->Setup);
mbed_official 133:d4dda5c437f0 341 }
mbed_official 133:d4dda5c437f0 342 }
mbed_official 133:d4dda5c437f0 343 }
mbed_official 133:d4dda5c437f0 344
mbed_official 133:d4dda5c437f0 345 if(( epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
mbed_official 133:d4dda5c437f0 346 {
mbed_official 133:d4dda5c437f0 347 /* Inform the upper layer that a setup packet is available */
mbed_official 133:d4dda5c437f0 348 HAL_PCD_SetupStageCallback(hpcd);
mbed_official 133:d4dda5c437f0 349 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
mbed_official 133:d4dda5c437f0 350 }
mbed_official 133:d4dda5c437f0 351
mbed_official 133:d4dda5c437f0 352 if(( epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
mbed_official 133:d4dda5c437f0 353 {
mbed_official 133:d4dda5c437f0 354 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPDIS);
mbed_official 133:d4dda5c437f0 355 }
mbed_official 133:d4dda5c437f0 356 }
mbed_official 133:d4dda5c437f0 357 epnum++;
mbed_official 133:d4dda5c437f0 358 ep_intr >>= 1;
mbed_official 133:d4dda5c437f0 359 }
mbed_official 133:d4dda5c437f0 360 }
mbed_official 133:d4dda5c437f0 361
mbed_official 133:d4dda5c437f0 362 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_IEPINT))
mbed_official 133:d4dda5c437f0 363 {
mbed_official 133:d4dda5c437f0 364 /* Read in the device interrupt bits */
mbed_official 133:d4dda5c437f0 365 ep_intr = USB_ReadDevAllInEpInterrupt(hpcd->Instance);
mbed_official 133:d4dda5c437f0 366
mbed_official 133:d4dda5c437f0 367 epnum = 0;
mbed_official 133:d4dda5c437f0 368
mbed_official 133:d4dda5c437f0 369 while ( ep_intr )
mbed_official 133:d4dda5c437f0 370 {
mbed_official 133:d4dda5c437f0 371 if (ep_intr & 0x1) /* In ITR */
mbed_official 133:d4dda5c437f0 372 {
mbed_official 133:d4dda5c437f0 373 epint = USB_ReadDevInEPInterrupt(hpcd->Instance, epnum);
mbed_official 133:d4dda5c437f0 374
mbed_official 133:d4dda5c437f0 375 if(( epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC)
mbed_official 133:d4dda5c437f0 376 {
mbed_official 133:d4dda5c437f0 377 fifoemptymsk = 0x1 << epnum;
mbed_official 133:d4dda5c437f0 378 USBx_DEVICE->DIEPEMPMSK = ~fifoemptymsk;
mbed_official 133:d4dda5c437f0 379
mbed_official 133:d4dda5c437f0 380 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC);
mbed_official 133:d4dda5c437f0 381
mbed_official 133:d4dda5c437f0 382 if (hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 383 {
mbed_official 133:d4dda5c437f0 384 hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
mbed_official 133:d4dda5c437f0 385 }
mbed_official 133:d4dda5c437f0 386
mbed_official 133:d4dda5c437f0 387 HAL_PCD_DataInStageCallback(hpcd, epnum);
mbed_official 133:d4dda5c437f0 388
mbed_official 133:d4dda5c437f0 389 if (hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 390 {
mbed_official 133:d4dda5c437f0 391 /* this is ZLP, so prepare EP0 for next setup */
mbed_official 133:d4dda5c437f0 392 if((epnum == 0) && (hpcd->IN_ep[epnum].xfer_len == 0))
mbed_official 133:d4dda5c437f0 393 {
mbed_official 133:d4dda5c437f0 394 /* prepare to rx more setup packets */
mbed_official 133:d4dda5c437f0 395 USB_EP0_OutStart(hpcd->Instance, 1, (uint8_t *)hpcd->Setup);
mbed_official 133:d4dda5c437f0 396 }
mbed_official 133:d4dda5c437f0 397 }
mbed_official 133:d4dda5c437f0 398 }
mbed_official 133:d4dda5c437f0 399 if(( epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
mbed_official 133:d4dda5c437f0 400 {
mbed_official 133:d4dda5c437f0 401 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_TOC);
mbed_official 133:d4dda5c437f0 402 }
mbed_official 133:d4dda5c437f0 403 if(( epint & USB_OTG_DIEPINT_ITTXFE) == USB_OTG_DIEPINT_ITTXFE)
mbed_official 133:d4dda5c437f0 404 {
mbed_official 133:d4dda5c437f0 405 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_ITTXFE);
mbed_official 133:d4dda5c437f0 406 }
mbed_official 133:d4dda5c437f0 407 if(( epint & USB_OTG_DIEPINT_INEPNE) == USB_OTG_DIEPINT_INEPNE)
mbed_official 133:d4dda5c437f0 408 {
mbed_official 133:d4dda5c437f0 409 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_INEPNE);
mbed_official 133:d4dda5c437f0 410 }
mbed_official 133:d4dda5c437f0 411 if(( epint & USB_OTG_DIEPINT_EPDISD) == USB_OTG_DIEPINT_EPDISD)
mbed_official 133:d4dda5c437f0 412 {
mbed_official 133:d4dda5c437f0 413 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_EPDISD);
mbed_official 133:d4dda5c437f0 414 }
mbed_official 133:d4dda5c437f0 415 if(( epint & USB_OTG_DIEPINT_TXFE) == USB_OTG_DIEPINT_TXFE)
mbed_official 133:d4dda5c437f0 416 {
mbed_official 133:d4dda5c437f0 417 PCD_WriteEmptyTxFifo(hpcd , epnum);
mbed_official 133:d4dda5c437f0 418 }
mbed_official 133:d4dda5c437f0 419 }
mbed_official 133:d4dda5c437f0 420 epnum++;
mbed_official 133:d4dda5c437f0 421 ep_intr >>= 1;
mbed_official 133:d4dda5c437f0 422 }
mbed_official 133:d4dda5c437f0 423 }
mbed_official 133:d4dda5c437f0 424
mbed_official 133:d4dda5c437f0 425 /* Handle Resume Interrupt */
mbed_official 133:d4dda5c437f0 426 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT))
mbed_official 133:d4dda5c437f0 427 {
mbed_official 133:d4dda5c437f0 428 /* Clear the Remote Wake-up Signaling */
mbed_official 133:d4dda5c437f0 429 USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
mbed_official 133:d4dda5c437f0 430
mbed_official 133:d4dda5c437f0 431 HAL_PCD_ResumeCallback(hpcd);
mbed_official 133:d4dda5c437f0 432
mbed_official 133:d4dda5c437f0 433 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT);
mbed_official 133:d4dda5c437f0 434 }
mbed_official 133:d4dda5c437f0 435
mbed_official 133:d4dda5c437f0 436 /* Handle Suspend Interrupt */
mbed_official 133:d4dda5c437f0 437 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP))
mbed_official 133:d4dda5c437f0 438 {
mbed_official 133:d4dda5c437f0 439
mbed_official 133:d4dda5c437f0 440 if((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS)
mbed_official 133:d4dda5c437f0 441 {
mbed_official 133:d4dda5c437f0 442
mbed_official 133:d4dda5c437f0 443 HAL_PCD_SuspendCallback(hpcd);
mbed_official 133:d4dda5c437f0 444 }
mbed_official 133:d4dda5c437f0 445 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP);
mbed_official 133:d4dda5c437f0 446 }
mbed_official 133:d4dda5c437f0 447
mbed_official 133:d4dda5c437f0 448
mbed_official 133:d4dda5c437f0 449
mbed_official 133:d4dda5c437f0 450 /* Handle Reset Interrupt */
mbed_official 133:d4dda5c437f0 451 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBRST))
mbed_official 133:d4dda5c437f0 452 {
mbed_official 133:d4dda5c437f0 453 USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
mbed_official 133:d4dda5c437f0 454 USB_FlushTxFifo(hpcd->Instance , 0 );
mbed_official 133:d4dda5c437f0 455
mbed_official 133:d4dda5c437f0 456 for (i = 0; i < hpcd->Init.dev_endpoints ; i++)
mbed_official 133:d4dda5c437f0 457 {
mbed_official 133:d4dda5c437f0 458 USBx_INEP(i)->DIEPINT = 0xFF;
mbed_official 133:d4dda5c437f0 459 USBx_OUTEP(i)->DOEPINT = 0xFF;
mbed_official 133:d4dda5c437f0 460 }
mbed_official 133:d4dda5c437f0 461 USBx_DEVICE->DAINT = 0xFFFFFFFF;
mbed_official 133:d4dda5c437f0 462 USBx_DEVICE->DAINTMSK |= 0x10001;
mbed_official 133:d4dda5c437f0 463
mbed_official 133:d4dda5c437f0 464 if(hpcd->Init.use_dedicated_ep1)
mbed_official 133:d4dda5c437f0 465 {
mbed_official 133:d4dda5c437f0 466 USBx_DEVICE->DOUTEP1MSK |= (USB_OTG_DOEPMSK_STUPM | USB_OTG_DOEPMSK_XFRCM | USB_OTG_DOEPMSK_EPDM);
mbed_official 133:d4dda5c437f0 467 USBx_DEVICE->DINEP1MSK |= (USB_OTG_DIEPMSK_TOM | USB_OTG_DIEPMSK_XFRCM | USB_OTG_DIEPMSK_EPDM);
mbed_official 133:d4dda5c437f0 468 }
mbed_official 133:d4dda5c437f0 469 else
mbed_official 133:d4dda5c437f0 470 {
mbed_official 133:d4dda5c437f0 471 USBx_DEVICE->DOEPMSK |= (USB_OTG_DOEPMSK_STUPM | USB_OTG_DOEPMSK_XFRCM | USB_OTG_DOEPMSK_EPDM);
mbed_official 133:d4dda5c437f0 472 USBx_DEVICE->DIEPMSK |= (USB_OTG_DIEPMSK_TOM | USB_OTG_DIEPMSK_XFRCM | USB_OTG_DIEPMSK_EPDM);
mbed_official 133:d4dda5c437f0 473 }
mbed_official 133:d4dda5c437f0 474
mbed_official 133:d4dda5c437f0 475 /* Set Default Address to 0 */
mbed_official 133:d4dda5c437f0 476 USBx_DEVICE->DCFG &= ~USB_OTG_DCFG_DAD;
mbed_official 133:d4dda5c437f0 477
mbed_official 133:d4dda5c437f0 478 /* setup EP0 to receive SETUP packets */
mbed_official 133:d4dda5c437f0 479 USB_EP0_OutStart(hpcd->Instance, hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup);
mbed_official 133:d4dda5c437f0 480
mbed_official 133:d4dda5c437f0 481 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBRST);
mbed_official 133:d4dda5c437f0 482 }
mbed_official 133:d4dda5c437f0 483
mbed_official 133:d4dda5c437f0 484 /* Handle Enumeration done Interrupt */
mbed_official 133:d4dda5c437f0 485 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE))
mbed_official 133:d4dda5c437f0 486 {
mbed_official 133:d4dda5c437f0 487 USB_ActivateSetup(hpcd->Instance);
mbed_official 133:d4dda5c437f0 488 hpcd->Instance->GUSBCFG &= ~USB_OTG_GUSBCFG_TRDT;
mbed_official 133:d4dda5c437f0 489
mbed_official 133:d4dda5c437f0 490 if ( USB_GetDevSpeed(hpcd->Instance) == USB_OTG_SPEED_HIGH)
mbed_official 133:d4dda5c437f0 491 {
mbed_official 133:d4dda5c437f0 492 hpcd->Init.speed = USB_OTG_SPEED_HIGH;
mbed_official 133:d4dda5c437f0 493 hpcd->Init.ep0_mps = USB_OTG_HS_MAX_PACKET_SIZE ;
mbed_official 133:d4dda5c437f0 494 hpcd->Instance->GUSBCFG |= (USB_OTG_GUSBCFG_TRDT_0 | USB_OTG_GUSBCFG_TRDT_3);
mbed_official 133:d4dda5c437f0 495 }
mbed_official 133:d4dda5c437f0 496 else
mbed_official 133:d4dda5c437f0 497 {
mbed_official 133:d4dda5c437f0 498 hpcd->Init.speed = USB_OTG_SPEED_FULL;
mbed_official 133:d4dda5c437f0 499 hpcd->Init.ep0_mps = USB_OTG_FS_MAX_PACKET_SIZE ;
mbed_official 133:d4dda5c437f0 500 hpcd->Instance->GUSBCFG |= (USB_OTG_GUSBCFG_TRDT_0 | USB_OTG_GUSBCFG_TRDT_2);
mbed_official 133:d4dda5c437f0 501 }
mbed_official 133:d4dda5c437f0 502
mbed_official 133:d4dda5c437f0 503 HAL_PCD_ResetCallback(hpcd);
mbed_official 133:d4dda5c437f0 504
mbed_official 133:d4dda5c437f0 505 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
mbed_official 133:d4dda5c437f0 506 }
mbed_official 133:d4dda5c437f0 507
mbed_official 133:d4dda5c437f0 508
mbed_official 133:d4dda5c437f0 509 /* Handle RxQLevel Interrupt */
mbed_official 133:d4dda5c437f0 510 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
mbed_official 133:d4dda5c437f0 511 {
mbed_official 133:d4dda5c437f0 512 USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
mbed_official 133:d4dda5c437f0 513 temp = USBx->GRXSTSP;
mbed_official 133:d4dda5c437f0 514 ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
mbed_official 133:d4dda5c437f0 515
mbed_official 133:d4dda5c437f0 516 if(((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
mbed_official 133:d4dda5c437f0 517 {
mbed_official 133:d4dda5c437f0 518 if((temp & USB_OTG_GRXSTSP_BCNT) != 0)
mbed_official 133:d4dda5c437f0 519 {
mbed_official 133:d4dda5c437f0 520 USB_ReadPacket(USBx, ep->xfer_buff, (temp & USB_OTG_GRXSTSP_BCNT) >> 4);
mbed_official 133:d4dda5c437f0 521 ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
mbed_official 133:d4dda5c437f0 522 ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
mbed_official 133:d4dda5c437f0 523 }
mbed_official 133:d4dda5c437f0 524 }
mbed_official 133:d4dda5c437f0 525 else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
mbed_official 133:d4dda5c437f0 526 {
mbed_official 133:d4dda5c437f0 527 USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8);
mbed_official 133:d4dda5c437f0 528 ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
mbed_official 133:d4dda5c437f0 529 }
mbed_official 133:d4dda5c437f0 530 USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
mbed_official 133:d4dda5c437f0 531 }
mbed_official 133:d4dda5c437f0 532
mbed_official 133:d4dda5c437f0 533 /* Handle SOF Interrupt */
mbed_official 133:d4dda5c437f0 534 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
mbed_official 133:d4dda5c437f0 535 {
mbed_official 133:d4dda5c437f0 536 HAL_PCD_SOFCallback(hpcd);
mbed_official 133:d4dda5c437f0 537 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SOF);
mbed_official 133:d4dda5c437f0 538 }
mbed_official 133:d4dda5c437f0 539
mbed_official 133:d4dda5c437f0 540 /* Handle Incomplete ISO IN Interrupt */
mbed_official 133:d4dda5c437f0 541 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
mbed_official 133:d4dda5c437f0 542 {
mbed_official 133:d4dda5c437f0 543 HAL_PCD_ISOINIncompleteCallback(hpcd, epnum);
mbed_official 133:d4dda5c437f0 544 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR);
mbed_official 133:d4dda5c437f0 545 }
mbed_official 133:d4dda5c437f0 546
mbed_official 133:d4dda5c437f0 547 /* Handle Incomplete ISO OUT Interrupt */
mbed_official 133:d4dda5c437f0 548 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
mbed_official 133:d4dda5c437f0 549 {
mbed_official 133:d4dda5c437f0 550 HAL_PCD_ISOOUTIncompleteCallback(hpcd, epnum);
mbed_official 133:d4dda5c437f0 551 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
mbed_official 133:d4dda5c437f0 552 }
mbed_official 133:d4dda5c437f0 553
mbed_official 133:d4dda5c437f0 554 /* Handle Connection event Interrupt */
mbed_official 133:d4dda5c437f0 555 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT))
mbed_official 133:d4dda5c437f0 556 {
mbed_official 133:d4dda5c437f0 557 HAL_PCD_ConnectCallback(hpcd);
mbed_official 133:d4dda5c437f0 558 __HAL_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT);
mbed_official 133:d4dda5c437f0 559 }
mbed_official 133:d4dda5c437f0 560
mbed_official 133:d4dda5c437f0 561 /* Handle Disconnection event Interrupt */
mbed_official 133:d4dda5c437f0 562 if(__HAL_GET_FLAG(hpcd, USB_OTG_GINTSTS_OTGINT))
mbed_official 133:d4dda5c437f0 563 {
mbed_official 133:d4dda5c437f0 564 temp = hpcd->Instance->GOTGINT;
mbed_official 133:d4dda5c437f0 565
mbed_official 133:d4dda5c437f0 566 if((temp & USB_OTG_GOTGINT_SEDET) == USB_OTG_GOTGINT_SEDET)
mbed_official 133:d4dda5c437f0 567 {
mbed_official 133:d4dda5c437f0 568 HAL_PCD_DisconnectCallback(hpcd);
mbed_official 133:d4dda5c437f0 569 }
mbed_official 133:d4dda5c437f0 570 hpcd->Instance->GOTGINT |= temp;
mbed_official 133:d4dda5c437f0 571 }
mbed_official 133:d4dda5c437f0 572 }
mbed_official 133:d4dda5c437f0 573 }
mbed_official 133:d4dda5c437f0 574
mbed_official 133:d4dda5c437f0 575 /**
mbed_official 133:d4dda5c437f0 576 * @brief Data out stage callbacks
mbed_official 133:d4dda5c437f0 577 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 578 * @retval None
mbed_official 133:d4dda5c437f0 579 */
mbed_official 133:d4dda5c437f0 580 __weak void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
mbed_official 133:d4dda5c437f0 581 {
mbed_official 133:d4dda5c437f0 582 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 583 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 584 */
mbed_official 133:d4dda5c437f0 585 }
mbed_official 133:d4dda5c437f0 586
mbed_official 133:d4dda5c437f0 587 /**
mbed_official 133:d4dda5c437f0 588 * @brief Data IN stage callbacks
mbed_official 133:d4dda5c437f0 589 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 590 * @retval None
mbed_official 133:d4dda5c437f0 591 */
mbed_official 133:d4dda5c437f0 592 __weak void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
mbed_official 133:d4dda5c437f0 593 {
mbed_official 133:d4dda5c437f0 594 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 595 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 596 */
mbed_official 133:d4dda5c437f0 597 }
mbed_official 133:d4dda5c437f0 598 /**
mbed_official 133:d4dda5c437f0 599 * @brief Setup stage callback
mbed_official 242:7074e42da0b2 600 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 601 * @retval None
mbed_official 133:d4dda5c437f0 602 */
mbed_official 133:d4dda5c437f0 603 __weak void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 604 {
mbed_official 133:d4dda5c437f0 605 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 606 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 607 */
mbed_official 133:d4dda5c437f0 608 }
mbed_official 133:d4dda5c437f0 609
mbed_official 133:d4dda5c437f0 610 /**
mbed_official 133:d4dda5c437f0 611 * @brief USB Start Of Frame callbacks
mbed_official 133:d4dda5c437f0 612 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 613 * @retval None
mbed_official 133:d4dda5c437f0 614 */
mbed_official 133:d4dda5c437f0 615 __weak void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 616 {
mbed_official 133:d4dda5c437f0 617 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 618 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 619 */
mbed_official 133:d4dda5c437f0 620 }
mbed_official 133:d4dda5c437f0 621
mbed_official 133:d4dda5c437f0 622 /**
mbed_official 133:d4dda5c437f0 623 * @brief USB Reset callbacks
mbed_official 133:d4dda5c437f0 624 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 625 * @retval None
mbed_official 133:d4dda5c437f0 626 */
mbed_official 133:d4dda5c437f0 627 __weak void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 628 {
mbed_official 133:d4dda5c437f0 629 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 630 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 631 */
mbed_official 133:d4dda5c437f0 632 }
mbed_official 133:d4dda5c437f0 633
mbed_official 133:d4dda5c437f0 634
mbed_official 133:d4dda5c437f0 635 /**
mbed_official 133:d4dda5c437f0 636 * @brief Suspend event callbacks
mbed_official 133:d4dda5c437f0 637 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 638 * @retval None
mbed_official 133:d4dda5c437f0 639 */
mbed_official 133:d4dda5c437f0 640 __weak void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 641 {
mbed_official 133:d4dda5c437f0 642 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 643 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 644 */
mbed_official 133:d4dda5c437f0 645 }
mbed_official 133:d4dda5c437f0 646
mbed_official 133:d4dda5c437f0 647 /**
mbed_official 133:d4dda5c437f0 648 * @brief Resume event callbacks
mbed_official 133:d4dda5c437f0 649 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 650 * @retval None
mbed_official 133:d4dda5c437f0 651 */
mbed_official 133:d4dda5c437f0 652 __weak void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 653 {
mbed_official 133:d4dda5c437f0 654 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 655 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 656 */
mbed_official 133:d4dda5c437f0 657 }
mbed_official 133:d4dda5c437f0 658
mbed_official 133:d4dda5c437f0 659 /**
mbed_official 133:d4dda5c437f0 660 * @brief Incomplete ISO OUT callbacks
mbed_official 133:d4dda5c437f0 661 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 662 * @retval None
mbed_official 133:d4dda5c437f0 663 */
mbed_official 133:d4dda5c437f0 664 __weak void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
mbed_official 133:d4dda5c437f0 665 {
mbed_official 133:d4dda5c437f0 666 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 667 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 668 */
mbed_official 133:d4dda5c437f0 669 }
mbed_official 133:d4dda5c437f0 670
mbed_official 133:d4dda5c437f0 671 /**
mbed_official 133:d4dda5c437f0 672 * @brief Incomplete ISO IN callbacks
mbed_official 133:d4dda5c437f0 673 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 674 * @retval None
mbed_official 133:d4dda5c437f0 675 */
mbed_official 133:d4dda5c437f0 676 __weak void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
mbed_official 133:d4dda5c437f0 677 {
mbed_official 133:d4dda5c437f0 678 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 679 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 680 */
mbed_official 133:d4dda5c437f0 681 }
mbed_official 133:d4dda5c437f0 682
mbed_official 133:d4dda5c437f0 683 /**
mbed_official 133:d4dda5c437f0 684 * @brief Connection event callbacks
mbed_official 133:d4dda5c437f0 685 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 686 * @retval None
mbed_official 133:d4dda5c437f0 687 */
mbed_official 133:d4dda5c437f0 688 __weak void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 689 {
mbed_official 133:d4dda5c437f0 690 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 691 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 692 */
mbed_official 133:d4dda5c437f0 693 }
mbed_official 133:d4dda5c437f0 694
mbed_official 133:d4dda5c437f0 695 /**
mbed_official 133:d4dda5c437f0 696 * @brief Disconnection event callbacks
mbed_official 242:7074e42da0b2 697 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 698 * @retval None
mbed_official 133:d4dda5c437f0 699 */
mbed_official 133:d4dda5c437f0 700 __weak void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 701 {
mbed_official 133:d4dda5c437f0 702 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 703 the HAL_PCD_DataOutStageCallback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 704 */
mbed_official 133:d4dda5c437f0 705 }
mbed_official 133:d4dda5c437f0 706
mbed_official 133:d4dda5c437f0 707 /**
mbed_official 133:d4dda5c437f0 708 * @}
mbed_official 133:d4dda5c437f0 709 */
mbed_official 133:d4dda5c437f0 710
mbed_official 133:d4dda5c437f0 711 /** @defgroup PCD_Group3 Peripheral Control functions
mbed_official 133:d4dda5c437f0 712 * @brief management functions
mbed_official 133:d4dda5c437f0 713 *
mbed_official 133:d4dda5c437f0 714 @verbatim
mbed_official 133:d4dda5c437f0 715 ===============================================================================
mbed_official 133:d4dda5c437f0 716 ##### Peripheral Control functions #####
mbed_official 133:d4dda5c437f0 717 ===============================================================================
mbed_official 133:d4dda5c437f0 718 [..]
mbed_official 133:d4dda5c437f0 719 This subsection provides a set of functions allowing to control the PCD data
mbed_official 133:d4dda5c437f0 720 transfers.
mbed_official 133:d4dda5c437f0 721
mbed_official 133:d4dda5c437f0 722 @endverbatim
mbed_official 133:d4dda5c437f0 723 * @{
mbed_official 133:d4dda5c437f0 724 */
mbed_official 133:d4dda5c437f0 725
mbed_official 133:d4dda5c437f0 726 /**
mbed_official 133:d4dda5c437f0 727 * @brief Send an amount of data in blocking mode
mbed_official 133:d4dda5c437f0 728 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 729 * @retval HAL status
mbed_official 133:d4dda5c437f0 730 */
mbed_official 133:d4dda5c437f0 731 HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 732 {
mbed_official 133:d4dda5c437f0 733 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 734 USB_DevConnect(hpcd->Instance);
mbed_official 133:d4dda5c437f0 735 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 736 return HAL_OK;
mbed_official 133:d4dda5c437f0 737 }
mbed_official 133:d4dda5c437f0 738
mbed_official 133:d4dda5c437f0 739 /**
mbed_official 133:d4dda5c437f0 740 * @brief Send an amount of data in blocking mode
mbed_official 133:d4dda5c437f0 741 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 742 * @retval HAL status
mbed_official 133:d4dda5c437f0 743 */
mbed_official 133:d4dda5c437f0 744 HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 745 {
mbed_official 133:d4dda5c437f0 746 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 747 USB_DevDisconnect(hpcd->Instance);
mbed_official 133:d4dda5c437f0 748 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 749 return HAL_OK;
mbed_official 133:d4dda5c437f0 750 }
mbed_official 133:d4dda5c437f0 751
mbed_official 133:d4dda5c437f0 752 /**
mbed_official 133:d4dda5c437f0 753 * @brief Set the USB Device address
mbed_official 133:d4dda5c437f0 754 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 755 * @param address: new device address
mbed_official 133:d4dda5c437f0 756 * @retval HAL status
mbed_official 133:d4dda5c437f0 757 */
mbed_official 133:d4dda5c437f0 758 HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address)
mbed_official 133:d4dda5c437f0 759 {
mbed_official 133:d4dda5c437f0 760 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 761 USB_SetDevAddress(hpcd->Instance, address);
mbed_official 133:d4dda5c437f0 762 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 763 return HAL_OK;
mbed_official 133:d4dda5c437f0 764 }
mbed_official 133:d4dda5c437f0 765 /**
mbed_official 133:d4dda5c437f0 766 * @brief Open and configure an endpoint
mbed_official 133:d4dda5c437f0 767 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 768 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 769 * @param ep_mps: endpoint max packert size
mbed_official 133:d4dda5c437f0 770 * @param ep_type: endpoint type
mbed_official 133:d4dda5c437f0 771 * @retval HAL status
mbed_official 133:d4dda5c437f0 772 */
mbed_official 133:d4dda5c437f0 773 HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type)
mbed_official 133:d4dda5c437f0 774 {
mbed_official 133:d4dda5c437f0 775 HAL_StatusTypeDef ret = HAL_OK;
mbed_official 133:d4dda5c437f0 776 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 777
mbed_official 133:d4dda5c437f0 778 if ((ep_addr & 0x80) == 0x80)
mbed_official 133:d4dda5c437f0 779 {
mbed_official 133:d4dda5c437f0 780 ep = &hpcd->IN_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 781 }
mbed_official 133:d4dda5c437f0 782 else
mbed_official 133:d4dda5c437f0 783 {
mbed_official 133:d4dda5c437f0 784 ep = &hpcd->OUT_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 785 }
mbed_official 133:d4dda5c437f0 786 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 787
mbed_official 133:d4dda5c437f0 788 ep->is_in = (0x80 & ep_addr) != 0;
mbed_official 133:d4dda5c437f0 789 ep->maxpacket = ep_mps;
mbed_official 133:d4dda5c437f0 790 ep->type = ep_type;
mbed_official 133:d4dda5c437f0 791 if (ep->is_in)
mbed_official 133:d4dda5c437f0 792 {
mbed_official 133:d4dda5c437f0 793 /* Assign a Tx FIFO */
mbed_official 133:d4dda5c437f0 794 ep->tx_fifo_num = ep->num;
mbed_official 133:d4dda5c437f0 795 }
mbed_official 133:d4dda5c437f0 796 /* Set initial data PID. */
mbed_official 133:d4dda5c437f0 797 if (ep_type == EP_TYPE_BULK )
mbed_official 133:d4dda5c437f0 798 {
mbed_official 133:d4dda5c437f0 799 ep->data_pid_start = 0;
mbed_official 133:d4dda5c437f0 800 }
mbed_official 133:d4dda5c437f0 801
mbed_official 133:d4dda5c437f0 802 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 803 USB_ActivateEndpoint(hpcd->Instance , ep);
mbed_official 133:d4dda5c437f0 804 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 805 return ret;
mbed_official 133:d4dda5c437f0 806 }
mbed_official 133:d4dda5c437f0 807
mbed_official 133:d4dda5c437f0 808
mbed_official 133:d4dda5c437f0 809 /**
mbed_official 133:d4dda5c437f0 810 * @brief Deactivate an endpoint
mbed_official 133:d4dda5c437f0 811 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 812 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 813 * @retval HAL status
mbed_official 133:d4dda5c437f0 814 */
mbed_official 133:d4dda5c437f0 815 HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
mbed_official 133:d4dda5c437f0 816 {
mbed_official 133:d4dda5c437f0 817 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 818
mbed_official 133:d4dda5c437f0 819 if ((ep_addr & 0x80) == 0x80)
mbed_official 133:d4dda5c437f0 820 {
mbed_official 133:d4dda5c437f0 821 ep = &hpcd->IN_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 822 }
mbed_official 133:d4dda5c437f0 823 else
mbed_official 133:d4dda5c437f0 824 {
mbed_official 133:d4dda5c437f0 825 ep = &hpcd->OUT_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 826 }
mbed_official 133:d4dda5c437f0 827 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 828
mbed_official 133:d4dda5c437f0 829 ep->is_in = (0x80 & ep_addr) != 0;
mbed_official 133:d4dda5c437f0 830
mbed_official 133:d4dda5c437f0 831 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 832 USB_DeactivateEndpoint(hpcd->Instance , ep);
mbed_official 133:d4dda5c437f0 833 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 834 return HAL_OK;
mbed_official 133:d4dda5c437f0 835 }
mbed_official 133:d4dda5c437f0 836
mbed_official 133:d4dda5c437f0 837
mbed_official 133:d4dda5c437f0 838 /**
mbed_official 133:d4dda5c437f0 839 * @brief Receive an amount of data
mbed_official 133:d4dda5c437f0 840 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 841 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 842 * @param pBuf: pointer to the reception buffer
mbed_official 133:d4dda5c437f0 843 * @param len: amount of data to be received
mbed_official 133:d4dda5c437f0 844 * @retval HAL status
mbed_official 133:d4dda5c437f0 845 */
mbed_official 133:d4dda5c437f0 846 HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
mbed_official 133:d4dda5c437f0 847 {
mbed_official 133:d4dda5c437f0 848
mbed_official 133:d4dda5c437f0 849 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 850
mbed_official 133:d4dda5c437f0 851 ep = &hpcd->OUT_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 852
mbed_official 133:d4dda5c437f0 853 /*setup and start the Xfer */
mbed_official 133:d4dda5c437f0 854 ep->xfer_buff = pBuf;
mbed_official 133:d4dda5c437f0 855 ep->xfer_len = len;
mbed_official 133:d4dda5c437f0 856 ep->xfer_count = 0;
mbed_official 133:d4dda5c437f0 857 ep->is_in = 0;
mbed_official 133:d4dda5c437f0 858 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 859
mbed_official 133:d4dda5c437f0 860 if (hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 861 {
mbed_official 133:d4dda5c437f0 862 ep->dma_addr = (uint32_t)pBuf;
mbed_official 133:d4dda5c437f0 863 }
mbed_official 133:d4dda5c437f0 864
mbed_official 133:d4dda5c437f0 865 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 866
mbed_official 133:d4dda5c437f0 867 if ((ep_addr & 0x7F) == 0 )
mbed_official 133:d4dda5c437f0 868 {
mbed_official 133:d4dda5c437f0 869 USB_EP0StartXfer(hpcd->Instance , ep, hpcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 870 }
mbed_official 133:d4dda5c437f0 871 else
mbed_official 133:d4dda5c437f0 872 {
mbed_official 133:d4dda5c437f0 873 USB_EPStartXfer(hpcd->Instance , ep, hpcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 874 }
mbed_official 133:d4dda5c437f0 875 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 876
mbed_official 133:d4dda5c437f0 877 return HAL_OK;
mbed_official 133:d4dda5c437f0 878 }
mbed_official 133:d4dda5c437f0 879
mbed_official 133:d4dda5c437f0 880 /**
mbed_official 133:d4dda5c437f0 881 * @brief Get Received Data Size
mbed_official 133:d4dda5c437f0 882 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 883 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 884 * @retval Data Size
mbed_official 133:d4dda5c437f0 885 */
mbed_official 133:d4dda5c437f0 886 uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
mbed_official 133:d4dda5c437f0 887 {
mbed_official 133:d4dda5c437f0 888 return hpcd->OUT_ep[ep_addr & 0x7F].xfer_count;
mbed_official 133:d4dda5c437f0 889 }
mbed_official 133:d4dda5c437f0 890 /**
mbed_official 133:d4dda5c437f0 891 * @brief Send an amount of data
mbed_official 133:d4dda5c437f0 892 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 893 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 894 * @param pBuf: pointer to the transmission buffer
mbed_official 133:d4dda5c437f0 895 * @param len: amount of data to be sent
mbed_official 133:d4dda5c437f0 896 * @retval HAL status
mbed_official 133:d4dda5c437f0 897 */
mbed_official 133:d4dda5c437f0 898 HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
mbed_official 133:d4dda5c437f0 899 {
mbed_official 133:d4dda5c437f0 900 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 901
mbed_official 133:d4dda5c437f0 902 ep = &hpcd->IN_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 903
mbed_official 133:d4dda5c437f0 904 /*setup and start the Xfer */
mbed_official 133:d4dda5c437f0 905 ep->xfer_buff = pBuf;
mbed_official 133:d4dda5c437f0 906 ep->xfer_len = len;
mbed_official 133:d4dda5c437f0 907 ep->xfer_count = 0;
mbed_official 133:d4dda5c437f0 908 ep->is_in = 1;
mbed_official 133:d4dda5c437f0 909 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 910
mbed_official 133:d4dda5c437f0 911 if (hpcd->Init.dma_enable == 1)
mbed_official 133:d4dda5c437f0 912 {
mbed_official 133:d4dda5c437f0 913 ep->dma_addr = (uint32_t)pBuf;
mbed_official 133:d4dda5c437f0 914 }
mbed_official 133:d4dda5c437f0 915
mbed_official 133:d4dda5c437f0 916 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 917
mbed_official 133:d4dda5c437f0 918 if ((ep_addr & 0x7F) == 0 )
mbed_official 133:d4dda5c437f0 919 {
mbed_official 133:d4dda5c437f0 920 USB_EP0StartXfer(hpcd->Instance , ep, hpcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 921 }
mbed_official 133:d4dda5c437f0 922 else
mbed_official 133:d4dda5c437f0 923 {
mbed_official 133:d4dda5c437f0 924 USB_EPStartXfer(hpcd->Instance , ep, hpcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 925 }
mbed_official 133:d4dda5c437f0 926
mbed_official 133:d4dda5c437f0 927 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 928
mbed_official 133:d4dda5c437f0 929 return HAL_OK;
mbed_official 133:d4dda5c437f0 930 }
mbed_official 133:d4dda5c437f0 931
mbed_official 133:d4dda5c437f0 932 /**
mbed_official 133:d4dda5c437f0 933 * @brief Set a STALL condition over an endpoint
mbed_official 133:d4dda5c437f0 934 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 935 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 936 * @retval HAL status
mbed_official 133:d4dda5c437f0 937 */
mbed_official 133:d4dda5c437f0 938 HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
mbed_official 133:d4dda5c437f0 939 {
mbed_official 133:d4dda5c437f0 940 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 941
mbed_official 133:d4dda5c437f0 942 if ((0x80 & ep_addr) == 0x80)
mbed_official 133:d4dda5c437f0 943 {
mbed_official 133:d4dda5c437f0 944 ep = &hpcd->IN_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 945 }
mbed_official 133:d4dda5c437f0 946 else
mbed_official 133:d4dda5c437f0 947 {
mbed_official 133:d4dda5c437f0 948 ep = &hpcd->OUT_ep[ep_addr];
mbed_official 133:d4dda5c437f0 949 }
mbed_official 133:d4dda5c437f0 950
mbed_official 133:d4dda5c437f0 951 ep->is_stall = 1;
mbed_official 133:d4dda5c437f0 952 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 953 ep->is_in = ((ep_addr & 0x80) == 0x80);
mbed_official 133:d4dda5c437f0 954
mbed_official 133:d4dda5c437f0 955
mbed_official 133:d4dda5c437f0 956 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 957 USB_EPSetStall(hpcd->Instance , ep);
mbed_official 133:d4dda5c437f0 958 if((ep_addr & 0x7F) == 0)
mbed_official 133:d4dda5c437f0 959 {
mbed_official 133:d4dda5c437f0 960 USB_EP0_OutStart(hpcd->Instance, hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup);
mbed_official 133:d4dda5c437f0 961 }
mbed_official 133:d4dda5c437f0 962 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 963
mbed_official 133:d4dda5c437f0 964 return HAL_OK;
mbed_official 133:d4dda5c437f0 965 }
mbed_official 133:d4dda5c437f0 966
mbed_official 133:d4dda5c437f0 967 /**
mbed_official 133:d4dda5c437f0 968 * @brief Clear a STALL condition over in an endpoint
mbed_official 133:d4dda5c437f0 969 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 970 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 971 * @retval HAL status
mbed_official 133:d4dda5c437f0 972 */
mbed_official 133:d4dda5c437f0 973 HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
mbed_official 133:d4dda5c437f0 974 {
mbed_official 133:d4dda5c437f0 975 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 976
mbed_official 133:d4dda5c437f0 977 if ((0x80 & ep_addr) == 0x80)
mbed_official 133:d4dda5c437f0 978 {
mbed_official 133:d4dda5c437f0 979 ep = &hpcd->IN_ep[ep_addr & 0x7F];
mbed_official 133:d4dda5c437f0 980 }
mbed_official 133:d4dda5c437f0 981 else
mbed_official 133:d4dda5c437f0 982 {
mbed_official 133:d4dda5c437f0 983 ep = &hpcd->OUT_ep[ep_addr];
mbed_official 133:d4dda5c437f0 984 }
mbed_official 133:d4dda5c437f0 985
mbed_official 133:d4dda5c437f0 986 ep->is_stall = 0;
mbed_official 133:d4dda5c437f0 987 ep->num = ep_addr & 0x7F;
mbed_official 133:d4dda5c437f0 988 ep->is_in = ((ep_addr & 0x80) == 0x80);
mbed_official 133:d4dda5c437f0 989
mbed_official 133:d4dda5c437f0 990 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 991 USB_EPClearStall(hpcd->Instance , ep);
mbed_official 133:d4dda5c437f0 992 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 993
mbed_official 133:d4dda5c437f0 994 return HAL_OK;
mbed_official 133:d4dda5c437f0 995 }
mbed_official 133:d4dda5c437f0 996
mbed_official 133:d4dda5c437f0 997 /**
mbed_official 133:d4dda5c437f0 998 * @brief Flush an endpoint
mbed_official 133:d4dda5c437f0 999 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 1000 * @param ep_addr: endpoint address
mbed_official 133:d4dda5c437f0 1001 * @retval HAL status
mbed_official 133:d4dda5c437f0 1002 */
mbed_official 133:d4dda5c437f0 1003 HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
mbed_official 133:d4dda5c437f0 1004 {
mbed_official 133:d4dda5c437f0 1005 __HAL_LOCK(hpcd);
mbed_official 133:d4dda5c437f0 1006
mbed_official 133:d4dda5c437f0 1007 if ((ep_addr & 0x80) == 0x80)
mbed_official 133:d4dda5c437f0 1008 {
mbed_official 133:d4dda5c437f0 1009 USB_FlushTxFifo(hpcd->Instance, ep_addr & 0x7F);
mbed_official 133:d4dda5c437f0 1010 }
mbed_official 133:d4dda5c437f0 1011 else
mbed_official 133:d4dda5c437f0 1012 {
mbed_official 133:d4dda5c437f0 1013 USB_FlushRxFifo(hpcd->Instance);
mbed_official 133:d4dda5c437f0 1014 }
mbed_official 133:d4dda5c437f0 1015
mbed_official 133:d4dda5c437f0 1016 __HAL_UNLOCK(hpcd);
mbed_official 133:d4dda5c437f0 1017
mbed_official 133:d4dda5c437f0 1018 return HAL_OK;
mbed_official 133:d4dda5c437f0 1019 }
mbed_official 133:d4dda5c437f0 1020
mbed_official 133:d4dda5c437f0 1021 /**
mbed_official 133:d4dda5c437f0 1022 * @brief Update FIFO configuration
mbed_official 133:d4dda5c437f0 1023 * @param hpcd: PCD handle
mbed_official 242:7074e42da0b2 1024 * @retval HAL status
mbed_official 133:d4dda5c437f0 1025 */
mbed_official 133:d4dda5c437f0 1026 HAL_StatusTypeDef HAL_PCD_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
mbed_official 133:d4dda5c437f0 1027 {
mbed_official 133:d4dda5c437f0 1028 uint8_t i = 0;
mbed_official 133:d4dda5c437f0 1029 uint32_t Tx_Offset = 0;
mbed_official 133:d4dda5c437f0 1030
mbed_official 133:d4dda5c437f0 1031
mbed_official 133:d4dda5c437f0 1032 /* TXn min size = 16 words. (n : Transmit FIFO index)
mbed_official 133:d4dda5c437f0 1033 * When a TxFIFO is not used, the Configuration should be as follows:
mbed_official 133:d4dda5c437f0 1034 * case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes)
mbed_official 133:d4dda5c437f0 1035 * --> Txm can use the space allocated for Txn.
mbed_official 133:d4dda5c437f0 1036 * case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes)
mbed_official 133:d4dda5c437f0 1037 * --> Txn should be configured with the minimum space of 16 words
mbed_official 133:d4dda5c437f0 1038 * The FIFO is used optimally when used TxFIFOs are allocated in the top
mbed_official 133:d4dda5c437f0 1039 * of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
mbed_official 133:d4dda5c437f0 1040 * When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
mbed_official 133:d4dda5c437f0 1041
mbed_official 133:d4dda5c437f0 1042 Tx_Offset = hpcd->Instance->GRXFSIZ;
mbed_official 133:d4dda5c437f0 1043
mbed_official 133:d4dda5c437f0 1044 if(fifo == 0)
mbed_official 133:d4dda5c437f0 1045 {
mbed_official 133:d4dda5c437f0 1046 hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16) | Tx_Offset;
mbed_official 133:d4dda5c437f0 1047 }
mbed_official 133:d4dda5c437f0 1048 else
mbed_official 133:d4dda5c437f0 1049 {
mbed_official 133:d4dda5c437f0 1050 Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
mbed_official 133:d4dda5c437f0 1051 for (i = 0; i < (fifo - 1); i++)
mbed_official 133:d4dda5c437f0 1052 {
mbed_official 133:d4dda5c437f0 1053 Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
mbed_official 133:d4dda5c437f0 1054 }
mbed_official 133:d4dda5c437f0 1055
mbed_official 133:d4dda5c437f0 1056 /* Multiply Tx_Size by 2 to get higher performance */
mbed_official 133:d4dda5c437f0 1057 hpcd->Instance->DIEPTXF[fifo - 1] = (size << 16) | Tx_Offset;
mbed_official 133:d4dda5c437f0 1058
mbed_official 133:d4dda5c437f0 1059 }
mbed_official 133:d4dda5c437f0 1060
mbed_official 133:d4dda5c437f0 1061 return HAL_OK;
mbed_official 133:d4dda5c437f0 1062 }
mbed_official 133:d4dda5c437f0 1063
mbed_official 133:d4dda5c437f0 1064
mbed_official 133:d4dda5c437f0 1065 /**
mbed_official 133:d4dda5c437f0 1066 * @brief Update FIFO configuration
mbed_official 133:d4dda5c437f0 1067 * @param hpcd: PCD handle
mbed_official 242:7074e42da0b2 1068 * @retval HAL status
mbed_official 133:d4dda5c437f0 1069 */
mbed_official 133:d4dda5c437f0 1070 HAL_StatusTypeDef HAL_PCD_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
mbed_official 133:d4dda5c437f0 1071 {
mbed_official 133:d4dda5c437f0 1072
mbed_official 133:d4dda5c437f0 1073 hpcd->Instance->GRXFSIZ = size;
mbed_official 133:d4dda5c437f0 1074
mbed_official 133:d4dda5c437f0 1075 return HAL_OK;
mbed_official 133:d4dda5c437f0 1076 }
mbed_official 133:d4dda5c437f0 1077
mbed_official 133:d4dda5c437f0 1078
mbed_official 133:d4dda5c437f0 1079 /**
mbed_official 133:d4dda5c437f0 1080 * @brief HAL_PCD_ActiveRemoteWakeup : active remote wakeup signalling
mbed_official 133:d4dda5c437f0 1081 * @param hpcd: PCD handle
mbed_official 242:7074e42da0b2 1082 * @retval HAL status
mbed_official 133:d4dda5c437f0 1083 */
mbed_official 133:d4dda5c437f0 1084 HAL_StatusTypeDef HAL_PCD_ActiveRemoteWakeup(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 1085 {
mbed_official 133:d4dda5c437f0 1086 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
mbed_official 133:d4dda5c437f0 1087
mbed_official 133:d4dda5c437f0 1088 if((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS)
mbed_official 133:d4dda5c437f0 1089 {
mbed_official 133:d4dda5c437f0 1090 /* active Remote wakeup signaling */
mbed_official 133:d4dda5c437f0 1091 USBx_DEVICE->DCTL |= USB_OTG_DCTL_RWUSIG;
mbed_official 133:d4dda5c437f0 1092 }
mbed_official 133:d4dda5c437f0 1093 return HAL_OK;
mbed_official 133:d4dda5c437f0 1094 }
mbed_official 133:d4dda5c437f0 1095
mbed_official 133:d4dda5c437f0 1096 /**
mbed_official 133:d4dda5c437f0 1097 * @brief HAL_PCD_DeActiveRemoteWakeup : de-active remote wakeup signalling
mbed_official 133:d4dda5c437f0 1098 * @param hpcd: PCD handle
mbed_official 242:7074e42da0b2 1099 * @retval HAL status
mbed_official 133:d4dda5c437f0 1100 */
mbed_official 133:d4dda5c437f0 1101 HAL_StatusTypeDef HAL_PCD_DeActiveRemoteWakeup(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 1102 {
mbed_official 133:d4dda5c437f0 1103 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
mbed_official 133:d4dda5c437f0 1104
mbed_official 133:d4dda5c437f0 1105 /* active Remote wakeup signaling */
mbed_official 133:d4dda5c437f0 1106 USBx_DEVICE->DCTL &= ~(USB_OTG_DCTL_RWUSIG);
mbed_official 133:d4dda5c437f0 1107 return HAL_OK;
mbed_official 133:d4dda5c437f0 1108 }
mbed_official 133:d4dda5c437f0 1109 /**
mbed_official 133:d4dda5c437f0 1110 * @}
mbed_official 133:d4dda5c437f0 1111 */
mbed_official 133:d4dda5c437f0 1112
mbed_official 133:d4dda5c437f0 1113 /** @defgroup PCD_Group4 Peripheral State functions
mbed_official 133:d4dda5c437f0 1114 * @brief Peripheral State functions
mbed_official 133:d4dda5c437f0 1115 *
mbed_official 133:d4dda5c437f0 1116 @verbatim
mbed_official 133:d4dda5c437f0 1117 ===============================================================================
mbed_official 133:d4dda5c437f0 1118 ##### Peripheral State functions #####
mbed_official 133:d4dda5c437f0 1119 ===============================================================================
mbed_official 133:d4dda5c437f0 1120 [..]
mbed_official 242:7074e42da0b2 1121 This subsection permits to get in run-time the status of the peripheral
mbed_official 133:d4dda5c437f0 1122 and the data flow.
mbed_official 133:d4dda5c437f0 1123
mbed_official 133:d4dda5c437f0 1124 @endverbatim
mbed_official 133:d4dda5c437f0 1125 * @{
mbed_official 133:d4dda5c437f0 1126 */
mbed_official 133:d4dda5c437f0 1127
mbed_official 133:d4dda5c437f0 1128 /**
mbed_official 133:d4dda5c437f0 1129 * @brief Return the PCD state
mbed_official 242:7074e42da0b2 1130 * @param hpcd: PCD handle
mbed_official 133:d4dda5c437f0 1131 * @retval HAL state
mbed_official 133:d4dda5c437f0 1132 */
mbed_official 133:d4dda5c437f0 1133 PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd)
mbed_official 133:d4dda5c437f0 1134 {
mbed_official 133:d4dda5c437f0 1135 return hpcd->State;
mbed_official 133:d4dda5c437f0 1136 }
mbed_official 133:d4dda5c437f0 1137 /**
mbed_official 133:d4dda5c437f0 1138 * @}
mbed_official 133:d4dda5c437f0 1139 */
mbed_official 133:d4dda5c437f0 1140
mbed_official 133:d4dda5c437f0 1141 /**
mbed_official 133:d4dda5c437f0 1142 * @brief DCD_WriteEmptyTxFifo
mbed_official 133:d4dda5c437f0 1143 * check FIFO for the next packet to be loaded
mbed_official 133:d4dda5c437f0 1144 * @param hpcd: PCD handle
mbed_official 242:7074e42da0b2 1145 * @retval HAL status
mbed_official 133:d4dda5c437f0 1146 */
mbed_official 133:d4dda5c437f0 1147 static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum)
mbed_official 133:d4dda5c437f0 1148 {
mbed_official 133:d4dda5c437f0 1149 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
mbed_official 133:d4dda5c437f0 1150 USB_OTG_EPTypeDef *ep;
mbed_official 133:d4dda5c437f0 1151 int32_t len = 0;
mbed_official 133:d4dda5c437f0 1152 uint32_t len32b;
mbed_official 133:d4dda5c437f0 1153 uint32_t fifoemptymsk = 0;
mbed_official 133:d4dda5c437f0 1154
mbed_official 133:d4dda5c437f0 1155 ep = &hpcd->IN_ep[epnum];
mbed_official 133:d4dda5c437f0 1156 len = ep->xfer_len - ep->xfer_count;
mbed_official 133:d4dda5c437f0 1157
mbed_official 133:d4dda5c437f0 1158 if (len > ep->maxpacket)
mbed_official 133:d4dda5c437f0 1159 {
mbed_official 133:d4dda5c437f0 1160 len = ep->maxpacket;
mbed_official 133:d4dda5c437f0 1161 }
mbed_official 133:d4dda5c437f0 1162
mbed_official 133:d4dda5c437f0 1163
mbed_official 133:d4dda5c437f0 1164 len32b = (len + 3) / 4;
mbed_official 133:d4dda5c437f0 1165
mbed_official 133:d4dda5c437f0 1166 while ( (USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) > len32b &&
mbed_official 133:d4dda5c437f0 1167 ep->xfer_count < ep->xfer_len &&
mbed_official 133:d4dda5c437f0 1168 ep->xfer_len != 0)
mbed_official 133:d4dda5c437f0 1169 {
mbed_official 133:d4dda5c437f0 1170 /* Write the FIFO */
mbed_official 133:d4dda5c437f0 1171 len = ep->xfer_len - ep->xfer_count;
mbed_official 133:d4dda5c437f0 1172
mbed_official 133:d4dda5c437f0 1173 if (len > ep->maxpacket)
mbed_official 133:d4dda5c437f0 1174 {
mbed_official 133:d4dda5c437f0 1175 len = ep->maxpacket;
mbed_official 133:d4dda5c437f0 1176 }
mbed_official 133:d4dda5c437f0 1177 len32b = (len + 3) / 4;
mbed_official 133:d4dda5c437f0 1178
mbed_official 133:d4dda5c437f0 1179 USB_WritePacket(USBx, ep->xfer_buff, epnum, len, hpcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 1180
mbed_official 133:d4dda5c437f0 1181 ep->xfer_buff += len;
mbed_official 133:d4dda5c437f0 1182 ep->xfer_count += len;
mbed_official 133:d4dda5c437f0 1183 }
mbed_official 133:d4dda5c437f0 1184
mbed_official 133:d4dda5c437f0 1185 if(len <= 0)
mbed_official 133:d4dda5c437f0 1186 {
mbed_official 133:d4dda5c437f0 1187 fifoemptymsk = 0x1 << epnum;
mbed_official 133:d4dda5c437f0 1188 USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
mbed_official 133:d4dda5c437f0 1189
mbed_official 133:d4dda5c437f0 1190 }
mbed_official 133:d4dda5c437f0 1191
mbed_official 133:d4dda5c437f0 1192 return HAL_OK;
mbed_official 133:d4dda5c437f0 1193 }
mbed_official 133:d4dda5c437f0 1194
mbed_official 133:d4dda5c437f0 1195 /**
mbed_official 133:d4dda5c437f0 1196 * @}
mbed_official 133:d4dda5c437f0 1197 */
mbed_official 133:d4dda5c437f0 1198
mbed_official 133:d4dda5c437f0 1199 #endif /* HAL_PCD_MODULE_ENABLED */
mbed_official 133:d4dda5c437f0 1200 /**
mbed_official 133:d4dda5c437f0 1201 * @}
mbed_official 133:d4dda5c437f0 1202 */
mbed_official 133:d4dda5c437f0 1203
mbed_official 133:d4dda5c437f0 1204 /**
mbed_official 133:d4dda5c437f0 1205 * @}
mbed_official 133:d4dda5c437f0 1206 */
mbed_official 133:d4dda5c437f0 1207
mbed_official 133:d4dda5c437f0 1208 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/