mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Mon Mar 24 17:45:07 2014 +0000
Revision:
133:d4dda5c437f0
Child:
242:7074e42da0b2
Synchronized with git revision 47b961246bed973fe4cb8932781ffc8025b78a61

Full URL: https://github.com/mbedmicro/mbed/commit/47b961246bed973fe4cb8932781ffc8025b78a61/

[STM32F4-Discovery (STM32F407VG)] initial port

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_hcd.c
mbed_official 133:d4dda5c437f0 4 * @author MCD Application Team
mbed_official 133:d4dda5c437f0 5 * @version V1.0.0
mbed_official 133:d4dda5c437f0 6 * @date 18-February-2014
mbed_official 133:d4dda5c437f0 7 * @brief HCD 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 (#)Declare a HCD_HandleTypeDef handle structure, for example:
mbed_official 133:d4dda5c437f0 21 HCD_HandleTypeDef hhcd;
mbed_official 133:d4dda5c437f0 22
mbed_official 133:d4dda5c437f0 23 (#)Fill parameters of Init structure in HCD handle
mbed_official 133:d4dda5c437f0 24
mbed_official 133:d4dda5c437f0 25 (#)Call HAL_HCD_Init() API to initialize the HCD peripheral (Core, Host core, ...)
mbed_official 133:d4dda5c437f0 26
mbed_official 133:d4dda5c437f0 27 (#)Initialize the HCD low level resources through the HAL_HCD_MspInit() API:
mbed_official 133:d4dda5c437f0 28 (##) Enable the HCD/USB Low Level interface clock using
mbed_official 133:d4dda5c437f0 29 (+++) __OTGFS-OTG_CLK_ENABLE()/__OTGHS-OTG_CLK_ENABLE();
mbed_official 133:d4dda5c437f0 30 (+++) __OTGHSULPI_CLK_ENABLE(); (For High Speed Mode)
mbed_official 133:d4dda5c437f0 31
mbed_official 133:d4dda5c437f0 32 (##) Initialize the related GPIO clocks
mbed_official 133:d4dda5c437f0 33 (##) Configure HCD pin-out
mbed_official 133:d4dda5c437f0 34 (##) Configure HCD NVIC interrupt
mbed_official 133:d4dda5c437f0 35
mbed_official 133:d4dda5c437f0 36 (#)Associate the Upper USB Host stack to the HAL HCD Driver:
mbed_official 133:d4dda5c437f0 37 (##) hhcd.pData = phost;
mbed_official 133:d4dda5c437f0 38
mbed_official 133:d4dda5c437f0 39 (#)Enable HCD transmission and reception:
mbed_official 133:d4dda5c437f0 40 (##) HAL_HCD_Start();
mbed_official 133:d4dda5c437f0 41
mbed_official 133:d4dda5c437f0 42 @endverbatim
mbed_official 133:d4dda5c437f0 43 ******************************************************************************
mbed_official 133:d4dda5c437f0 44 * @attention
mbed_official 133:d4dda5c437f0 45 *
mbed_official 133:d4dda5c437f0 46 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 133:d4dda5c437f0 47 *
mbed_official 133:d4dda5c437f0 48 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 133:d4dda5c437f0 49 * are permitted provided that the following conditions are met:
mbed_official 133:d4dda5c437f0 50 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 133:d4dda5c437f0 51 * this list of conditions and the following disclaimer.
mbed_official 133:d4dda5c437f0 52 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 133:d4dda5c437f0 53 * this list of conditions and the following disclaimer in the documentation
mbed_official 133:d4dda5c437f0 54 * and/or other materials provided with the distribution.
mbed_official 133:d4dda5c437f0 55 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 133:d4dda5c437f0 56 * may be used to endorse or promote products derived from this software
mbed_official 133:d4dda5c437f0 57 * without specific prior written permission.
mbed_official 133:d4dda5c437f0 58 *
mbed_official 133:d4dda5c437f0 59 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 133:d4dda5c437f0 60 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 133:d4dda5c437f0 61 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 133:d4dda5c437f0 62 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 133:d4dda5c437f0 63 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 133:d4dda5c437f0 64 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 133:d4dda5c437f0 65 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 133:d4dda5c437f0 66 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 133:d4dda5c437f0 67 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 133:d4dda5c437f0 68 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 133:d4dda5c437f0 69 *
mbed_official 133:d4dda5c437f0 70 ******************************************************************************
mbed_official 133:d4dda5c437f0 71 */
mbed_official 133:d4dda5c437f0 72
mbed_official 133:d4dda5c437f0 73 /* Includes ------------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 74 #include "stm32f4xx_hal.h"
mbed_official 133:d4dda5c437f0 75 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 133:d4dda5c437f0 76 * @{
mbed_official 133:d4dda5c437f0 77 */
mbed_official 133:d4dda5c437f0 78
mbed_official 133:d4dda5c437f0 79 /** @defgroup HCD
mbed_official 133:d4dda5c437f0 80 * @brief HCD HAL module driver
mbed_official 133:d4dda5c437f0 81 * @{
mbed_official 133:d4dda5c437f0 82 */
mbed_official 133:d4dda5c437f0 83
mbed_official 133:d4dda5c437f0 84 #ifdef HAL_HCD_MODULE_ENABLED
mbed_official 133:d4dda5c437f0 85
mbed_official 133:d4dda5c437f0 86 /* Private typedef -----------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 87 /* Private define ------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 88 /* Private macro -------------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 89 /* Private variables ---------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 90 /* Private function prototypes -----------------------------------------------*/
mbed_official 133:d4dda5c437f0 91 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
mbed_official 133:d4dda5c437f0 92 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
mbed_official 133:d4dda5c437f0 93 static void HCD_RXQLVL_IRQHandler(HCD_HandleTypeDef *hhcd);
mbed_official 133:d4dda5c437f0 94 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd);
mbed_official 133:d4dda5c437f0 95 /* Private functions ---------------------------------------------------------*/
mbed_official 133:d4dda5c437f0 96
mbed_official 133:d4dda5c437f0 97 /** @defgroup HCD_Private_Functions
mbed_official 133:d4dda5c437f0 98 * @{
mbed_official 133:d4dda5c437f0 99 */
mbed_official 133:d4dda5c437f0 100
mbed_official 133:d4dda5c437f0 101 /** @defgroup HCD_Group1 Initialization and de-initialization functions
mbed_official 133:d4dda5c437f0 102 * @brief Initialization and Configuration functions
mbed_official 133:d4dda5c437f0 103 *
mbed_official 133:d4dda5c437f0 104 @verbatim
mbed_official 133:d4dda5c437f0 105 ===============================================================================
mbed_official 133:d4dda5c437f0 106 ##### Initialization and de-initialization functions #####
mbed_official 133:d4dda5c437f0 107 ===============================================================================
mbed_official 133:d4dda5c437f0 108 [..] This section provides functions allowing to:
mbed_official 133:d4dda5c437f0 109
mbed_official 133:d4dda5c437f0 110 @endverbatim
mbed_official 133:d4dda5c437f0 111 * @{
mbed_official 133:d4dda5c437f0 112 */
mbed_official 133:d4dda5c437f0 113
mbed_official 133:d4dda5c437f0 114 /**
mbed_official 133:d4dda5c437f0 115 * @brief Initialize the host driver
mbed_official 133:d4dda5c437f0 116 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 117 * @retval HAL state
mbed_official 133:d4dda5c437f0 118 */
mbed_official 133:d4dda5c437f0 119 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 120 {
mbed_official 133:d4dda5c437f0 121 /* Check the HCD handle allocation */
mbed_official 133:d4dda5c437f0 122 if(hhcd == NULL)
mbed_official 133:d4dda5c437f0 123 {
mbed_official 133:d4dda5c437f0 124 return HAL_ERROR;
mbed_official 133:d4dda5c437f0 125 }
mbed_official 133:d4dda5c437f0 126
mbed_official 133:d4dda5c437f0 127 /* Check the parameters */
mbed_official 133:d4dda5c437f0 128 assert_param(IS_HCD_ALL_INSTANCE(hhcd->Instance));
mbed_official 133:d4dda5c437f0 129
mbed_official 133:d4dda5c437f0 130 hhcd->State = HCD_BUSY;
mbed_official 133:d4dda5c437f0 131
mbed_official 133:d4dda5c437f0 132 /* Init the low level hardware : GPIO, CLOCK, NVIC... */
mbed_official 133:d4dda5c437f0 133 HAL_HCD_MspInit(hhcd);
mbed_official 133:d4dda5c437f0 134
mbed_official 133:d4dda5c437f0 135 /* Disable the Interrupts */
mbed_official 133:d4dda5c437f0 136 __HAL_HCD_DISABLE(hhcd);
mbed_official 133:d4dda5c437f0 137
mbed_official 133:d4dda5c437f0 138 /*Init the Core (common init.) */
mbed_official 133:d4dda5c437f0 139 USB_CoreInit(hhcd->Instance, hhcd->Init);
mbed_official 133:d4dda5c437f0 140
mbed_official 133:d4dda5c437f0 141 /* Force Host Mode*/
mbed_official 133:d4dda5c437f0 142 USB_SetCurrentMode(hhcd->Instance , USB_OTG_HOST_MODE);
mbed_official 133:d4dda5c437f0 143
mbed_official 133:d4dda5c437f0 144 /* Init Host */
mbed_official 133:d4dda5c437f0 145 USB_HostInit(hhcd->Instance, hhcd->Init);
mbed_official 133:d4dda5c437f0 146
mbed_official 133:d4dda5c437f0 147 hhcd->State= HCD_READY;
mbed_official 133:d4dda5c437f0 148
mbed_official 133:d4dda5c437f0 149 return HAL_OK;
mbed_official 133:d4dda5c437f0 150 }
mbed_official 133:d4dda5c437f0 151
mbed_official 133:d4dda5c437f0 152 /**
mbed_official 133:d4dda5c437f0 153 * @brief Initialize a host channel
mbed_official 133:d4dda5c437f0 154 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 155 * @param ch_num : Channel number
mbed_official 133:d4dda5c437f0 156 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 157 * @param epnum : Endpoint number
mbed_official 133:d4dda5c437f0 158 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 159 * @param dev_address : Current device address
mbed_official 133:d4dda5c437f0 160 * This parameter can be a value from 0 to 255
mbed_official 133:d4dda5c437f0 161 * @param speed : Current device speed
mbed_official 133:d4dda5c437f0 162 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 163 * @arg HCD_SPEED_HIGH: High speed mode
mbed_official 133:d4dda5c437f0 164 * @arg HCD_SPEED_FULL: Full speed mode
mbed_official 133:d4dda5c437f0 165 * @arg HCD_SPEED_LOW: Low speed mode
mbed_official 133:d4dda5c437f0 166 * @param ep_type : Endpoint Type
mbed_official 133:d4dda5c437f0 167 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 168 * @arg EP_TYPE_CTRL: Control type
mbed_official 133:d4dda5c437f0 169 * @arg EP_TYPE_ISOC: Isochrounous type
mbed_official 133:d4dda5c437f0 170 * @arg EP_TYPE_BULK: Bulk type
mbed_official 133:d4dda5c437f0 171 * @arg EP_TYPE_INTR: Interrupt type
mbed_official 133:d4dda5c437f0 172 * @param mps : Max Packet Size
mbed_official 133:d4dda5c437f0 173 * This parameter can be a value from 0 to32K
mbed_official 133:d4dda5c437f0 174 * @retval HAL state
mbed_official 133:d4dda5c437f0 175 */
mbed_official 133:d4dda5c437f0 176 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd,
mbed_official 133:d4dda5c437f0 177 uint8_t ch_num,
mbed_official 133:d4dda5c437f0 178 uint8_t epnum,
mbed_official 133:d4dda5c437f0 179 uint8_t dev_address,
mbed_official 133:d4dda5c437f0 180 uint8_t speed,
mbed_official 133:d4dda5c437f0 181 uint8_t ep_type,
mbed_official 133:d4dda5c437f0 182 uint16_t mps)
mbed_official 133:d4dda5c437f0 183 {
mbed_official 133:d4dda5c437f0 184 HAL_StatusTypeDef status = HAL_OK;
mbed_official 133:d4dda5c437f0 185
mbed_official 133:d4dda5c437f0 186 __HAL_LOCK(hhcd);
mbed_official 133:d4dda5c437f0 187
mbed_official 133:d4dda5c437f0 188 hhcd->hc[ch_num].dev_addr = dev_address;
mbed_official 133:d4dda5c437f0 189 hhcd->hc[ch_num].max_packet = mps;
mbed_official 133:d4dda5c437f0 190 hhcd->hc[ch_num].ch_num = ch_num;
mbed_official 133:d4dda5c437f0 191 hhcd->hc[ch_num].ep_type = ep_type;
mbed_official 133:d4dda5c437f0 192 hhcd->hc[ch_num].ep_num = epnum & 0x7F;
mbed_official 133:d4dda5c437f0 193 hhcd->hc[ch_num].ep_is_in = ((epnum & 0x80) == 0x80);
mbed_official 133:d4dda5c437f0 194 hhcd->hc[ch_num].speed = speed;
mbed_official 133:d4dda5c437f0 195
mbed_official 133:d4dda5c437f0 196 status = USB_HC_Init(hhcd->Instance,
mbed_official 133:d4dda5c437f0 197 ch_num,
mbed_official 133:d4dda5c437f0 198 epnum,
mbed_official 133:d4dda5c437f0 199 dev_address,
mbed_official 133:d4dda5c437f0 200 speed,
mbed_official 133:d4dda5c437f0 201 ep_type,
mbed_official 133:d4dda5c437f0 202 mps);
mbed_official 133:d4dda5c437f0 203 __HAL_UNLOCK(hhcd);
mbed_official 133:d4dda5c437f0 204
mbed_official 133:d4dda5c437f0 205 return status;
mbed_official 133:d4dda5c437f0 206 }
mbed_official 133:d4dda5c437f0 207
mbed_official 133:d4dda5c437f0 208
mbed_official 133:d4dda5c437f0 209
mbed_official 133:d4dda5c437f0 210 /**
mbed_official 133:d4dda5c437f0 211 * @brief Halt a host channel
mbed_official 133:d4dda5c437f0 212 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 213 * @param ch_num : Channel number
mbed_official 133:d4dda5c437f0 214 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 215 * @retval HAL state
mbed_official 133:d4dda5c437f0 216 */
mbed_official 133:d4dda5c437f0 217 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd,
mbed_official 133:d4dda5c437f0 218 uint8_t ch_num)
mbed_official 133:d4dda5c437f0 219 {
mbed_official 133:d4dda5c437f0 220 HAL_StatusTypeDef status = HAL_OK;
mbed_official 133:d4dda5c437f0 221
mbed_official 133:d4dda5c437f0 222 __HAL_LOCK(hhcd);
mbed_official 133:d4dda5c437f0 223 USB_HC_Halt(hhcd->Instance, ch_num);
mbed_official 133:d4dda5c437f0 224 __HAL_UNLOCK(hhcd);
mbed_official 133:d4dda5c437f0 225
mbed_official 133:d4dda5c437f0 226 return status;
mbed_official 133:d4dda5c437f0 227 }
mbed_official 133:d4dda5c437f0 228 /**
mbed_official 133:d4dda5c437f0 229 * @brief DeInitialize the host driver
mbed_official 133:d4dda5c437f0 230 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 231 * @retval HAL state
mbed_official 133:d4dda5c437f0 232 */
mbed_official 133:d4dda5c437f0 233 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 234 {
mbed_official 133:d4dda5c437f0 235 /* Check the HCD handle allocation */
mbed_official 133:d4dda5c437f0 236 if(hhcd == NULL)
mbed_official 133:d4dda5c437f0 237 {
mbed_official 133:d4dda5c437f0 238 return HAL_ERROR;
mbed_official 133:d4dda5c437f0 239 }
mbed_official 133:d4dda5c437f0 240
mbed_official 133:d4dda5c437f0 241 hhcd->State = HCD_BUSY;
mbed_official 133:d4dda5c437f0 242
mbed_official 133:d4dda5c437f0 243 /* DeInit the low level hardware */
mbed_official 133:d4dda5c437f0 244 HAL_HCD_MspDeInit(hhcd);
mbed_official 133:d4dda5c437f0 245
mbed_official 133:d4dda5c437f0 246 __HAL_HCD_DISABLE(hhcd);
mbed_official 133:d4dda5c437f0 247
mbed_official 133:d4dda5c437f0 248 hhcd->State = HCD_READY;
mbed_official 133:d4dda5c437f0 249
mbed_official 133:d4dda5c437f0 250 return HAL_OK;
mbed_official 133:d4dda5c437f0 251 }
mbed_official 133:d4dda5c437f0 252
mbed_official 133:d4dda5c437f0 253 /**
mbed_official 133:d4dda5c437f0 254 * @brief Initializes the HCD MSP.
mbed_official 133:d4dda5c437f0 255 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 256 * @retval None
mbed_official 133:d4dda5c437f0 257 */
mbed_official 133:d4dda5c437f0 258 __weak void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 259 {
mbed_official 133:d4dda5c437f0 260 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 261 the HAL_PCD_MspInit could be implenetd in the user file
mbed_official 133:d4dda5c437f0 262 */
mbed_official 133:d4dda5c437f0 263 }
mbed_official 133:d4dda5c437f0 264
mbed_official 133:d4dda5c437f0 265 /**
mbed_official 133:d4dda5c437f0 266 * @brief DeInitializes HCD MSP.
mbed_official 133:d4dda5c437f0 267 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 268 * @retval None
mbed_official 133:d4dda5c437f0 269 */
mbed_official 133:d4dda5c437f0 270 __weak void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhhcd)
mbed_official 133:d4dda5c437f0 271 {
mbed_official 133:d4dda5c437f0 272 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 273 the HAL_PCD_MspDeInit could be implenetd in the user file
mbed_official 133:d4dda5c437f0 274 */
mbed_official 133:d4dda5c437f0 275 }
mbed_official 133:d4dda5c437f0 276
mbed_official 133:d4dda5c437f0 277 /**
mbed_official 133:d4dda5c437f0 278 * @}
mbed_official 133:d4dda5c437f0 279 */
mbed_official 133:d4dda5c437f0 280
mbed_official 133:d4dda5c437f0 281 /** @defgroup HCD_Group2 IO operation functions
mbed_official 133:d4dda5c437f0 282 * @brief HCD IO operation functions
mbed_official 133:d4dda5c437f0 283 *
mbed_official 133:d4dda5c437f0 284 @verbatim
mbed_official 133:d4dda5c437f0 285 ===============================================================================
mbed_official 133:d4dda5c437f0 286 ##### IO operation functions #####
mbed_official 133:d4dda5c437f0 287 ===============================================================================
mbed_official 133:d4dda5c437f0 288 This subsection provides a set of functions allowing to manage the USB Host Data
mbed_official 133:d4dda5c437f0 289 Transfer
mbed_official 133:d4dda5c437f0 290
mbed_official 133:d4dda5c437f0 291 @endverbatim
mbed_official 133:d4dda5c437f0 292 * @{
mbed_official 133:d4dda5c437f0 293 */
mbed_official 133:d4dda5c437f0 294
mbed_official 133:d4dda5c437f0 295 /**
mbed_official 133:d4dda5c437f0 296 * @brief Submit a new URB for processing
mbed_official 133:d4dda5c437f0 297 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 298 * @param ch_num : Channel number
mbed_official 133:d4dda5c437f0 299 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 300 * @param direction : Channel number
mbed_official 133:d4dda5c437f0 301 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 302 * 0 : Output
mbed_official 133:d4dda5c437f0 303 * 1 : Input
mbed_official 133:d4dda5c437f0 304 * @param ep_type : Endpoint Type
mbed_official 133:d4dda5c437f0 305 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 306 * @arg EP_TYPE_CTRL: Control type
mbed_official 133:d4dda5c437f0 307 * @arg EP_TYPE_ISOC: Isochrounous type
mbed_official 133:d4dda5c437f0 308 * @arg EP_TYPE_BULK: Bulk type
mbed_official 133:d4dda5c437f0 309 * @arg EP_TYPE_INTR: Interrupt type
mbed_official 133:d4dda5c437f0 310 * @param token : Endpoint Type
mbed_official 133:d4dda5c437f0 311 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 312 * @arg 0: HC_PID_SETUP
mbed_official 133:d4dda5c437f0 313 * @arg 1: HC_PID_DATA1
mbed_official 133:d4dda5c437f0 314 * @param pbuff : pointer to URB data
mbed_official 133:d4dda5c437f0 315 * @param length : Length of URB data
mbed_official 133:d4dda5c437f0 316 * @param do_ping : activate do ping protocol (for high speed only)
mbed_official 133:d4dda5c437f0 317 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 318 * 0 : do ping inactive
mbed_official 133:d4dda5c437f0 319 * 1 : do ping active
mbed_official 133:d4dda5c437f0 320 * @retval HAL state
mbed_official 133:d4dda5c437f0 321 */
mbed_official 133:d4dda5c437f0 322 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd,
mbed_official 133:d4dda5c437f0 323 uint8_t ch_num,
mbed_official 133:d4dda5c437f0 324 uint8_t direction ,
mbed_official 133:d4dda5c437f0 325 uint8_t ep_type,
mbed_official 133:d4dda5c437f0 326 uint8_t token,
mbed_official 133:d4dda5c437f0 327 uint8_t* pbuff,
mbed_official 133:d4dda5c437f0 328 uint16_t length,
mbed_official 133:d4dda5c437f0 329 uint8_t do_ping)
mbed_official 133:d4dda5c437f0 330 {
mbed_official 133:d4dda5c437f0 331 hhcd->hc[ch_num].ep_is_in = direction;
mbed_official 133:d4dda5c437f0 332 hhcd->hc[ch_num].ep_type = ep_type;
mbed_official 133:d4dda5c437f0 333
mbed_official 133:d4dda5c437f0 334 if(token == 0)
mbed_official 133:d4dda5c437f0 335 {
mbed_official 133:d4dda5c437f0 336 hhcd->hc[ch_num].data_pid = HC_PID_SETUP;
mbed_official 133:d4dda5c437f0 337 }
mbed_official 133:d4dda5c437f0 338 else
mbed_official 133:d4dda5c437f0 339 {
mbed_official 133:d4dda5c437f0 340 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
mbed_official 133:d4dda5c437f0 341 }
mbed_official 133:d4dda5c437f0 342
mbed_official 133:d4dda5c437f0 343 /* Manage Data Toggle */
mbed_official 133:d4dda5c437f0 344 switch(ep_type)
mbed_official 133:d4dda5c437f0 345 {
mbed_official 133:d4dda5c437f0 346 case EP_TYPE_CTRL:
mbed_official 133:d4dda5c437f0 347 if((token == 1) && (direction == 0)) /*send data */
mbed_official 133:d4dda5c437f0 348 {
mbed_official 133:d4dda5c437f0 349 if ( length == 0 )
mbed_official 133:d4dda5c437f0 350 { /* For Status OUT stage, Length==0, Status Out PID = 1 */
mbed_official 133:d4dda5c437f0 351 hhcd->hc[ch_num].toggle_out = 1;
mbed_official 133:d4dda5c437f0 352 }
mbed_official 133:d4dda5c437f0 353
mbed_official 133:d4dda5c437f0 354 /* Set the Data Toggle bit as per the Flag */
mbed_official 133:d4dda5c437f0 355 if ( hhcd->hc[ch_num].toggle_out == 0)
mbed_official 133:d4dda5c437f0 356 { /* Put the PID 0 */
mbed_official 133:d4dda5c437f0 357 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 358 }
mbed_official 133:d4dda5c437f0 359 else
mbed_official 133:d4dda5c437f0 360 { /* Put the PID 1 */
mbed_official 133:d4dda5c437f0 361 hhcd->hc[ch_num].data_pid = HC_PID_DATA1 ;
mbed_official 133:d4dda5c437f0 362 }
mbed_official 133:d4dda5c437f0 363 if(hhcd->hc[ch_num].urb_state != URB_NOTREADY)
mbed_official 133:d4dda5c437f0 364 {
mbed_official 133:d4dda5c437f0 365 hhcd->hc[ch_num].do_ping = do_ping;
mbed_official 133:d4dda5c437f0 366 }
mbed_official 133:d4dda5c437f0 367 }
mbed_official 133:d4dda5c437f0 368 break;
mbed_official 133:d4dda5c437f0 369
mbed_official 133:d4dda5c437f0 370 case EP_TYPE_BULK:
mbed_official 133:d4dda5c437f0 371 if(direction == 0)
mbed_official 133:d4dda5c437f0 372 {
mbed_official 133:d4dda5c437f0 373 /* Set the Data Toggle bit as per the Flag */
mbed_official 133:d4dda5c437f0 374 if ( hhcd->hc[ch_num].toggle_out == 0)
mbed_official 133:d4dda5c437f0 375 { /* Put the PID 0 */
mbed_official 133:d4dda5c437f0 376 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 377 }
mbed_official 133:d4dda5c437f0 378 else
mbed_official 133:d4dda5c437f0 379 { /* Put the PID 1 */
mbed_official 133:d4dda5c437f0 380 hhcd->hc[ch_num].data_pid = HC_PID_DATA1 ;
mbed_official 133:d4dda5c437f0 381 }
mbed_official 133:d4dda5c437f0 382 if(hhcd->hc[ch_num].urb_state != URB_NOTREADY)
mbed_official 133:d4dda5c437f0 383 {
mbed_official 133:d4dda5c437f0 384 hhcd->hc[ch_num].do_ping = do_ping;
mbed_official 133:d4dda5c437f0 385 }
mbed_official 133:d4dda5c437f0 386 }
mbed_official 133:d4dda5c437f0 387 else
mbed_official 133:d4dda5c437f0 388 {
mbed_official 133:d4dda5c437f0 389 if( hhcd->hc[ch_num].toggle_in == 0)
mbed_official 133:d4dda5c437f0 390 {
mbed_official 133:d4dda5c437f0 391 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 392 }
mbed_official 133:d4dda5c437f0 393 else
mbed_official 133:d4dda5c437f0 394 {
mbed_official 133:d4dda5c437f0 395 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
mbed_official 133:d4dda5c437f0 396 }
mbed_official 133:d4dda5c437f0 397 }
mbed_official 133:d4dda5c437f0 398
mbed_official 133:d4dda5c437f0 399 break;
mbed_official 133:d4dda5c437f0 400 case EP_TYPE_INTR:
mbed_official 133:d4dda5c437f0 401 if(direction == 0)
mbed_official 133:d4dda5c437f0 402 {
mbed_official 133:d4dda5c437f0 403 /* Set the Data Toggle bit as per the Flag */
mbed_official 133:d4dda5c437f0 404 if ( hhcd->hc[ch_num].toggle_out == 0)
mbed_official 133:d4dda5c437f0 405 { /* Put the PID 0 */
mbed_official 133:d4dda5c437f0 406 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 407 }
mbed_official 133:d4dda5c437f0 408 else
mbed_official 133:d4dda5c437f0 409 { /* Put the PID 1 */
mbed_official 133:d4dda5c437f0 410 hhcd->hc[ch_num].data_pid = HC_PID_DATA1 ;
mbed_official 133:d4dda5c437f0 411 }
mbed_official 133:d4dda5c437f0 412 }
mbed_official 133:d4dda5c437f0 413 else
mbed_official 133:d4dda5c437f0 414 {
mbed_official 133:d4dda5c437f0 415 if( hhcd->hc[ch_num].toggle_in == 0)
mbed_official 133:d4dda5c437f0 416 {
mbed_official 133:d4dda5c437f0 417 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 418 }
mbed_official 133:d4dda5c437f0 419 else
mbed_official 133:d4dda5c437f0 420 {
mbed_official 133:d4dda5c437f0 421 hhcd->hc[ch_num].data_pid = HC_PID_DATA1;
mbed_official 133:d4dda5c437f0 422 }
mbed_official 133:d4dda5c437f0 423 }
mbed_official 133:d4dda5c437f0 424 break;
mbed_official 133:d4dda5c437f0 425
mbed_official 133:d4dda5c437f0 426 case EP_TYPE_ISOC:
mbed_official 133:d4dda5c437f0 427 hhcd->hc[ch_num].data_pid = HC_PID_DATA0;
mbed_official 133:d4dda5c437f0 428 break;
mbed_official 133:d4dda5c437f0 429
mbed_official 133:d4dda5c437f0 430 }
mbed_official 133:d4dda5c437f0 431
mbed_official 133:d4dda5c437f0 432 hhcd->hc[ch_num].xfer_buff = pbuff;
mbed_official 133:d4dda5c437f0 433 hhcd->hc[ch_num].xfer_len = length;
mbed_official 133:d4dda5c437f0 434 hhcd->hc[ch_num].urb_state = URB_IDLE;
mbed_official 133:d4dda5c437f0 435 hhcd->hc[ch_num].xfer_count = 0 ;
mbed_official 133:d4dda5c437f0 436 hhcd->hc[ch_num].ch_num = ch_num;
mbed_official 133:d4dda5c437f0 437 hhcd->hc[ch_num].state = HC_IDLE;
mbed_official 133:d4dda5c437f0 438
mbed_official 133:d4dda5c437f0 439 return USB_HC_StartXfer(hhcd->Instance, &(hhcd->hc[ch_num]), hhcd->Init.dma_enable);
mbed_official 133:d4dda5c437f0 440 }
mbed_official 133:d4dda5c437f0 441
mbed_official 133:d4dda5c437f0 442 /**
mbed_official 133:d4dda5c437f0 443 * @brief This function handles HCD interrupt request.
mbed_official 133:d4dda5c437f0 444 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 445 * @retval none
mbed_official 133:d4dda5c437f0 446 */
mbed_official 133:d4dda5c437f0 447 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 448 {
mbed_official 133:d4dda5c437f0 449 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
mbed_official 133:d4dda5c437f0 450 uint32_t i = 0 , interrupt = 0;
mbed_official 133:d4dda5c437f0 451
mbed_official 133:d4dda5c437f0 452 /* ensure that we are in device mode */
mbed_official 133:d4dda5c437f0 453 if (USB_GetMode(hhcd->Instance) == USB_OTG_MODE_HOST)
mbed_official 133:d4dda5c437f0 454 {
mbed_official 133:d4dda5c437f0 455 /* avoid spurious interrupt */
mbed_official 133:d4dda5c437f0 456 if(__HAL_HCD_IS_INVALID_INTERRUPT(hhcd))
mbed_official 133:d4dda5c437f0 457 {
mbed_official 133:d4dda5c437f0 458 return;
mbed_official 133:d4dda5c437f0 459 }
mbed_official 133:d4dda5c437f0 460
mbed_official 133:d4dda5c437f0 461 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
mbed_official 133:d4dda5c437f0 462 {
mbed_official 133:d4dda5c437f0 463 /* incorrect mode, acknowledge the interrupt */
mbed_official 133:d4dda5c437f0 464 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
mbed_official 133:d4dda5c437f0 465 }
mbed_official 133:d4dda5c437f0 466
mbed_official 133:d4dda5c437f0 467 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR))
mbed_official 133:d4dda5c437f0 468 {
mbed_official 133:d4dda5c437f0 469 /* incorrect mode, acknowledge the interrupt */
mbed_official 133:d4dda5c437f0 470 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR);
mbed_official 133:d4dda5c437f0 471 }
mbed_official 133:d4dda5c437f0 472
mbed_official 133:d4dda5c437f0 473 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE))
mbed_official 133:d4dda5c437f0 474 {
mbed_official 133:d4dda5c437f0 475 /* incorrect mode, acknowledge the interrupt */
mbed_official 133:d4dda5c437f0 476 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE);
mbed_official 133:d4dda5c437f0 477 }
mbed_official 133:d4dda5c437f0 478
mbed_official 133:d4dda5c437f0 479 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_MMIS))
mbed_official 133:d4dda5c437f0 480 {
mbed_official 133:d4dda5c437f0 481 /* incorrect mode, acknowledge the interrupt */
mbed_official 133:d4dda5c437f0 482 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_MMIS);
mbed_official 133:d4dda5c437f0 483 }
mbed_official 133:d4dda5c437f0 484
mbed_official 133:d4dda5c437f0 485 /* Handle Host Disconnect Interrupts */
mbed_official 133:d4dda5c437f0 486 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT))
mbed_official 133:d4dda5c437f0 487 {
mbed_official 133:d4dda5c437f0 488
mbed_official 133:d4dda5c437f0 489 /* Cleanup HPRT */
mbed_official 133:d4dda5c437f0 490 USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET |\
mbed_official 133:d4dda5c437f0 491 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG );
mbed_official 133:d4dda5c437f0 492
mbed_official 133:d4dda5c437f0 493 /* Handle Host Port Interrupts */
mbed_official 133:d4dda5c437f0 494 HAL_HCD_Disconnect_Callback(hhcd);
mbed_official 133:d4dda5c437f0 495 USB_InitFSLSPClkSel(hhcd->Instance ,HCFG_48_MHZ );
mbed_official 133:d4dda5c437f0 496 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT);
mbed_official 133:d4dda5c437f0 497 }
mbed_official 133:d4dda5c437f0 498
mbed_official 133:d4dda5c437f0 499 /* Handle Host Port Interrupts */
mbed_official 133:d4dda5c437f0 500 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HPRTINT))
mbed_official 133:d4dda5c437f0 501 {
mbed_official 133:d4dda5c437f0 502 HCD_Port_IRQHandler (hhcd);
mbed_official 133:d4dda5c437f0 503 }
mbed_official 133:d4dda5c437f0 504
mbed_official 133:d4dda5c437f0 505 /* Handle Host SOF Interrupts */
mbed_official 133:d4dda5c437f0 506 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_SOF))
mbed_official 133:d4dda5c437f0 507 {
mbed_official 133:d4dda5c437f0 508 HAL_HCD_SOF_Callback(hhcd);
mbed_official 133:d4dda5c437f0 509 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_SOF);
mbed_official 133:d4dda5c437f0 510 }
mbed_official 133:d4dda5c437f0 511
mbed_official 133:d4dda5c437f0 512 /* Handle Host channel Interrupts */
mbed_official 133:d4dda5c437f0 513 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HCINT))
mbed_official 133:d4dda5c437f0 514 {
mbed_official 133:d4dda5c437f0 515
mbed_official 133:d4dda5c437f0 516 interrupt = USB_HC_ReadInterrupt(hhcd->Instance);
mbed_official 133:d4dda5c437f0 517 for (i = 0; i < hhcd->Init.Host_channels ; i++)
mbed_official 133:d4dda5c437f0 518 {
mbed_official 133:d4dda5c437f0 519 if (interrupt & (1 << i))
mbed_official 133:d4dda5c437f0 520 {
mbed_official 133:d4dda5c437f0 521 if ((USBx_HC(i)->HCCHAR) & USB_OTG_HCCHAR_EPDIR)
mbed_official 133:d4dda5c437f0 522 {
mbed_official 133:d4dda5c437f0 523 HCD_HC_IN_IRQHandler (hhcd, i);
mbed_official 133:d4dda5c437f0 524 }
mbed_official 133:d4dda5c437f0 525 else
mbed_official 133:d4dda5c437f0 526 {
mbed_official 133:d4dda5c437f0 527 HCD_HC_OUT_IRQHandler (hhcd, i);
mbed_official 133:d4dda5c437f0 528 }
mbed_official 133:d4dda5c437f0 529 }
mbed_official 133:d4dda5c437f0 530 }
mbed_official 133:d4dda5c437f0 531 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_HCINT);
mbed_official 133:d4dda5c437f0 532 }
mbed_official 133:d4dda5c437f0 533
mbed_official 133:d4dda5c437f0 534 /* Handle Rx Queue Level Interrupts */
mbed_official 133:d4dda5c437f0 535 if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_RXFLVL))
mbed_official 133:d4dda5c437f0 536 {
mbed_official 133:d4dda5c437f0 537 USB_MASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL);
mbed_official 133:d4dda5c437f0 538
mbed_official 133:d4dda5c437f0 539 HCD_RXQLVL_IRQHandler (hhcd);
mbed_official 133:d4dda5c437f0 540
mbed_official 133:d4dda5c437f0 541 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL);
mbed_official 133:d4dda5c437f0 542 }
mbed_official 133:d4dda5c437f0 543
mbed_official 133:d4dda5c437f0 544 }
mbed_official 133:d4dda5c437f0 545 }
mbed_official 133:d4dda5c437f0 546
mbed_official 133:d4dda5c437f0 547 /**
mbed_official 133:d4dda5c437f0 548 * @brief SOF callback.
mbed_official 133:d4dda5c437f0 549 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 550 * @retval None
mbed_official 133:d4dda5c437f0 551 */
mbed_official 133:d4dda5c437f0 552 __weak void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 553 {
mbed_official 133:d4dda5c437f0 554 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 555 the HAL_HCD_SOF_Callback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 556 */
mbed_official 133:d4dda5c437f0 557 }
mbed_official 133:d4dda5c437f0 558
mbed_official 133:d4dda5c437f0 559 /**
mbed_official 133:d4dda5c437f0 560 * @brief Connexion Event callback.
mbed_official 133:d4dda5c437f0 561 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 562 * @retval None
mbed_official 133:d4dda5c437f0 563 */
mbed_official 133:d4dda5c437f0 564 __weak void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 565 {
mbed_official 133:d4dda5c437f0 566 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 567 the HAL_HCD_Connect_Callback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 568 */
mbed_official 133:d4dda5c437f0 569 }
mbed_official 133:d4dda5c437f0 570
mbed_official 133:d4dda5c437f0 571 /**
mbed_official 133:d4dda5c437f0 572 * @brief Disonnexion Event callback.
mbed_official 133:d4dda5c437f0 573 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 574 * @retval None
mbed_official 133:d4dda5c437f0 575 */
mbed_official 133:d4dda5c437f0 576 __weak void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 577 {
mbed_official 133:d4dda5c437f0 578 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 579 the HAL_HCD_Disconnect_Callback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 580 */
mbed_official 133:d4dda5c437f0 581 }
mbed_official 133:d4dda5c437f0 582
mbed_official 133:d4dda5c437f0 583 /**
mbed_official 133:d4dda5c437f0 584 * @brief Notify URB state change callback.
mbed_official 133:d4dda5c437f0 585 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 586 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 587 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 588 * @param urb_state:
mbed_official 133:d4dda5c437f0 589 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 590 * @arg URB_IDLE
mbed_official 133:d4dda5c437f0 591 * @arg URB_DONE
mbed_official 133:d4dda5c437f0 592 * @arg URB_NOTREADY
mbed_official 133:d4dda5c437f0 593 * @arg URB_NYET
mbed_official 133:d4dda5c437f0 594 * @arg URB_ERROR
mbed_official 133:d4dda5c437f0 595 * @arg URB_STALL
mbed_official 133:d4dda5c437f0 596 * @retval None
mbed_official 133:d4dda5c437f0 597 */
mbed_official 133:d4dda5c437f0 598 __weak void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStateTypeDef urb_state)
mbed_official 133:d4dda5c437f0 599 {
mbed_official 133:d4dda5c437f0 600 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 133:d4dda5c437f0 601 the HAL_HCD_HC_NotifyURBChange_Callback could be implenetd in the user file
mbed_official 133:d4dda5c437f0 602 */
mbed_official 133:d4dda5c437f0 603 }
mbed_official 133:d4dda5c437f0 604
mbed_official 133:d4dda5c437f0 605 /**
mbed_official 133:d4dda5c437f0 606 * @}
mbed_official 133:d4dda5c437f0 607 */
mbed_official 133:d4dda5c437f0 608
mbed_official 133:d4dda5c437f0 609 /** @defgroup HCD_Group3 Peripheral Control functions
mbed_official 133:d4dda5c437f0 610 * @brief management functions
mbed_official 133:d4dda5c437f0 611 *
mbed_official 133:d4dda5c437f0 612 @verbatim
mbed_official 133:d4dda5c437f0 613 ===============================================================================
mbed_official 133:d4dda5c437f0 614 ##### Peripheral Control functions #####
mbed_official 133:d4dda5c437f0 615 ===============================================================================
mbed_official 133:d4dda5c437f0 616 [..]
mbed_official 133:d4dda5c437f0 617 This subsection provides a set of functions allowing to control the HCD data
mbed_official 133:d4dda5c437f0 618 transfers.
mbed_official 133:d4dda5c437f0 619
mbed_official 133:d4dda5c437f0 620 @endverbatim
mbed_official 133:d4dda5c437f0 621 * @{
mbed_official 133:d4dda5c437f0 622 */
mbed_official 133:d4dda5c437f0 623
mbed_official 133:d4dda5c437f0 624 /**
mbed_official 133:d4dda5c437f0 625 * @brief Start the host driver
mbed_official 133:d4dda5c437f0 626 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 627 * @retval HAL state
mbed_official 133:d4dda5c437f0 628 */
mbed_official 133:d4dda5c437f0 629 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 630 {
mbed_official 133:d4dda5c437f0 631 __HAL_LOCK(hhcd);
mbed_official 133:d4dda5c437f0 632 __HAL_HCD_ENABLE(hhcd);
mbed_official 133:d4dda5c437f0 633 USB_DriveVbus(hhcd->Instance, 1);
mbed_official 133:d4dda5c437f0 634 __HAL_UNLOCK(hhcd);
mbed_official 133:d4dda5c437f0 635 return HAL_OK;
mbed_official 133:d4dda5c437f0 636 }
mbed_official 133:d4dda5c437f0 637
mbed_official 133:d4dda5c437f0 638 /**
mbed_official 133:d4dda5c437f0 639 * @brief Stop the host driver
mbed_official 133:d4dda5c437f0 640 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 641 * @retval HAL state
mbed_official 133:d4dda5c437f0 642 */
mbed_official 133:d4dda5c437f0 643
mbed_official 133:d4dda5c437f0 644 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 645 {
mbed_official 133:d4dda5c437f0 646 __HAL_LOCK(hhcd);
mbed_official 133:d4dda5c437f0 647 USB_StopHost(hhcd->Instance);
mbed_official 133:d4dda5c437f0 648 __HAL_UNLOCK(hhcd);
mbed_official 133:d4dda5c437f0 649 return HAL_OK;
mbed_official 133:d4dda5c437f0 650 }
mbed_official 133:d4dda5c437f0 651
mbed_official 133:d4dda5c437f0 652 /**
mbed_official 133:d4dda5c437f0 653 * @brief Reset the host port
mbed_official 133:d4dda5c437f0 654 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 655 * @retval HAL state
mbed_official 133:d4dda5c437f0 656 */
mbed_official 133:d4dda5c437f0 657 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 658 {
mbed_official 133:d4dda5c437f0 659 return (USB_ResetPort(hhcd->Instance));
mbed_official 133:d4dda5c437f0 660 }
mbed_official 133:d4dda5c437f0 661
mbed_official 133:d4dda5c437f0 662 /**
mbed_official 133:d4dda5c437f0 663 * @}
mbed_official 133:d4dda5c437f0 664 */
mbed_official 133:d4dda5c437f0 665
mbed_official 133:d4dda5c437f0 666 /** @defgroup HCD_Group4 Peripheral State functions
mbed_official 133:d4dda5c437f0 667 * @brief Peripheral State functions
mbed_official 133:d4dda5c437f0 668 *
mbed_official 133:d4dda5c437f0 669 @verbatim
mbed_official 133:d4dda5c437f0 670 ===============================================================================
mbed_official 133:d4dda5c437f0 671 ##### Peripheral State functions #####
mbed_official 133:d4dda5c437f0 672 ===============================================================================
mbed_official 133:d4dda5c437f0 673 [..]
mbed_official 133:d4dda5c437f0 674 This subsection permit to get in run-time the status of the peripheral
mbed_official 133:d4dda5c437f0 675 and the data flow.
mbed_official 133:d4dda5c437f0 676
mbed_official 133:d4dda5c437f0 677 @endverbatim
mbed_official 133:d4dda5c437f0 678 * @{
mbed_official 133:d4dda5c437f0 679 */
mbed_official 133:d4dda5c437f0 680
mbed_official 133:d4dda5c437f0 681 /**
mbed_official 133:d4dda5c437f0 682 * @brief Return the HCD state
mbed_official 133:d4dda5c437f0 683 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 684 * @retval HAL state
mbed_official 133:d4dda5c437f0 685 */
mbed_official 133:d4dda5c437f0 686 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 687 {
mbed_official 133:d4dda5c437f0 688 return hhcd->State;
mbed_official 133:d4dda5c437f0 689 }
mbed_official 133:d4dda5c437f0 690
mbed_official 133:d4dda5c437f0 691 /**
mbed_official 133:d4dda5c437f0 692 * @brief Return URB state for a channel
mbed_official 133:d4dda5c437f0 693 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 694 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 695 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 696 * @retval URB state
mbed_official 133:d4dda5c437f0 697 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 698 * @arg URB_IDLE
mbed_official 133:d4dda5c437f0 699 * @arg URB_DONE
mbed_official 133:d4dda5c437f0 700 * @arg URB_NOTREADY
mbed_official 133:d4dda5c437f0 701 * @arg URB_NYET
mbed_official 133:d4dda5c437f0 702 * @arg URB_ERROR
mbed_official 133:d4dda5c437f0 703 * @arg URB_STALL
mbed_official 133:d4dda5c437f0 704 */
mbed_official 133:d4dda5c437f0 705 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef *hhcd, uint8_t chnum)
mbed_official 133:d4dda5c437f0 706 {
mbed_official 133:d4dda5c437f0 707 return hhcd->hc[chnum].urb_state;
mbed_official 133:d4dda5c437f0 708 }
mbed_official 133:d4dda5c437f0 709
mbed_official 133:d4dda5c437f0 710
mbed_official 133:d4dda5c437f0 711 /**
mbed_official 133:d4dda5c437f0 712 * @brief Return the last host transfer size
mbed_official 133:d4dda5c437f0 713 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 714 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 715 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 716 * @retval last transfer size in byte
mbed_official 133:d4dda5c437f0 717 */
mbed_official 133:d4dda5c437f0 718 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef *hhcd, uint8_t chnum)
mbed_official 133:d4dda5c437f0 719 {
mbed_official 133:d4dda5c437f0 720 return hhcd->hc[chnum].xfer_count;
mbed_official 133:d4dda5c437f0 721 }
mbed_official 133:d4dda5c437f0 722
mbed_official 133:d4dda5c437f0 723 /**
mbed_official 133:d4dda5c437f0 724 * @brief Return the Host Channel state
mbed_official 133:d4dda5c437f0 725 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 726 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 727 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 728 * @retval Host channel state
mbed_official 133:d4dda5c437f0 729 * This parameter can be one of the these values:
mbed_official 133:d4dda5c437f0 730 * @arg HC_IDLE
mbed_official 133:d4dda5c437f0 731 * @arg HC_XFRC
mbed_official 133:d4dda5c437f0 732 * @arg HC_HALTED
mbed_official 133:d4dda5c437f0 733 * @arg HC_NYET
mbed_official 133:d4dda5c437f0 734 * @arg HC_NAK
mbed_official 133:d4dda5c437f0 735 * @arg HC_STALL
mbed_official 133:d4dda5c437f0 736 * @arg HC_XACTERR
mbed_official 133:d4dda5c437f0 737 * @arg HC_BBLERR
mbed_official 133:d4dda5c437f0 738 * @arg HC_DATATGLERR
mbed_official 133:d4dda5c437f0 739 */
mbed_official 133:d4dda5c437f0 740 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef *hhcd, uint8_t chnum)
mbed_official 133:d4dda5c437f0 741 {
mbed_official 133:d4dda5c437f0 742 return hhcd->hc[chnum].state;
mbed_official 133:d4dda5c437f0 743 }
mbed_official 133:d4dda5c437f0 744
mbed_official 133:d4dda5c437f0 745 /**
mbed_official 133:d4dda5c437f0 746 * @brief Return the current Host frame number
mbed_official 133:d4dda5c437f0 747 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 748 * @retval current Host frame number
mbed_official 133:d4dda5c437f0 749 */
mbed_official 133:d4dda5c437f0 750 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 751 {
mbed_official 133:d4dda5c437f0 752 return (USB_GetCurrentFrame(hhcd->Instance));
mbed_official 133:d4dda5c437f0 753 }
mbed_official 133:d4dda5c437f0 754
mbed_official 133:d4dda5c437f0 755 /**
mbed_official 133:d4dda5c437f0 756 * @brief Return the Host enumeration speed
mbed_official 133:d4dda5c437f0 757 * @param hhcd : HCD handle
mbed_official 133:d4dda5c437f0 758 * @retval Enumeration speed
mbed_official 133:d4dda5c437f0 759 */
mbed_official 133:d4dda5c437f0 760 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 761 {
mbed_official 133:d4dda5c437f0 762 return (USB_GetHostSpeed(hhcd->Instance));
mbed_official 133:d4dda5c437f0 763 }
mbed_official 133:d4dda5c437f0 764
mbed_official 133:d4dda5c437f0 765 /**
mbed_official 133:d4dda5c437f0 766 * @}
mbed_official 133:d4dda5c437f0 767 */
mbed_official 133:d4dda5c437f0 768
mbed_official 133:d4dda5c437f0 769 /**
mbed_official 133:d4dda5c437f0 770 * @brief This function handles Host Channel IN interrupt requests.
mbed_official 133:d4dda5c437f0 771 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 772 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 773 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 774 * @retval none
mbed_official 133:d4dda5c437f0 775 */
mbed_official 133:d4dda5c437f0 776 static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum)
mbed_official 133:d4dda5c437f0 777 {
mbed_official 133:d4dda5c437f0 778 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
mbed_official 133:d4dda5c437f0 779
mbed_official 133:d4dda5c437f0 780 if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_AHBERR)
mbed_official 133:d4dda5c437f0 781 {
mbed_official 133:d4dda5c437f0 782 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_AHBERR);
mbed_official 133:d4dda5c437f0 783 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 784 }
mbed_official 133:d4dda5c437f0 785 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_ACK)
mbed_official 133:d4dda5c437f0 786 {
mbed_official 133:d4dda5c437f0 787 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_ACK);
mbed_official 133:d4dda5c437f0 788 }
mbed_official 133:d4dda5c437f0 789
mbed_official 133:d4dda5c437f0 790 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_STALL)
mbed_official 133:d4dda5c437f0 791 {
mbed_official 133:d4dda5c437f0 792 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 793 hhcd->hc[chnum].state = HC_STALL;
mbed_official 133:d4dda5c437f0 794 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 795 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_STALL);
mbed_official 133:d4dda5c437f0 796 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 797 }
mbed_official 133:d4dda5c437f0 798 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_DTERR)
mbed_official 133:d4dda5c437f0 799 {
mbed_official 133:d4dda5c437f0 800 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 801 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 802 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 803 hhcd->hc[chnum].state = HC_DATATGLERR;
mbed_official 133:d4dda5c437f0 804 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_DTERR);
mbed_official 133:d4dda5c437f0 805 }
mbed_official 133:d4dda5c437f0 806
mbed_official 133:d4dda5c437f0 807 if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_FRMOR)
mbed_official 133:d4dda5c437f0 808 {
mbed_official 133:d4dda5c437f0 809 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 810 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 811 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_FRMOR);
mbed_official 133:d4dda5c437f0 812 }
mbed_official 133:d4dda5c437f0 813
mbed_official 133:d4dda5c437f0 814 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_XFRC)
mbed_official 133:d4dda5c437f0 815 {
mbed_official 133:d4dda5c437f0 816
mbed_official 133:d4dda5c437f0 817 if (hhcd->Init.dma_enable)
mbed_official 133:d4dda5c437f0 818 {
mbed_official 133:d4dda5c437f0 819 hhcd->hc[chnum].xfer_count = hhcd->hc[chnum].xfer_len - \
mbed_official 133:d4dda5c437f0 820 (USBx_HC(chnum)->HCTSIZ & USB_OTG_HCTSIZ_XFRSIZ);
mbed_official 133:d4dda5c437f0 821 }
mbed_official 133:d4dda5c437f0 822
mbed_official 133:d4dda5c437f0 823 hhcd->hc[chnum].state = HC_XFRC;
mbed_official 133:d4dda5c437f0 824 hhcd->hc[chnum].ErrCnt = 0;
mbed_official 133:d4dda5c437f0 825 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_XFRC);
mbed_official 133:d4dda5c437f0 826
mbed_official 133:d4dda5c437f0 827
mbed_official 133:d4dda5c437f0 828 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL)||
mbed_official 133:d4dda5c437f0 829 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK))
mbed_official 133:d4dda5c437f0 830 {
mbed_official 133:d4dda5c437f0 831 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 832 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 833 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 834
mbed_official 133:d4dda5c437f0 835 }
mbed_official 133:d4dda5c437f0 836 else if(hhcd->hc[chnum].ep_type == EP_TYPE_INTR)
mbed_official 133:d4dda5c437f0 837 {
mbed_official 133:d4dda5c437f0 838 USBx_HC(chnum)->HCCHAR |= USB_OTG_HCCHAR_ODDFRM;
mbed_official 133:d4dda5c437f0 839 hhcd->hc[chnum].urb_state = URB_DONE;
mbed_official 133:d4dda5c437f0 840 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
mbed_official 133:d4dda5c437f0 841 }
mbed_official 133:d4dda5c437f0 842 hhcd->hc[chnum].toggle_in ^= 1;
mbed_official 133:d4dda5c437f0 843
mbed_official 133:d4dda5c437f0 844 }
mbed_official 133:d4dda5c437f0 845 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_CHH)
mbed_official 133:d4dda5c437f0 846 {
mbed_official 133:d4dda5c437f0 847 __HAL_HCD_MASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 848
mbed_official 133:d4dda5c437f0 849 if(hhcd->hc[chnum].state == HC_XFRC)
mbed_official 133:d4dda5c437f0 850 {
mbed_official 133:d4dda5c437f0 851 hhcd->hc[chnum].urb_state = URB_DONE;
mbed_official 133:d4dda5c437f0 852 }
mbed_official 133:d4dda5c437f0 853
mbed_official 133:d4dda5c437f0 854 else if (hhcd->hc[chnum].state == HC_STALL)
mbed_official 133:d4dda5c437f0 855 {
mbed_official 133:d4dda5c437f0 856 hhcd->hc[chnum].urb_state = URB_STALL;
mbed_official 133:d4dda5c437f0 857 }
mbed_official 133:d4dda5c437f0 858
mbed_official 133:d4dda5c437f0 859 else if((hhcd->hc[chnum].state == HC_XACTERR) ||
mbed_official 133:d4dda5c437f0 860 (hhcd->hc[chnum].state == HC_DATATGLERR))
mbed_official 133:d4dda5c437f0 861 {
mbed_official 133:d4dda5c437f0 862 if(hhcd->hc[chnum].ErrCnt++ > 3)
mbed_official 133:d4dda5c437f0 863 {
mbed_official 133:d4dda5c437f0 864 hhcd->hc[chnum].ErrCnt = 0;
mbed_official 133:d4dda5c437f0 865 hhcd->hc[chnum].urb_state = URB_ERROR;
mbed_official 133:d4dda5c437f0 866 }
mbed_official 133:d4dda5c437f0 867 else
mbed_official 133:d4dda5c437f0 868 {
mbed_official 133:d4dda5c437f0 869 hhcd->hc[chnum].urb_state = URB_NOTREADY;
mbed_official 133:d4dda5c437f0 870 }
mbed_official 133:d4dda5c437f0 871
mbed_official 133:d4dda5c437f0 872 /* re-activate the channel */
mbed_official 133:d4dda5c437f0 873 USBx_HC(chnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHDIS;
mbed_official 133:d4dda5c437f0 874 USBx_HC(chnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA;
mbed_official 133:d4dda5c437f0 875 }
mbed_official 133:d4dda5c437f0 876 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
mbed_official 133:d4dda5c437f0 877 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
mbed_official 133:d4dda5c437f0 878 }
mbed_official 133:d4dda5c437f0 879
mbed_official 133:d4dda5c437f0 880 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_TXERR)
mbed_official 133:d4dda5c437f0 881 {
mbed_official 133:d4dda5c437f0 882 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 883 hhcd->hc[chnum].ErrCnt++;
mbed_official 133:d4dda5c437f0 884 hhcd->hc[chnum].state = HC_XACTERR;
mbed_official 133:d4dda5c437f0 885 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 886 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_TXERR);
mbed_official 133:d4dda5c437f0 887 }
mbed_official 133:d4dda5c437f0 888 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_NAK)
mbed_official 133:d4dda5c437f0 889 {
mbed_official 133:d4dda5c437f0 890 if(hhcd->hc[chnum].ep_type == EP_TYPE_INTR)
mbed_official 133:d4dda5c437f0 891 {
mbed_official 133:d4dda5c437f0 892 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 893 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 894 }
mbed_official 133:d4dda5c437f0 895 else if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL)||
mbed_official 133:d4dda5c437f0 896 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK))
mbed_official 133:d4dda5c437f0 897 {
mbed_official 133:d4dda5c437f0 898 /* re-activate the channel */
mbed_official 133:d4dda5c437f0 899 USBx_HC(chnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHDIS;
mbed_official 133:d4dda5c437f0 900 USBx_HC(chnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA;
mbed_official 133:d4dda5c437f0 901
mbed_official 133:d4dda5c437f0 902 }
mbed_official 133:d4dda5c437f0 903 hhcd->hc[chnum].state = HC_NAK;
mbed_official 133:d4dda5c437f0 904 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 905 }
mbed_official 133:d4dda5c437f0 906 }
mbed_official 133:d4dda5c437f0 907
mbed_official 133:d4dda5c437f0 908 /**
mbed_official 133:d4dda5c437f0 909 * @brief This function handles Host Channel OUT interrupt requests.
mbed_official 133:d4dda5c437f0 910 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 911 * @param chnum : Channel number
mbed_official 133:d4dda5c437f0 912 * This parameter can be a value from 1 to 15
mbed_official 133:d4dda5c437f0 913 * @retval none
mbed_official 133:d4dda5c437f0 914 */
mbed_official 133:d4dda5c437f0 915 static void HCD_HC_OUT_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum)
mbed_official 133:d4dda5c437f0 916 {
mbed_official 133:d4dda5c437f0 917 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
mbed_official 133:d4dda5c437f0 918
mbed_official 133:d4dda5c437f0 919 if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_AHBERR)
mbed_official 133:d4dda5c437f0 920 {
mbed_official 133:d4dda5c437f0 921 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_AHBERR);
mbed_official 133:d4dda5c437f0 922 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 923 }
mbed_official 133:d4dda5c437f0 924 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_ACK)
mbed_official 133:d4dda5c437f0 925 {
mbed_official 133:d4dda5c437f0 926 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_ACK);
mbed_official 133:d4dda5c437f0 927
mbed_official 133:d4dda5c437f0 928 if( hhcd->hc[chnum].do_ping == 1)
mbed_official 133:d4dda5c437f0 929 {
mbed_official 133:d4dda5c437f0 930 hhcd->hc[chnum].state = HC_NYET;
mbed_official 133:d4dda5c437f0 931 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 932 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 933 hhcd->hc[chnum].urb_state = URB_NOTREADY;
mbed_official 133:d4dda5c437f0 934 }
mbed_official 133:d4dda5c437f0 935 }
mbed_official 133:d4dda5c437f0 936
mbed_official 133:d4dda5c437f0 937 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_NYET)
mbed_official 133:d4dda5c437f0 938 {
mbed_official 133:d4dda5c437f0 939 hhcd->hc[chnum].state = HC_NYET;
mbed_official 133:d4dda5c437f0 940 hhcd->hc[chnum].ErrCnt= 0;
mbed_official 133:d4dda5c437f0 941 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 942 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 943 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NYET);
mbed_official 133:d4dda5c437f0 944
mbed_official 133:d4dda5c437f0 945 }
mbed_official 133:d4dda5c437f0 946
mbed_official 133:d4dda5c437f0 947 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_FRMOR)
mbed_official 133:d4dda5c437f0 948 {
mbed_official 133:d4dda5c437f0 949 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 950 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 951 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_FRMOR);
mbed_official 133:d4dda5c437f0 952 }
mbed_official 133:d4dda5c437f0 953
mbed_official 133:d4dda5c437f0 954 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_XFRC)
mbed_official 133:d4dda5c437f0 955 {
mbed_official 133:d4dda5c437f0 956 hhcd->hc[chnum].ErrCnt = 0;
mbed_official 133:d4dda5c437f0 957 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 958 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 959 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_XFRC);
mbed_official 133:d4dda5c437f0 960 hhcd->hc[chnum].state = HC_XFRC;
mbed_official 133:d4dda5c437f0 961
mbed_official 133:d4dda5c437f0 962 }
mbed_official 133:d4dda5c437f0 963
mbed_official 133:d4dda5c437f0 964 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_STALL)
mbed_official 133:d4dda5c437f0 965 {
mbed_official 133:d4dda5c437f0 966 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_STALL);
mbed_official 133:d4dda5c437f0 967 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 968 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 969 hhcd->hc[chnum].state = HC_STALL;
mbed_official 133:d4dda5c437f0 970 }
mbed_official 133:d4dda5c437f0 971
mbed_official 133:d4dda5c437f0 972 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_NAK)
mbed_official 133:d4dda5c437f0 973 {
mbed_official 133:d4dda5c437f0 974 hhcd->hc[chnum].ErrCnt = 0;
mbed_official 133:d4dda5c437f0 975 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 976 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 977 hhcd->hc[chnum].state = HC_NAK;
mbed_official 133:d4dda5c437f0 978 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 979 }
mbed_official 133:d4dda5c437f0 980
mbed_official 133:d4dda5c437f0 981 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_TXERR)
mbed_official 133:d4dda5c437f0 982 {
mbed_official 133:d4dda5c437f0 983 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 984 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 985 hhcd->hc[chnum].state = HC_XACTERR;
mbed_official 133:d4dda5c437f0 986 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_TXERR);
mbed_official 133:d4dda5c437f0 987 }
mbed_official 133:d4dda5c437f0 988
mbed_official 133:d4dda5c437f0 989 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_DTERR)
mbed_official 133:d4dda5c437f0 990 {
mbed_official 133:d4dda5c437f0 991 __HAL_HCD_UNMASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 992 USB_HC_Halt(hhcd->Instance, chnum);
mbed_official 133:d4dda5c437f0 993 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_NAK);
mbed_official 133:d4dda5c437f0 994 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_DTERR);
mbed_official 133:d4dda5c437f0 995 hhcd->hc[chnum].state = HC_DATATGLERR;
mbed_official 133:d4dda5c437f0 996 }
mbed_official 133:d4dda5c437f0 997
mbed_official 133:d4dda5c437f0 998
mbed_official 133:d4dda5c437f0 999 else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_CHH)
mbed_official 133:d4dda5c437f0 1000 {
mbed_official 133:d4dda5c437f0 1001 __HAL_HCD_MASK_HALT_HC_INT(chnum);
mbed_official 133:d4dda5c437f0 1002
mbed_official 133:d4dda5c437f0 1003 if(hhcd->hc[chnum].state == HC_XFRC)
mbed_official 133:d4dda5c437f0 1004 {
mbed_official 133:d4dda5c437f0 1005 hhcd->hc[chnum].urb_state = URB_DONE;
mbed_official 133:d4dda5c437f0 1006 if (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)
mbed_official 133:d4dda5c437f0 1007 {
mbed_official 133:d4dda5c437f0 1008 hhcd->hc[chnum].toggle_out ^= 1;
mbed_official 133:d4dda5c437f0 1009 }
mbed_official 133:d4dda5c437f0 1010 }
mbed_official 133:d4dda5c437f0 1011 else if (hhcd->hc[chnum].state == HC_NAK)
mbed_official 133:d4dda5c437f0 1012 {
mbed_official 133:d4dda5c437f0 1013 hhcd->hc[chnum].urb_state = URB_NOTREADY;
mbed_official 133:d4dda5c437f0 1014 }
mbed_official 133:d4dda5c437f0 1015
mbed_official 133:d4dda5c437f0 1016 else if (hhcd->hc[chnum].state == HC_NYET)
mbed_official 133:d4dda5c437f0 1017 {
mbed_official 133:d4dda5c437f0 1018 hhcd->hc[chnum].urb_state = URB_NOTREADY;
mbed_official 133:d4dda5c437f0 1019 hhcd->hc[chnum].do_ping = 0;
mbed_official 133:d4dda5c437f0 1020 }
mbed_official 133:d4dda5c437f0 1021
mbed_official 133:d4dda5c437f0 1022 else if (hhcd->hc[chnum].state == HC_STALL)
mbed_official 133:d4dda5c437f0 1023 {
mbed_official 133:d4dda5c437f0 1024 hhcd->hc[chnum].urb_state = URB_STALL;
mbed_official 133:d4dda5c437f0 1025 }
mbed_official 133:d4dda5c437f0 1026
mbed_official 133:d4dda5c437f0 1027 else if((hhcd->hc[chnum].state == HC_XACTERR) ||
mbed_official 133:d4dda5c437f0 1028 (hhcd->hc[chnum].state == HC_DATATGLERR))
mbed_official 133:d4dda5c437f0 1029 {
mbed_official 133:d4dda5c437f0 1030 if(hhcd->hc[chnum].ErrCnt++ > 3)
mbed_official 133:d4dda5c437f0 1031 {
mbed_official 133:d4dda5c437f0 1032 hhcd->hc[chnum].ErrCnt = 0;
mbed_official 133:d4dda5c437f0 1033 hhcd->hc[chnum].urb_state = URB_ERROR;
mbed_official 133:d4dda5c437f0 1034 }
mbed_official 133:d4dda5c437f0 1035 else
mbed_official 133:d4dda5c437f0 1036 {
mbed_official 133:d4dda5c437f0 1037 hhcd->hc[chnum].urb_state = URB_NOTREADY;
mbed_official 133:d4dda5c437f0 1038 }
mbed_official 133:d4dda5c437f0 1039
mbed_official 133:d4dda5c437f0 1040 /* re-activate the channel */
mbed_official 133:d4dda5c437f0 1041 USBx_HC(chnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHDIS;
mbed_official 133:d4dda5c437f0 1042 USBx_HC(chnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA;
mbed_official 133:d4dda5c437f0 1043 }
mbed_official 133:d4dda5c437f0 1044
mbed_official 133:d4dda5c437f0 1045 __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH);
mbed_official 133:d4dda5c437f0 1046 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state);
mbed_official 133:d4dda5c437f0 1047 }
mbed_official 133:d4dda5c437f0 1048 }
mbed_official 133:d4dda5c437f0 1049
mbed_official 133:d4dda5c437f0 1050 /**
mbed_official 133:d4dda5c437f0 1051 * @brief This function handles Rx Queue Level interrupt requests.
mbed_official 133:d4dda5c437f0 1052 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 1053 * @retval none
mbed_official 133:d4dda5c437f0 1054 */
mbed_official 133:d4dda5c437f0 1055 static void HCD_RXQLVL_IRQHandler (HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 1056 {
mbed_official 133:d4dda5c437f0 1057 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
mbed_official 133:d4dda5c437f0 1058 uint8_t channelnum =0;
mbed_official 133:d4dda5c437f0 1059 uint32_t pktsts;
mbed_official 133:d4dda5c437f0 1060 uint32_t pktcnt;
mbed_official 133:d4dda5c437f0 1061 uint32_t temp = 0;
mbed_official 133:d4dda5c437f0 1062
mbed_official 133:d4dda5c437f0 1063 temp = hhcd->Instance->GRXSTSP ;
mbed_official 133:d4dda5c437f0 1064 channelnum = temp & USB_OTG_GRXSTSP_EPNUM;
mbed_official 133:d4dda5c437f0 1065 pktsts = (temp & USB_OTG_GRXSTSP_PKTSTS) >> 17;
mbed_official 133:d4dda5c437f0 1066 pktcnt = (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
mbed_official 133:d4dda5c437f0 1067
mbed_official 133:d4dda5c437f0 1068 switch (pktsts)
mbed_official 133:d4dda5c437f0 1069 {
mbed_official 133:d4dda5c437f0 1070 case GRXSTS_PKTSTS_IN:
mbed_official 133:d4dda5c437f0 1071 /* Read the data into the host buffer. */
mbed_official 133:d4dda5c437f0 1072 if ((pktcnt > 0) && (hhcd->hc[channelnum].xfer_buff != (void *)0))
mbed_official 133:d4dda5c437f0 1073 {
mbed_official 133:d4dda5c437f0 1074
mbed_official 133:d4dda5c437f0 1075 USB_ReadPacket(hhcd->Instance, hhcd->hc[channelnum].xfer_buff, pktcnt);
mbed_official 133:d4dda5c437f0 1076
mbed_official 133:d4dda5c437f0 1077 /*manage multiple Xfer */
mbed_official 133:d4dda5c437f0 1078 hhcd->hc[channelnum].xfer_buff += pktcnt;
mbed_official 133:d4dda5c437f0 1079 hhcd->hc[channelnum].xfer_count += pktcnt;
mbed_official 133:d4dda5c437f0 1080
mbed_official 133:d4dda5c437f0 1081 if((USBx_HC(channelnum)->HCTSIZ & USB_OTG_HCTSIZ_PKTCNT) > 0)
mbed_official 133:d4dda5c437f0 1082 {
mbed_official 133:d4dda5c437f0 1083 /* re-activate the channel when more packets are expected */
mbed_official 133:d4dda5c437f0 1084 USBx_HC(channelnum)->HCCHAR &= ~USB_OTG_HCCHAR_CHDIS;
mbed_official 133:d4dda5c437f0 1085 USBx_HC(channelnum)->HCCHAR |= USB_OTG_HCCHAR_CHENA;
mbed_official 133:d4dda5c437f0 1086 hhcd->hc[channelnum].toggle_in ^= 1;
mbed_official 133:d4dda5c437f0 1087 }
mbed_official 133:d4dda5c437f0 1088 }
mbed_official 133:d4dda5c437f0 1089 break;
mbed_official 133:d4dda5c437f0 1090
mbed_official 133:d4dda5c437f0 1091 case GRXSTS_PKTSTS_DATA_TOGGLE_ERR:
mbed_official 133:d4dda5c437f0 1092 break;
mbed_official 133:d4dda5c437f0 1093 case GRXSTS_PKTSTS_IN_XFER_COMP:
mbed_official 133:d4dda5c437f0 1094 case GRXSTS_PKTSTS_CH_HALTED:
mbed_official 133:d4dda5c437f0 1095 default:
mbed_official 133:d4dda5c437f0 1096 break;
mbed_official 133:d4dda5c437f0 1097 }
mbed_official 133:d4dda5c437f0 1098 }
mbed_official 133:d4dda5c437f0 1099
mbed_official 133:d4dda5c437f0 1100 /**
mbed_official 133:d4dda5c437f0 1101 * @brief This function handles Host Port interrupt requests.
mbed_official 133:d4dda5c437f0 1102 * @param hhcd: HCD handle
mbed_official 133:d4dda5c437f0 1103 * @retval none
mbed_official 133:d4dda5c437f0 1104 */
mbed_official 133:d4dda5c437f0 1105 static void HCD_Port_IRQHandler (HCD_HandleTypeDef *hhcd)
mbed_official 133:d4dda5c437f0 1106 {
mbed_official 133:d4dda5c437f0 1107 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance;
mbed_official 133:d4dda5c437f0 1108 __IO uint32_t hprt0, hprt0_dup;
mbed_official 133:d4dda5c437f0 1109
mbed_official 133:d4dda5c437f0 1110 /* Handle Host Port Interrupts */
mbed_official 133:d4dda5c437f0 1111 hprt0 = USBx_HPRT0;
mbed_official 133:d4dda5c437f0 1112 hprt0_dup = USBx_HPRT0;
mbed_official 133:d4dda5c437f0 1113
mbed_official 133:d4dda5c437f0 1114 hprt0_dup &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET |\
mbed_official 133:d4dda5c437f0 1115 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG );
mbed_official 133:d4dda5c437f0 1116
mbed_official 133:d4dda5c437f0 1117 /* Check wether Port Connect Detected */
mbed_official 133:d4dda5c437f0 1118 if((hprt0 & USB_OTG_HPRT_PCDET) == USB_OTG_HPRT_PCDET)
mbed_official 133:d4dda5c437f0 1119 {
mbed_official 133:d4dda5c437f0 1120 if((hprt0 & USB_OTG_HPRT_PCSTS) == USB_OTG_HPRT_PCSTS)
mbed_official 133:d4dda5c437f0 1121 {
mbed_official 133:d4dda5c437f0 1122 USB_MASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
mbed_official 133:d4dda5c437f0 1123 HAL_HCD_Connect_Callback(hhcd);
mbed_official 133:d4dda5c437f0 1124 }
mbed_official 133:d4dda5c437f0 1125 hprt0_dup |= USB_OTG_HPRT_PCDET;
mbed_official 133:d4dda5c437f0 1126
mbed_official 133:d4dda5c437f0 1127 }
mbed_official 133:d4dda5c437f0 1128
mbed_official 133:d4dda5c437f0 1129 /* Check whether Port Enable Changed */
mbed_official 133:d4dda5c437f0 1130 if((hprt0 & USB_OTG_HPRT_PENCHNG) == USB_OTG_HPRT_PENCHNG)
mbed_official 133:d4dda5c437f0 1131 {
mbed_official 133:d4dda5c437f0 1132 hprt0_dup |= USB_OTG_HPRT_PENCHNG;
mbed_official 133:d4dda5c437f0 1133
mbed_official 133:d4dda5c437f0 1134 if((hprt0 & USB_OTG_HPRT_PENA) == USB_OTG_HPRT_PENA)
mbed_official 133:d4dda5c437f0 1135 {
mbed_official 133:d4dda5c437f0 1136 if(hhcd->Init.phy_itface == USB_OTG_EMBEDDED_PHY)
mbed_official 133:d4dda5c437f0 1137 {
mbed_official 133:d4dda5c437f0 1138 if ((hprt0 & USB_OTG_HPRT_PSPD) == (HPRT0_PRTSPD_LOW_SPEED << 17))
mbed_official 133:d4dda5c437f0 1139 {
mbed_official 133:d4dda5c437f0 1140 USB_InitFSLSPClkSel(hhcd->Instance ,HCFG_6_MHZ );
mbed_official 133:d4dda5c437f0 1141 }
mbed_official 133:d4dda5c437f0 1142 else
mbed_official 133:d4dda5c437f0 1143 {
mbed_official 133:d4dda5c437f0 1144 USB_InitFSLSPClkSel(hhcd->Instance ,HCFG_48_MHZ );
mbed_official 133:d4dda5c437f0 1145 }
mbed_official 133:d4dda5c437f0 1146 }
mbed_official 133:d4dda5c437f0 1147 else
mbed_official 133:d4dda5c437f0 1148 {
mbed_official 133:d4dda5c437f0 1149 if(hhcd->Init.speed == HCD_SPEED_FULL)
mbed_official 133:d4dda5c437f0 1150 {
mbed_official 133:d4dda5c437f0 1151 USBx_HOST->HFIR = (uint32_t)60000;
mbed_official 133:d4dda5c437f0 1152 }
mbed_official 133:d4dda5c437f0 1153 }
mbed_official 133:d4dda5c437f0 1154 HAL_HCD_Connect_Callback(hhcd);
mbed_official 133:d4dda5c437f0 1155
mbed_official 133:d4dda5c437f0 1156 if(hhcd->Init.speed == HCD_SPEED_HIGH)
mbed_official 133:d4dda5c437f0 1157 {
mbed_official 133:d4dda5c437f0 1158 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
mbed_official 133:d4dda5c437f0 1159 }
mbed_official 133:d4dda5c437f0 1160 }
mbed_official 133:d4dda5c437f0 1161 else
mbed_official 133:d4dda5c437f0 1162 {
mbed_official 133:d4dda5c437f0 1163 /* Cleanup HPRT */
mbed_official 133:d4dda5c437f0 1164 USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET |\
mbed_official 133:d4dda5c437f0 1165 USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG );
mbed_official 133:d4dda5c437f0 1166
mbed_official 133:d4dda5c437f0 1167 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
mbed_official 133:d4dda5c437f0 1168 }
mbed_official 133:d4dda5c437f0 1169 }
mbed_official 133:d4dda5c437f0 1170
mbed_official 133:d4dda5c437f0 1171 /* Check For an overcurrent */
mbed_official 133:d4dda5c437f0 1172 if((hprt0 & USB_OTG_HPRT_POCCHNG) == USB_OTG_HPRT_POCCHNG)
mbed_official 133:d4dda5c437f0 1173 {
mbed_official 133:d4dda5c437f0 1174 hprt0_dup |= USB_OTG_HPRT_POCCHNG;
mbed_official 133:d4dda5c437f0 1175 }
mbed_official 133:d4dda5c437f0 1176
mbed_official 133:d4dda5c437f0 1177 /* Clear Port Interrupts */
mbed_official 133:d4dda5c437f0 1178 USBx_HPRT0 = hprt0_dup;
mbed_official 133:d4dda5c437f0 1179 }
mbed_official 133:d4dda5c437f0 1180
mbed_official 133:d4dda5c437f0 1181 /**
mbed_official 133:d4dda5c437f0 1182 * @}
mbed_official 133:d4dda5c437f0 1183 */
mbed_official 133:d4dda5c437f0 1184
mbed_official 133:d4dda5c437f0 1185 #endif /* HAL_HCD_MODULE_ENABLED */
mbed_official 133:d4dda5c437f0 1186 /**
mbed_official 133:d4dda5c437f0 1187 * @}
mbed_official 133:d4dda5c437f0 1188 */
mbed_official 133:d4dda5c437f0 1189
mbed_official 133:d4dda5c437f0 1190 /**
mbed_official 133:d4dda5c437f0 1191 * @}
mbed_official 133:d4dda5c437f0 1192 */
mbed_official 133:d4dda5c437f0 1193
mbed_official 133:d4dda5c437f0 1194 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/