]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/ST_Library/stm32f7xx_hal_pcd_ex.c
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / ST_Library / stm32f7xx_hal_pcd_ex.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f7xx_hal_pcd_ex.c\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    24-March-2015\r
7   * @brief   PCD HAL module driver.\r
8   *          This file provides firmware functions to manage the following \r
9   *          functionalities of the USB Peripheral Controller:\r
10   *           + Extended features functions\r
11   *\r
12   ******************************************************************************\r
13   * @attention\r
14   *\r
15   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
16   *\r
17   * Redistribution and use in source and binary forms, with or without modification,\r
18   * are permitted provided that the following conditions are met:\r
19   *   1. Redistributions of source code must retain the above copyright notice,\r
20   *      this list of conditions and the following disclaimer.\r
21   *   2. Redistributions in binary form must reproduce the above copyright notice,\r
22   *      this list of conditions and the following disclaimer in the documentation\r
23   *      and/or other materials provided with the distribution.\r
24   *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
25   *      may be used to endorse or promote products derived from this software\r
26   *      without specific prior written permission.\r
27   *\r
28   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
29   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
30   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
31   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
32   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
33   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
34   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
35   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
36   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
37   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
38   *\r
39   ******************************************************************************\r
40   */ \r
41 \r
42 /* Includes ------------------------------------------------------------------*/\r
43 #include "stm32f7xx_hal.h"\r
44 \r
45 /** @addtogroup STM32F7xx_HAL_Driver\r
46   * @{\r
47   */\r
48 \r
49 /** @defgroup PCDEx PCDEx\r
50   * @brief PCD Extended HAL module driver\r
51   * @{\r
52   */\r
53 #ifdef HAL_PCD_MODULE_ENABLED\r
54 \r
55 /* Private types -------------------------------------------------------------*/\r
56 /* Private variables ---------------------------------------------------------*/\r
57 /* Private constants ---------------------------------------------------------*/\r
58 /* Private macros ------------------------------------------------------------*/\r
59 /* Private functions ---------------------------------------------------------*/\r
60 /* Exported functions --------------------------------------------------------*/\r
61 \r
62 /** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions\r
63   * @{\r
64   */\r
65 \r
66 /** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions\r
67   * @brief    PCDEx control functions \r
68  *\r
69 @verbatim   \r
70  ===============================================================================\r
71                  ##### Extended features functions #####\r
72  ===============================================================================  \r
73     [..]  This section provides functions allowing to:\r
74       (+) Update FIFO configuration\r
75 \r
76 @endverbatim\r
77   * @{\r
78   */\r
79 \r
80 /**\r
81   * @brief  Set Tx FIFO\r
82   * @param  hpcd: PCD handle\r
83   * @param  fifo: The number of Tx fifo\r
84   * @param  size: Fifo size\r
85   * @retval HAL status\r
86   */\r
87 HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)\r
88 {\r
89   uint8_t i = 0;\r
90   uint32_t Tx_Offset = 0;\r
91 \r
92   /*  TXn min size = 16 words. (n  : Transmit FIFO index)\r
93       When a TxFIFO is not used, the Configuration should be as follows: \r
94           case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)\r
95          --> Txm can use the space allocated for Txn.\r
96          case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)\r
97          --> Txn should be configured with the minimum space of 16 words\r
98      The FIFO is used optimally when used TxFIFOs are allocated in the top \r
99          of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.\r
100      When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */\r
101   \r
102   Tx_Offset = hpcd->Instance->GRXFSIZ;\r
103   \r
104   if(fifo == 0)\r
105   {\r
106     hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16) | Tx_Offset;\r
107   }\r
108   else\r
109   {\r
110     Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;\r
111     for (i = 0; i < (fifo - 1); i++)\r
112     {\r
113       Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);\r
114     }\r
115     \r
116     /* Multiply Tx_Size by 2 to get higher performance */\r
117     hpcd->Instance->DIEPTXF[fifo - 1] = (size << 16) | Tx_Offset;\r
118     \r
119   }\r
120   \r
121   return HAL_OK;\r
122 }\r
123 \r
124 /**\r
125   * @brief  Set Rx FIFO\r
126   * @param  hpcd: PCD handle\r
127   * @param  size: Size of Rx fifo\r
128   * @retval HAL status\r
129   */\r
130 HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)\r
131 {\r
132   hpcd->Instance->GRXFSIZ = size;\r
133   \r
134   return HAL_OK;\r
135 }\r
136 \r
137 /**\r
138   * @brief  HAL_PCDEx_ActivateLPM : active LPM Feature\r
139   * @param  hpcd: PCD handle\r
140   * @retval HAL status\r
141   */\r
142 HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd)\r
143 {\r
144   USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;  \r
145   \r
146   hpcd->lpm_active = ENABLE;\r
147   hpcd->LPM_State = LPM_L0;\r
148   USBx->GINTMSK |= USB_OTG_GINTMSK_LPMINTM;\r
149   USBx->GLPMCFG |= (USB_OTG_GLPMCFG_LPMEN | USB_OTG_GLPMCFG_LPMACK | USB_OTG_GLPMCFG_ENBESL);\r
150   \r
151   return HAL_OK;  \r
152 }\r
153 \r
154 /**\r
155   * @brief  HAL_PCDEx_DeActivateLPM : de-active LPM feature\r
156   * @param  hpcd: PCD handle\r
157   * @retval HAL status\r
158   */\r
159 HAL_StatusTypeDef HAL_PCDEx_DeActivateLPM(PCD_HandleTypeDef *hpcd)\r
160 {\r
161   USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;  \r
162   \r
163   hpcd->lpm_active = DISABLE;\r
164   USBx->GINTMSK &= ~USB_OTG_GINTMSK_LPMINTM;\r
165   USBx->GLPMCFG &= ~(USB_OTG_GLPMCFG_LPMEN | USB_OTG_GLPMCFG_LPMACK | USB_OTG_GLPMCFG_ENBESL);\r
166   \r
167   return HAL_OK;  \r
168 }\r
169 \r
170 /**\r
171   * @brief  HAL_PCDEx_LPM_Callback : Send LPM message to user layer\r
172   * @param  hpcd: PCD handle\r
173   * @param  msg: LPM message\r
174   * @retval HAL status\r
175   */\r
176 __weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)\r
177 {\r
178 }\r
179 \r
180 /**\r
181   * @}\r
182   */\r
183 \r
184 /**\r
185   * @}\r
186   */\r
187 \r
188 #endif /* HAL_PCD_MODULE_ENABLED */\r
189 /**\r
190   * @}\r
191   */\r
192 \r
193 /**\r
194   * @}\r
195   */\r
196 \r
197 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r