F1 and F3 HAL / LL libraries
[betaflight.git] / lib / main / STM32F1 / Drivers / STM32F1xx_HAL_Driver / Src / stm32f1xx_hal_pcd_ex.c
blob03f6f76144932d84758b95b3e0da15e9559b834a
1 /**
2 ******************************************************************************
3 * @file stm32f1xx_hal_pcd_ex.c
4 * @author MCD Application Team
5 * @version V1.1.1
6 * @date 12-May-2017
7 * @brief Extended PCD HAL module driver.
8 * This file provides firmware functions to manage the following
9 * functionalities of the USB Peripheral Controller:
10 * + Extended features functions: Update FIFO configuration,
11 * PMA configuration for EPs
13 ******************************************************************************
14 * @attention
16 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
18 * Redistribution and use in source and binary forms, with or without modification,
19 * are permitted provided that the following conditions are met:
20 * 1. Redistributions of source code must retain the above copyright notice,
21 * this list of conditions and the following disclaimer.
22 * 2. Redistributions in binary form must reproduce the above copyright notice,
23 * this list of conditions and the following disclaimer in the documentation
24 * and/or other materials provided with the distribution.
25 * 3. Neither the name of STMicroelectronics nor the names of its contributors
26 * may be used to endorse or promote products derived from this software
27 * without specific prior written permission.
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
30 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
33 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
37 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 ******************************************************************************
43 /* Includes ------------------------------------------------------------------*/
44 #include "stm32f1xx_hal.h"
46 /** @addtogroup STM32F1xx_HAL_Driver
47 * @{
50 #ifdef HAL_PCD_MODULE_ENABLED
52 #if defined(STM32F102x6) || defined(STM32F102xB) || \
53 defined(STM32F103x6) || defined(STM32F103xB) || \
54 defined(STM32F103xE) || defined(STM32F103xG) || \
55 defined(STM32F105xC) || defined(STM32F107xC)
58 /** @defgroup PCDEx PCDEx
59 * @brief PCD Extended HAL module driver
60 * @{
64 /* Private types -------------------------------------------------------------*/
65 /* Private variables ---------------------------------------------------------*/
66 /* Private constants ---------------------------------------------------------*/
67 /* Private macros ------------------------------------------------------------*/
68 /* Private functions ---------------------------------------------------------*/
69 /* Exported functions --------------------------------------------------------*/
70 /** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions
71 * @{
74 /** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
75 * @brief PCDEx control functions
77 @verbatim
78 ===============================================================================
79 ##### Extended Peripheral Control functions #####
80 ===============================================================================
81 [..] This section provides functions allowing to:
82 (+) Update FIFO (USB_OTG_FS)
83 (+) Update PMA configuration (USB)
85 @endverbatim
86 * @{
89 #if defined (USB_OTG_FS)
90 /**
91 * @brief Set Tx FIFO
92 * @param hpcd: PCD handle
93 * @param fifo: The number of Tx fifo
94 * @param size: Fifo size
95 * @retval HAL status
97 HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
99 uint8_t index = 0;
100 uint32_t Tx_Offset = 0U;
102 /* TXn min size = 16 words. (n : Transmit FIFO index)
103 When a TxFIFO is not used, the Configuration should be as follows:
104 case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes)
105 --> Txm can use the space allocated for Txn.
106 case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes)
107 --> Txn should be configured with the minimum space of 16 words
108 The FIFO is used optimally when used TxFIFOs are allocated in the top
109 of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
110 When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
112 Tx_Offset = hpcd->Instance->GRXFSIZ;
114 if(fifo == 0U)
116 hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16U) | Tx_Offset;
118 else
120 Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16U;
121 for(index = 0; index < (fifo - 1); index++)
123 Tx_Offset += (hpcd->Instance->DIEPTXF[index] >> 16U);
126 /* Multiply Tx_Size by 2 to get higher performance */
127 hpcd->Instance->DIEPTXF[fifo - 1U] = (size << 16U) | Tx_Offset;
131 return HAL_OK;
135 * @brief Set Rx FIFO
136 * @param hpcd: PCD handle
137 * @param size: Size of Rx fifo
138 * @retval HAL status
140 HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
142 hpcd->Instance->GRXFSIZ = size;
143 return HAL_OK;
145 #endif /* USB_OTG_FS */
147 #if defined (USB)
149 * @brief Configure PMA for EP
150 * @param hpcd : Device instance
151 * @param ep_addr: endpoint address
152 * @param ep_kind: endpoint Kind
153 * USB_SNG_BUF: Single Buffer used
154 * USB_DBL_BUF: Double Buffer used
155 * @param pmaadress: EP address in The PMA: In case of single buffer endpoint
156 * this parameter is 16-bit value providing the address
157 * in PMA allocated to endpoint.
158 * In case of double buffer endpoint this parameter
159 * is a 32-bit value providing the endpoint buffer 0 address
160 * in the LSB part of 32-bit value and endpoint buffer 1 address
161 * in the MSB part of 32-bit value.
162 * @retval HAL status
165 HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd,
166 uint16_t ep_addr,
167 uint16_t ep_kind,
168 uint32_t pmaadress)
171 PCD_EPTypeDef *ep = NULL;
173 /* initialize ep structure*/
174 if ((ep_addr & 0x80U) == 0x80U)
176 ep = &hpcd->IN_ep[ep_addr & 0x7FU];
178 else
180 ep = &hpcd->OUT_ep[ep_addr];
183 /* Here we check if the endpoint is single or double Buffer*/
184 if (ep_kind == PCD_SNG_BUF)
186 /*Single Buffer*/
187 ep->doublebuffer = 0U;
188 /*Configure te PMA*/
189 ep->pmaadress = (uint16_t)pmaadress;
191 else /*USB_DBL_BUF*/
193 /*Double Buffer Endpoint*/
194 ep->doublebuffer = 1U;
195 /*Configure the PMA*/
196 ep->pmaaddr0 = pmaadress & 0x0000FFFFU;
197 ep->pmaaddr1 = (pmaadress & 0xFFFF0000U) >> 16U;
200 return HAL_OK;
202 #endif /* USB */
204 * @}
207 /** @defgroup PCDEx_Exported_Functions_Group2 Peripheral State functions
208 * @brief Manage device connection state
209 * @{
212 * @brief Software Device Connection,
213 * this function is not required by USB OTG FS peripheral, it is used
214 * only by USB Device FS peripheral.
215 * @param hpcd: PCD handle
216 * @param state: connection state (0 : disconnected / 1: connected)
217 * @retval None
219 __weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
221 /* Prevent unused argument(s) compilation warning */
222 UNUSED(hpcd);
223 UNUSED(state);
224 /* NOTE : This function Should not be modified, when the callback is needed,
225 the HAL_PCDEx_SetConnectionState could be implemented in the user file
229 * @}
233 * @}
237 * @}
240 #endif /* STM32F102x6 || STM32F102xB || */
241 /* STM32F103x6 || STM32F103xB || */
242 /* STM32F103xE || STM32F103xG || */
243 /* STM32F105xC || STM32F107xC */
245 #endif /* HAL_PCD_MODULE_ENABLED */
249 * @}
252 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/