You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							250 lines
						
					
					
						
							8.2 KiB
						
					
					
				
			
		
		
	
	
							250 lines
						
					
					
						
							8.2 KiB
						
					
					
				| /** | |
|   ****************************************************************************** | |
|   * @file    stm32f1xx_hal_pcd_ex.c | |
|   * @author  MCD Application Team | |
|   * @brief   Extended PCD HAL module driver. | |
|   *          This file provides firmware functions to manage the following  | |
|   *          functionalities of the USB Peripheral Controller: | |
|   *           + Extended features functions: Update FIFO configuration,  | |
|   *           PMA configuration for EPs   | |
|   * | |
|   ****************************************************************************** | |
|   * @attention | |
|   * | |
|   * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |
|   * | |
|   * Redistribution and use in source and binary forms, with or without modification, | |
|   * are permitted provided that the following conditions are met: | |
|   *   1. Redistributions of source code must retain the above copyright notice, | |
|   *      this list of conditions and the following disclaimer. | |
|   *   2. Redistributions in binary form must reproduce the above copyright notice, | |
|   *      this list of conditions and the following disclaimer in the documentation | |
|   *      and/or other materials provided with the distribution. | |
|   *   3. Neither the name of STMicroelectronics nor the names of its contributors | |
|   *      may be used to endorse or promote products derived from this software | |
|   *      without specific prior written permission. | |
|   * | |
|   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
|   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
|   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
|   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
|   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
|   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
|   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
|   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
|   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
|   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
|   * | |
|   ****************************************************************************** | |
|   */ | |
|  | |
| /* Includes ------------------------------------------------------------------*/ | |
| #include "stm32f1xx_hal.h" | |
|  | |
| /** @addtogroup STM32F1xx_HAL_Driver | |
|   * @{ | |
|   */ | |
|  | |
| #ifdef HAL_PCD_MODULE_ENABLED | |
|  | |
| #if defined(STM32F102x6) || defined(STM32F102xB) || \ | |
|     defined(STM32F103x6) || defined(STM32F103xB) || \ | |
|     defined(STM32F103xE) || defined(STM32F103xG) || \ | |
|     defined(STM32F105xC) || defined(STM32F107xC) | |
|  | |
|  | |
| /** @defgroup PCDEx PCDEx | |
|   * @brief PCD Extended HAL module driver | |
|   * @{ | |
|   */ | |
|  | |
|  | |
| /* Private types -------------------------------------------------------------*/ | |
| /* Private variables ---------------------------------------------------------*/ | |
| /* Private constants ---------------------------------------------------------*/ | |
| /* Private macros ------------------------------------------------------------*/ | |
| /* Private functions ---------------------------------------------------------*/ | |
| /* Exported functions --------------------------------------------------------*/ | |
| /** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions | |
|   * @{ | |
|   */ | |
|  | |
| /** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions | |
|   * @brief    PCDEx control functions  | |
|   * | |
| @verbatim | |
|  =============================================================================== | |
|               ##### Extended Peripheral Control functions ##### | |
|  =============================================================================== | |
|     [..]  This section provides functions allowing to: | |
|       (+) Update FIFO (USB_OTG_FS) | |
|       (+) Update PMA configuration (USB) | |
|  | |
| @endverbatim | |
|   * @{ | |
|   */ | |
|  | |
| #if defined (USB_OTG_FS) | |
| /** | |
|   * @brief  Set Tx FIFO | |
|   * @param  hpcd: PCD handle | |
|   * @param  fifo: The number of Tx fifo | |
|   * @param  size: Fifo size | |
|   * @retval HAL status | |
|   */ | |
| HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size) | |
| { | |
|   uint8_t index = 0; | |
|   uint32_t Tx_Offset = 0U; | |
|    | |
|   /*  TXn min size = 16 words. (n  : Transmit FIFO index) | |
|       When a TxFIFO is not used, the Configuration should be as follows:  | |
|           case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes) | |
|          --> Txm can use the space allocated for Txn. | |
|          case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes) | |
|          --> Txn should be configured with the minimum space of 16 words | |
|      The FIFO is used optimally when used TxFIFOs are allocated in the top  | |
|          of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. | |
|      When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */ | |
|    | |
|   Tx_Offset = hpcd->Instance->GRXFSIZ; | |
|    | |
|   if(fifo == 0U) | |
|   { | |
|     hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (size << 16U) | Tx_Offset; | |
|   } | |
|   else | |
|   { | |
|     Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16U; | |
|     for(index = 0; index < (fifo - 1); index++) | |
|     { | |
|       Tx_Offset += (hpcd->Instance->DIEPTXF[index] >> 16U); | |
|     } | |
|      | |
|     /* Multiply Tx_Size by 2 to get higher performance */ | |
|     hpcd->Instance->DIEPTXF[fifo - 1U] = (size << 16U) | Tx_Offset; | |
|      | |
|   } | |
|    | |
|   return HAL_OK; | |
| } | |
|  | |
| /** | |
|   * @brief  Set Rx FIFO | |
|   * @param  hpcd: PCD handle | |
|   * @param  size: Size of Rx fifo | |
|   * @retval HAL status | |
|   */ | |
| HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size) | |
| { | |
|   hpcd->Instance->GRXFSIZ = size; | |
|   return HAL_OK; | |
| } | |
| #endif /* USB_OTG_FS */ | |
|  | |
| #if defined (USB) | |
| /** | |
|   * @brief  Configure PMA for EP | |
|   * @param  hpcd : Device instance | |
|   * @param  ep_addr: endpoint address | |
|   * @param  ep_kind: endpoint Kind | |
|   *                  USB_SNG_BUF: Single Buffer used | |
|   *                  USB_DBL_BUF: Double Buffer used | |
|   * @param  pmaadress: EP address in The PMA: In case of single buffer endpoint | |
|   *                   this parameter is 16-bit value providing the address | |
|   *                   in PMA allocated to endpoint. | |
|   *                   In case of double buffer endpoint this parameter | |
|   *                   is a 32-bit value providing the endpoint buffer 0 address | |
|   *                   in the LSB part of 32-bit value and endpoint buffer 1 address | |
|   *                   in the MSB part of 32-bit value. | |
|   * @retval HAL status | |
|   */ | |
|  | |
| HAL_StatusTypeDef  HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd,  | |
|                                        uint16_t ep_addr, | |
|                                        uint16_t ep_kind, | |
|                                        uint32_t pmaadress) | |
|  | |
| { | |
|   PCD_EPTypeDef *ep = NULL; | |
|    | |
|   /* initialize ep structure*/ | |
|   if ((ep_addr & 0x80U) == 0x80U) | |
|   { | |
|     ep = &hpcd->IN_ep[ep_addr & 0x7FU]; | |
|   } | |
|   else | |
|   { | |
|     ep = &hpcd->OUT_ep[ep_addr]; | |
|   } | |
|    | |
|   /* Here we check if the endpoint is single or double Buffer*/ | |
|   if (ep_kind == PCD_SNG_BUF) | |
|   { | |
|     /*Single Buffer*/ | |
|     ep->doublebuffer = 0U; | |
|     /*Configure te PMA*/ | |
|     ep->pmaadress = (uint16_t)pmaadress; | |
|   } | |
|   else /*USB_DBL_BUF*/ | |
|   { | |
|     /*Double Buffer Endpoint*/ | |
|     ep->doublebuffer = 1U; | |
|     /*Configure the PMA*/ | |
|     ep->pmaaddr0 =  pmaadress & 0x0000FFFFU; | |
|     ep->pmaaddr1 =  (pmaadress & 0xFFFF0000U) >> 16U; | |
|   } | |
|    | |
|   return HAL_OK;  | |
| } | |
| #endif /* USB */ | |
| /** | |
|   * @} | |
|   */ | |
|  | |
| /** @defgroup PCDEx_Exported_Functions_Group2 Peripheral State functions | |
|   * @brief    Manage device connection state   | |
|   * @{ | |
|   */ | |
| /** | |
|   * @brief  Software Device Connection,   | |
|   *         this function is not required by USB OTG FS peripheral, it is used  | |
|   *         only by USB Device FS peripheral. | |
|   * @param  hpcd: PCD handle | |
|   * @param  state: connection state (0 : disconnected / 1: connected) | |
|   * @retval None | |
|   */ | |
| __weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) | |
| { | |
|   /* Prevent unused argument(s) compilation warning */ | |
|   UNUSED(hpcd); | |
|   UNUSED(state); | |
|   /* NOTE : This function Should not be modified, when the callback is needed, | |
|             the HAL_PCDEx_SetConnectionState could be implemented in the user file | |
|    */  | |
| } | |
| /** | |
|   * @} | |
|   */ | |
|  | |
| /** | |
|   * @} | |
|   */ | |
|  | |
| /** | |
|   * @} | |
|   */ | |
|  | |
| #endif /* STM32F102x6 || STM32F102xB || */ | |
|        /* STM32F103x6 || STM32F103xB || */ | |
|        /* STM32F103xE || STM32F103xG || */ | |
|        /* STM32F105xC || STM32F107xC    */ | |
|  | |
| #endif /* HAL_PCD_MODULE_ENABLED */ | |
|  | |
|  | |
| /** | |
|   * @} | |
|   */ | |
|  | |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | |
| 
 |