mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /**
AnnaBridge 189:f392fc9709a3 2 ******************************************************************************
AnnaBridge 189:f392fc9709a3 3 * @file stm32h7xx_hal_smartcard_ex.c
AnnaBridge 189:f392fc9709a3 4 * @author MCD Application Team
AnnaBridge 189:f392fc9709a3 5 * @brief SMARTCARD HAL module driver.
AnnaBridge 189:f392fc9709a3 6 * This file provides extended firmware functions to manage the following
AnnaBridge 189:f392fc9709a3 7 * functionalities of the SmartCard.
AnnaBridge 189:f392fc9709a3 8 * + Initialization and de-initialization functions
AnnaBridge 189:f392fc9709a3 9 * + Peripheral Control functions
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 @verbatim
AnnaBridge 189:f392fc9709a3 12 =============================================================================
AnnaBridge 189:f392fc9709a3 13 ##### SMARTCARD peripheral extended features #####
AnnaBridge 189:f392fc9709a3 14 =============================================================================
AnnaBridge 189:f392fc9709a3 15 [..]
AnnaBridge 189:f392fc9709a3 16 The Extended SMARTCARD HAL driver can be used as follows:
AnnaBridge 189:f392fc9709a3 17
AnnaBridge 189:f392fc9709a3 18 (#) After having configured the SMARTCARD basic features with HAL_SMARTCARD_Init(),
AnnaBridge 189:f392fc9709a3 19 then program SMARTCARD advanced features if required (TX/RX pins swap, TimeOut,
AnnaBridge 189:f392fc9709a3 20 auto-retry counter,...) in the hsmartcard AdvancedInit structure.
AnnaBridge 189:f392fc9709a3 21
AnnaBridge 189:f392fc9709a3 22 (#) FIFO mode enabling/disabling and RX/TX FIFO threshold programming.
AnnaBridge 189:f392fc9709a3 23
AnnaBridge 189:f392fc9709a3 24 -@- When SMARTCARD operates in FIFO mode, FIFO mode must be enabled prior
AnnaBridge 189:f392fc9709a3 25 starting RX/TX transfers. Also RX/TX FIFO thresholds must be
AnnaBridge 189:f392fc9709a3 26 configured prior starting RX/TX transfers.
AnnaBridge 189:f392fc9709a3 27
AnnaBridge 189:f392fc9709a3 28 @endverbatim
AnnaBridge 189:f392fc9709a3 29 ******************************************************************************
AnnaBridge 189:f392fc9709a3 30 * @attention
AnnaBridge 189:f392fc9709a3 31 *
AnnaBridge 189:f392fc9709a3 32 * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
AnnaBridge 189:f392fc9709a3 33 * All rights reserved.</center></h2>
AnnaBridge 189:f392fc9709a3 34 *
AnnaBridge 189:f392fc9709a3 35 * This software component is licensed by ST under BSD 3-Clause license,
AnnaBridge 189:f392fc9709a3 36 * the "License"; You may not use this file except in compliance with the
AnnaBridge 189:f392fc9709a3 37 * License. You may obtain a copy of the License at:
AnnaBridge 189:f392fc9709a3 38 * opensource.org/licenses/BSD-3-Clause
AnnaBridge 189:f392fc9709a3 39 *
AnnaBridge 189:f392fc9709a3 40 ******************************************************************************
AnnaBridge 189:f392fc9709a3 41 */
AnnaBridge 189:f392fc9709a3 42
AnnaBridge 189:f392fc9709a3 43 /* Includes ------------------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 44 #include "stm32h7xx_hal.h"
AnnaBridge 189:f392fc9709a3 45
AnnaBridge 189:f392fc9709a3 46 /** @addtogroup STM32H7xx_HAL_Driver
AnnaBridge 189:f392fc9709a3 47 * @{
AnnaBridge 189:f392fc9709a3 48 */
AnnaBridge 189:f392fc9709a3 49
AnnaBridge 189:f392fc9709a3 50 /** @defgroup SMARTCARDEx SMARTCARDEx
AnnaBridge 189:f392fc9709a3 51 * @brief SMARTCARD Extended HAL module driver
AnnaBridge 189:f392fc9709a3 52 * @{
AnnaBridge 189:f392fc9709a3 53 */
AnnaBridge 189:f392fc9709a3 54 #ifdef HAL_SMARTCARD_MODULE_ENABLED
AnnaBridge 189:f392fc9709a3 55
AnnaBridge 189:f392fc9709a3 56 /* Private typedef -----------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 57 /* Private define ------------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 58 /* UART RX FIFO depth */
AnnaBridge 189:f392fc9709a3 59 #define RX_FIFO_DEPTH 8U
AnnaBridge 189:f392fc9709a3 60
AnnaBridge 189:f392fc9709a3 61 /* UART TX FIFO depth */
AnnaBridge 189:f392fc9709a3 62 #define TX_FIFO_DEPTH 8U
AnnaBridge 189:f392fc9709a3 63
AnnaBridge 189:f392fc9709a3 64 /* Private macros ------------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 65 /* Private variables ---------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 66 /* Private function prototypes -----------------------------------------------*/
AnnaBridge 189:f392fc9709a3 67 static void SMARTCARDEx_SetNbDataToProcess(SMARTCARD_HandleTypeDef *hsmartcard);
AnnaBridge 189:f392fc9709a3 68
AnnaBridge 189:f392fc9709a3 69 /* Exported functions --------------------------------------------------------*/
AnnaBridge 189:f392fc9709a3 70 /** @defgroup SMARTCARDEx_Exported_Functions SMARTCARD Extended Exported Functions
AnnaBridge 189:f392fc9709a3 71 * @{
AnnaBridge 189:f392fc9709a3 72 */
AnnaBridge 189:f392fc9709a3 73
AnnaBridge 189:f392fc9709a3 74 /** @defgroup SMARTCARDEx_Exported_Functions_Group1 Extended Peripheral Control functions
AnnaBridge 189:f392fc9709a3 75 * @brief Extended control functions
AnnaBridge 189:f392fc9709a3 76 *
AnnaBridge 189:f392fc9709a3 77 @verbatim
AnnaBridge 189:f392fc9709a3 78 ===============================================================================
AnnaBridge 189:f392fc9709a3 79 ##### Peripheral Control functions #####
AnnaBridge 189:f392fc9709a3 80 ===============================================================================
AnnaBridge 189:f392fc9709a3 81 [..]
AnnaBridge 189:f392fc9709a3 82 This subsection provides a set of functions allowing to initialize the SMARTCARD.
AnnaBridge 189:f392fc9709a3 83 (+) HAL_SMARTCARDEx_BlockLength_Config() API allows to configure the Block Length on the fly
AnnaBridge 189:f392fc9709a3 84 (+) HAL_SMARTCARDEx_TimeOut_Config() API allows to configure the receiver timeout value on the fly
AnnaBridge 189:f392fc9709a3 85 (+) HAL_SMARTCARDEx_EnableReceiverTimeOut() API enables the receiver timeout feature
AnnaBridge 189:f392fc9709a3 86 (+) HAL_SMARTCARDEx_DisableReceiverTimeOut() API disables the receiver timeout feature
AnnaBridge 189:f392fc9709a3 87
AnnaBridge 189:f392fc9709a3 88 @endverbatim
AnnaBridge 189:f392fc9709a3 89 * @{
AnnaBridge 189:f392fc9709a3 90 */
AnnaBridge 189:f392fc9709a3 91
AnnaBridge 189:f392fc9709a3 92 /** @brief Update on the fly the SMARTCARD block length in RTOR register.
AnnaBridge 189:f392fc9709a3 93 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 94 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 95 * @param BlockLength SMARTCARD block length (8-bit long at most)
AnnaBridge 189:f392fc9709a3 96 * @retval None
AnnaBridge 189:f392fc9709a3 97 */
AnnaBridge 189:f392fc9709a3 98 void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength)
AnnaBridge 189:f392fc9709a3 99 {
AnnaBridge 189:f392fc9709a3 100 MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_BLEN, ((uint32_t)BlockLength << USART_RTOR_BLEN_Pos));
AnnaBridge 189:f392fc9709a3 101 }
AnnaBridge 189:f392fc9709a3 102
AnnaBridge 189:f392fc9709a3 103 /** @brief Update on the fly the receiver timeout value in RTOR register.
AnnaBridge 189:f392fc9709a3 104 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 105 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 106 * @param TimeOutValue receiver timeout value in number of baud blocks. The timeout
AnnaBridge 189:f392fc9709a3 107 * value must be less or equal to 0x0FFFFFFFF.
AnnaBridge 189:f392fc9709a3 108 * @retval None
AnnaBridge 189:f392fc9709a3 109 */
AnnaBridge 189:f392fc9709a3 110 void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue)
AnnaBridge 189:f392fc9709a3 111 {
AnnaBridge 189:f392fc9709a3 112 assert_param(IS_SMARTCARD_TIMEOUT_VALUE(hsmartcard->Init.TimeOutValue));
AnnaBridge 189:f392fc9709a3 113 MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_RTO, TimeOutValue);
AnnaBridge 189:f392fc9709a3 114 }
AnnaBridge 189:f392fc9709a3 115
AnnaBridge 189:f392fc9709a3 116 /** @brief Enable the SMARTCARD receiver timeout feature.
AnnaBridge 189:f392fc9709a3 117 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 118 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 119 * @retval HAL status
AnnaBridge 189:f392fc9709a3 120 */
AnnaBridge 189:f392fc9709a3 121 HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 122 {
AnnaBridge 189:f392fc9709a3 123 if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
AnnaBridge 189:f392fc9709a3 124 {
AnnaBridge 189:f392fc9709a3 125 /* Process Locked */
AnnaBridge 189:f392fc9709a3 126 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 127
AnnaBridge 189:f392fc9709a3 128 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 129
AnnaBridge 189:f392fc9709a3 130 /* Set the USART RTOEN bit */
AnnaBridge 189:f392fc9709a3 131 SET_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
AnnaBridge 189:f392fc9709a3 132
AnnaBridge 189:f392fc9709a3 133 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 134
AnnaBridge 189:f392fc9709a3 135 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 136 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 137
AnnaBridge 189:f392fc9709a3 138 return HAL_OK;
AnnaBridge 189:f392fc9709a3 139 }
AnnaBridge 189:f392fc9709a3 140 else
AnnaBridge 189:f392fc9709a3 141 {
AnnaBridge 189:f392fc9709a3 142 return HAL_BUSY;
AnnaBridge 189:f392fc9709a3 143 }
AnnaBridge 189:f392fc9709a3 144 }
AnnaBridge 189:f392fc9709a3 145
AnnaBridge 189:f392fc9709a3 146 /** @brief Disable the SMARTCARD receiver timeout feature.
AnnaBridge 189:f392fc9709a3 147 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 148 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 149 * @retval HAL status
AnnaBridge 189:f392fc9709a3 150 */
AnnaBridge 189:f392fc9709a3 151 HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 152 {
AnnaBridge 189:f392fc9709a3 153 if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
AnnaBridge 189:f392fc9709a3 154 {
AnnaBridge 189:f392fc9709a3 155 /* Process Locked */
AnnaBridge 189:f392fc9709a3 156 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 157
AnnaBridge 189:f392fc9709a3 158 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 159
AnnaBridge 189:f392fc9709a3 160 /* Clear the USART RTOEN bit */
AnnaBridge 189:f392fc9709a3 161 CLEAR_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
AnnaBridge 189:f392fc9709a3 162
AnnaBridge 189:f392fc9709a3 163 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 164
AnnaBridge 189:f392fc9709a3 165 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 166 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 167
AnnaBridge 189:f392fc9709a3 168 return HAL_OK;
AnnaBridge 189:f392fc9709a3 169 }
AnnaBridge 189:f392fc9709a3 170 else
AnnaBridge 189:f392fc9709a3 171 {
AnnaBridge 189:f392fc9709a3 172 return HAL_BUSY;
AnnaBridge 189:f392fc9709a3 173 }
AnnaBridge 189:f392fc9709a3 174 }
AnnaBridge 189:f392fc9709a3 175
AnnaBridge 189:f392fc9709a3 176 /**
AnnaBridge 189:f392fc9709a3 177 * @}
AnnaBridge 189:f392fc9709a3 178 */
AnnaBridge 189:f392fc9709a3 179
AnnaBridge 189:f392fc9709a3 180 /** @defgroup SMARTCARDEx_Exported_Functions_Group2 Extended Peripheral IO operation functions
AnnaBridge 189:f392fc9709a3 181 * @brief SMARTCARD Transmit and Receive functions
AnnaBridge 189:f392fc9709a3 182 *
AnnaBridge 189:f392fc9709a3 183 @verbatim
AnnaBridge 189:f392fc9709a3 184 ===============================================================================
AnnaBridge 189:f392fc9709a3 185 ##### IO operation functions #####
AnnaBridge 189:f392fc9709a3 186 ===============================================================================
AnnaBridge 189:f392fc9709a3 187 [..]
AnnaBridge 189:f392fc9709a3 188 This subsection provides a set of FIFO mode related callback functions.
AnnaBridge 189:f392fc9709a3 189
AnnaBridge 189:f392fc9709a3 190 (#) TX/RX Fifos Callbacks:
AnnaBridge 189:f392fc9709a3 191 (+) HAL_SMARTCARDEx_RxFifoFullCallback()
AnnaBridge 189:f392fc9709a3 192 (+) HAL_SMARTCARDEx_TxFifoEmptyCallback()
AnnaBridge 189:f392fc9709a3 193
AnnaBridge 189:f392fc9709a3 194 @endverbatim
AnnaBridge 189:f392fc9709a3 195 * @{
AnnaBridge 189:f392fc9709a3 196 */
AnnaBridge 189:f392fc9709a3 197
AnnaBridge 189:f392fc9709a3 198 /**
AnnaBridge 189:f392fc9709a3 199 * @brief SMARTCARD RX Fifo full callback.
AnnaBridge 189:f392fc9709a3 200 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 201 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 202 * @retval None
AnnaBridge 189:f392fc9709a3 203 */
AnnaBridge 189:f392fc9709a3 204 __weak void HAL_SMARTCARDEx_RxFifoFullCallback(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 205 {
AnnaBridge 189:f392fc9709a3 206 /* Prevent unused argument(s) compilation warning */
AnnaBridge 189:f392fc9709a3 207 UNUSED(hsmartcard);
AnnaBridge 189:f392fc9709a3 208
AnnaBridge 189:f392fc9709a3 209 /* NOTE : This function should not be modified, when the callback is needed,
AnnaBridge 189:f392fc9709a3 210 the HAL_SMARTCARDEx_RxFifoFullCallback can be implemented in the user file.
AnnaBridge 189:f392fc9709a3 211 */
AnnaBridge 189:f392fc9709a3 212 }
AnnaBridge 189:f392fc9709a3 213
AnnaBridge 189:f392fc9709a3 214 /**
AnnaBridge 189:f392fc9709a3 215 * @brief SMARTCARD TX Fifo empty callback.
AnnaBridge 189:f392fc9709a3 216 * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
AnnaBridge 189:f392fc9709a3 217 * the configuration information for the specified SMARTCARD module.
AnnaBridge 189:f392fc9709a3 218 * @retval None
AnnaBridge 189:f392fc9709a3 219 */
AnnaBridge 189:f392fc9709a3 220 __weak void HAL_SMARTCARDEx_TxFifoEmptyCallback(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 221 {
AnnaBridge 189:f392fc9709a3 222 /* Prevent unused argument(s) compilation warning */
AnnaBridge 189:f392fc9709a3 223 UNUSED(hsmartcard);
AnnaBridge 189:f392fc9709a3 224
AnnaBridge 189:f392fc9709a3 225 /* NOTE : This function should not be modified, when the callback is needed,
AnnaBridge 189:f392fc9709a3 226 the HAL_SMARTCARDEx_TxFifoEmptyCallback can be implemented in the user file.
AnnaBridge 189:f392fc9709a3 227 */
AnnaBridge 189:f392fc9709a3 228 }
AnnaBridge 189:f392fc9709a3 229
AnnaBridge 189:f392fc9709a3 230 /**
AnnaBridge 189:f392fc9709a3 231 * @}
AnnaBridge 189:f392fc9709a3 232 */
AnnaBridge 189:f392fc9709a3 233
AnnaBridge 189:f392fc9709a3 234 /** @defgroup SMARTCARD_Exported_Functions_Group3 Extended Peripheral Peripheral Control functions
AnnaBridge 189:f392fc9709a3 235 * @brief SMARTCARD control functions
AnnaBridge 189:f392fc9709a3 236 *
AnnaBridge 189:f392fc9709a3 237 @verbatim
AnnaBridge 189:f392fc9709a3 238 ===============================================================================
AnnaBridge 189:f392fc9709a3 239 ##### Peripheral Control functions #####
AnnaBridge 189:f392fc9709a3 240 ===============================================================================
AnnaBridge 189:f392fc9709a3 241 [..]
AnnaBridge 189:f392fc9709a3 242 This subsection provides a set of functions allowing to control the SMARTCARD.
AnnaBridge 189:f392fc9709a3 243 (+) HAL_SMARTCARDEx_EnableFifoMode() API enables the FIFO mode
AnnaBridge 189:f392fc9709a3 244 (+) HAL_SMARTCARDEx_DisableFifoMode() API disables the FIFO mode
AnnaBridge 189:f392fc9709a3 245 (+) HAL_SMARTCARDEx_SetTxFifoThreshold() API sets the TX FIFO threshold
AnnaBridge 189:f392fc9709a3 246 (+) HAL_SMARTCARDEx_SetRxFifoThreshold() API sets the RX FIFO threshold
AnnaBridge 189:f392fc9709a3 247 @endverbatim
AnnaBridge 189:f392fc9709a3 248 * @{
AnnaBridge 189:f392fc9709a3 249 */
AnnaBridge 189:f392fc9709a3 250
AnnaBridge 189:f392fc9709a3 251 /**
AnnaBridge 189:f392fc9709a3 252 * @brief Enable the FIFO mode.
AnnaBridge 189:f392fc9709a3 253 * @param hsmartcard SMARTCARD handle.
AnnaBridge 189:f392fc9709a3 254 * @retval HAL status
AnnaBridge 189:f392fc9709a3 255 */
AnnaBridge 189:f392fc9709a3 256 HAL_StatusTypeDef HAL_SMARTCARDEx_EnableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 257 {
AnnaBridge 189:f392fc9709a3 258 uint32_t tmpcr1;
AnnaBridge 189:f392fc9709a3 259
AnnaBridge 189:f392fc9709a3 260 /* Check parameters */
AnnaBridge 189:f392fc9709a3 261 assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance));
AnnaBridge 189:f392fc9709a3 262
AnnaBridge 189:f392fc9709a3 263 /* Process Locked */
AnnaBridge 189:f392fc9709a3 264 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 265
AnnaBridge 189:f392fc9709a3 266 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 267
AnnaBridge 189:f392fc9709a3 268 /* Save actual SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 269 tmpcr1 = READ_REG(hsmartcard->Instance->CR1);
AnnaBridge 189:f392fc9709a3 270
AnnaBridge 189:f392fc9709a3 271 /* Disable SMARTCARD */
AnnaBridge 189:f392fc9709a3 272 __HAL_SMARTCARD_DISABLE(hsmartcard);
AnnaBridge 189:f392fc9709a3 273
AnnaBridge 189:f392fc9709a3 274 /* Enable FIFO mode */
AnnaBridge 189:f392fc9709a3 275 SET_BIT(tmpcr1, USART_CR1_FIFOEN);
AnnaBridge 189:f392fc9709a3 276 hsmartcard->FifoMode = SMARTCARD_FIFOMODE_ENABLE;
AnnaBridge 189:f392fc9709a3 277
AnnaBridge 189:f392fc9709a3 278 /* Restore SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 279 WRITE_REG(hsmartcard->Instance->CR1, tmpcr1);
AnnaBridge 189:f392fc9709a3 280
AnnaBridge 189:f392fc9709a3 281 /* Determine the number of data to process during RX/TX ISR execution */
AnnaBridge 189:f392fc9709a3 282 SMARTCARDEx_SetNbDataToProcess(hsmartcard);
AnnaBridge 189:f392fc9709a3 283
AnnaBridge 189:f392fc9709a3 284 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 285
AnnaBridge 189:f392fc9709a3 286 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 287 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 288
AnnaBridge 189:f392fc9709a3 289 return HAL_OK;
AnnaBridge 189:f392fc9709a3 290 }
AnnaBridge 189:f392fc9709a3 291
AnnaBridge 189:f392fc9709a3 292 /**
AnnaBridge 189:f392fc9709a3 293 * @brief Disable the FIFO mode.
AnnaBridge 189:f392fc9709a3 294 * @param hsmartcard SMARTCARD handle.
AnnaBridge 189:f392fc9709a3 295 * @retval HAL status
AnnaBridge 189:f392fc9709a3 296 */
AnnaBridge 189:f392fc9709a3 297 HAL_StatusTypeDef HAL_SMARTCARDEx_DisableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 298 {
AnnaBridge 189:f392fc9709a3 299 uint32_t tmpcr1;
AnnaBridge 189:f392fc9709a3 300
AnnaBridge 189:f392fc9709a3 301 /* Check parameters */
AnnaBridge 189:f392fc9709a3 302 assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance));
AnnaBridge 189:f392fc9709a3 303
AnnaBridge 189:f392fc9709a3 304 /* Process Locked */
AnnaBridge 189:f392fc9709a3 305 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 306
AnnaBridge 189:f392fc9709a3 307 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 308
AnnaBridge 189:f392fc9709a3 309 /* Save actual SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 310 tmpcr1 = READ_REG(hsmartcard->Instance->CR1);
AnnaBridge 189:f392fc9709a3 311
AnnaBridge 189:f392fc9709a3 312 /* Disable SMARTCARD */
AnnaBridge 189:f392fc9709a3 313 __HAL_SMARTCARD_DISABLE(hsmartcard);
AnnaBridge 189:f392fc9709a3 314
AnnaBridge 189:f392fc9709a3 315 /* Enable FIFO mode */
AnnaBridge 189:f392fc9709a3 316 CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
AnnaBridge 189:f392fc9709a3 317 hsmartcard->FifoMode = SMARTCARD_FIFOMODE_DISABLE;
AnnaBridge 189:f392fc9709a3 318
AnnaBridge 189:f392fc9709a3 319 /* Restore SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 320 WRITE_REG(hsmartcard->Instance->CR1, tmpcr1);
AnnaBridge 189:f392fc9709a3 321
AnnaBridge 189:f392fc9709a3 322 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 323
AnnaBridge 189:f392fc9709a3 324 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 325 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 326
AnnaBridge 189:f392fc9709a3 327 return HAL_OK;
AnnaBridge 189:f392fc9709a3 328 }
AnnaBridge 189:f392fc9709a3 329
AnnaBridge 189:f392fc9709a3 330 /**
AnnaBridge 189:f392fc9709a3 331 * @brief Set the TXFIFO threshold.
AnnaBridge 189:f392fc9709a3 332 * @param hsmartcard SMARTCARD handle.
AnnaBridge 189:f392fc9709a3 333 * @param Threshold TX FIFO threshold value
AnnaBridge 189:f392fc9709a3 334 * This parameter can be one of the following values:
AnnaBridge 189:f392fc9709a3 335 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_8
AnnaBridge 189:f392fc9709a3 336 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_4
AnnaBridge 189:f392fc9709a3 337 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_2
AnnaBridge 189:f392fc9709a3 338 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_3_4
AnnaBridge 189:f392fc9709a3 339 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_7_8
AnnaBridge 189:f392fc9709a3 340 * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_8_8
AnnaBridge 189:f392fc9709a3 341 * @retval HAL status
AnnaBridge 189:f392fc9709a3 342 */
AnnaBridge 189:f392fc9709a3 343 HAL_StatusTypeDef HAL_SMARTCARDEx_SetTxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold)
AnnaBridge 189:f392fc9709a3 344 {
AnnaBridge 189:f392fc9709a3 345 uint32_t tmpcr1;
AnnaBridge 189:f392fc9709a3 346
AnnaBridge 189:f392fc9709a3 347 /* Check parameters */
AnnaBridge 189:f392fc9709a3 348 assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance));
AnnaBridge 189:f392fc9709a3 349 assert_param(IS_SMARTCARD_TXFIFO_THRESHOLD(Threshold));
AnnaBridge 189:f392fc9709a3 350
AnnaBridge 189:f392fc9709a3 351 /* Process Locked */
AnnaBridge 189:f392fc9709a3 352 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 353
AnnaBridge 189:f392fc9709a3 354 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 355
AnnaBridge 189:f392fc9709a3 356 /* Save actual SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 357 tmpcr1 = READ_REG(hsmartcard->Instance->CR1);
AnnaBridge 189:f392fc9709a3 358
AnnaBridge 189:f392fc9709a3 359 /* Disable SMARTCARD */
AnnaBridge 189:f392fc9709a3 360 __HAL_SMARTCARD_DISABLE(hsmartcard);
AnnaBridge 189:f392fc9709a3 361
AnnaBridge 189:f392fc9709a3 362 /* Update TX threshold configuration */
AnnaBridge 189:f392fc9709a3 363 MODIFY_REG(hsmartcard->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
AnnaBridge 189:f392fc9709a3 364
AnnaBridge 189:f392fc9709a3 365 /* Determine the number of data to process during RX/TX ISR execution */
AnnaBridge 189:f392fc9709a3 366 SMARTCARDEx_SetNbDataToProcess(hsmartcard);
AnnaBridge 189:f392fc9709a3 367
AnnaBridge 189:f392fc9709a3 368 /* Restore SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 369 MODIFY_REG(hsmartcard->Instance->CR1, USART_CR1_UE, tmpcr1);
AnnaBridge 189:f392fc9709a3 370
AnnaBridge 189:f392fc9709a3 371 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 372
AnnaBridge 189:f392fc9709a3 373 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 374 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 375
AnnaBridge 189:f392fc9709a3 376 return HAL_OK;
AnnaBridge 189:f392fc9709a3 377 }
AnnaBridge 189:f392fc9709a3 378
AnnaBridge 189:f392fc9709a3 379 /**
AnnaBridge 189:f392fc9709a3 380 * @brief Set the RXFIFO threshold.
AnnaBridge 189:f392fc9709a3 381 * @param hsmartcard SMARTCARD handle.
AnnaBridge 189:f392fc9709a3 382 * @param Threshold RX FIFO threshold value
AnnaBridge 189:f392fc9709a3 383 * This parameter can be one of the following values:
AnnaBridge 189:f392fc9709a3 384 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_8
AnnaBridge 189:f392fc9709a3 385 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_4
AnnaBridge 189:f392fc9709a3 386 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_2
AnnaBridge 189:f392fc9709a3 387 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_3_4
AnnaBridge 189:f392fc9709a3 388 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_7_8
AnnaBridge 189:f392fc9709a3 389 * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_8_8
AnnaBridge 189:f392fc9709a3 390 * @retval HAL status
AnnaBridge 189:f392fc9709a3 391 */
AnnaBridge 189:f392fc9709a3 392 HAL_StatusTypeDef HAL_SMARTCARDEx_SetRxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold)
AnnaBridge 189:f392fc9709a3 393 {
AnnaBridge 189:f392fc9709a3 394 uint32_t tmpcr1;
AnnaBridge 189:f392fc9709a3 395
AnnaBridge 189:f392fc9709a3 396 /* Check parameters */
AnnaBridge 189:f392fc9709a3 397 assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance));
AnnaBridge 189:f392fc9709a3 398 assert_param(IS_SMARTCARD_RXFIFO_THRESHOLD(Threshold));
AnnaBridge 189:f392fc9709a3 399
AnnaBridge 189:f392fc9709a3 400 /* Process Locked */
AnnaBridge 189:f392fc9709a3 401 __HAL_LOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 402
AnnaBridge 189:f392fc9709a3 403 hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
AnnaBridge 189:f392fc9709a3 404
AnnaBridge 189:f392fc9709a3 405 /* Save actual SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 406 tmpcr1 = READ_REG(hsmartcard->Instance->CR1);
AnnaBridge 189:f392fc9709a3 407
AnnaBridge 189:f392fc9709a3 408 /* Disable SMARTCARD */
AnnaBridge 189:f392fc9709a3 409 __HAL_SMARTCARD_DISABLE(hsmartcard);
AnnaBridge 189:f392fc9709a3 410
AnnaBridge 189:f392fc9709a3 411 /* Update RX threshold configuration */
AnnaBridge 189:f392fc9709a3 412 MODIFY_REG(hsmartcard->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
AnnaBridge 189:f392fc9709a3 413
AnnaBridge 189:f392fc9709a3 414 /* Determine the number of data to process during RX/TX ISR execution */
AnnaBridge 189:f392fc9709a3 415 SMARTCARDEx_SetNbDataToProcess(hsmartcard);
AnnaBridge 189:f392fc9709a3 416
AnnaBridge 189:f392fc9709a3 417 /* Restore SMARTCARD configuration */
AnnaBridge 189:f392fc9709a3 418 MODIFY_REG(hsmartcard->Instance->CR1, USART_CR1_UE, tmpcr1);
AnnaBridge 189:f392fc9709a3 419
AnnaBridge 189:f392fc9709a3 420 hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
AnnaBridge 189:f392fc9709a3 421
AnnaBridge 189:f392fc9709a3 422 /* Process Unlocked */
AnnaBridge 189:f392fc9709a3 423 __HAL_UNLOCK(hsmartcard);
AnnaBridge 189:f392fc9709a3 424
AnnaBridge 189:f392fc9709a3 425 return HAL_OK;
AnnaBridge 189:f392fc9709a3 426 }
AnnaBridge 189:f392fc9709a3 427
AnnaBridge 189:f392fc9709a3 428 /**
AnnaBridge 189:f392fc9709a3 429 * @}
AnnaBridge 189:f392fc9709a3 430 */
AnnaBridge 189:f392fc9709a3 431
AnnaBridge 189:f392fc9709a3 432 /**
AnnaBridge 189:f392fc9709a3 433 * @}
AnnaBridge 189:f392fc9709a3 434 */
AnnaBridge 189:f392fc9709a3 435
AnnaBridge 189:f392fc9709a3 436 /** @defgroup SMARTCARDEx_Private_Functions SMARTCARD Extended private Functions
AnnaBridge 189:f392fc9709a3 437 * @{
AnnaBridge 189:f392fc9709a3 438 */
AnnaBridge 189:f392fc9709a3 439
AnnaBridge 189:f392fc9709a3 440 /**
AnnaBridge 189:f392fc9709a3 441 * @brief Calculate the number of data to process in RX/TX ISR.
AnnaBridge 189:f392fc9709a3 442 * @note The RX FIFO depth and the TX FIFO depth is extracted from
AnnaBridge 189:f392fc9709a3 443 * the USART configuration registers.
AnnaBridge 189:f392fc9709a3 444 * @param hsmartcard SMARTCARD handle.
AnnaBridge 189:f392fc9709a3 445 * @retval None
AnnaBridge 189:f392fc9709a3 446 */
AnnaBridge 189:f392fc9709a3 447 static void SMARTCARDEx_SetNbDataToProcess(SMARTCARD_HandleTypeDef *hsmartcard)
AnnaBridge 189:f392fc9709a3 448 {
AnnaBridge 189:f392fc9709a3 449 uint8_t rx_fifo_depth;
AnnaBridge 189:f392fc9709a3 450 uint8_t tx_fifo_depth;
AnnaBridge 189:f392fc9709a3 451 uint8_t rx_fifo_threshold;
AnnaBridge 189:f392fc9709a3 452 uint8_t tx_fifo_threshold;
AnnaBridge 189:f392fc9709a3 453 /* 2 0U/1U added for MISRAC2012-Rule-18.1_b and MISRAC2012-Rule-18.1_d */
AnnaBridge 189:f392fc9709a3 454 uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
AnnaBridge 189:f392fc9709a3 455 uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
AnnaBridge 189:f392fc9709a3 456
AnnaBridge 189:f392fc9709a3 457 if (hsmartcard->FifoMode == SMARTCARD_FIFOMODE_DISABLE)
AnnaBridge 189:f392fc9709a3 458 {
AnnaBridge 189:f392fc9709a3 459 hsmartcard->NbTxDataToProcess = 1U;
AnnaBridge 189:f392fc9709a3 460 hsmartcard->NbRxDataToProcess = 1U;
AnnaBridge 189:f392fc9709a3 461 }
AnnaBridge 189:f392fc9709a3 462 else
AnnaBridge 189:f392fc9709a3 463 {
AnnaBridge 189:f392fc9709a3 464 rx_fifo_depth = RX_FIFO_DEPTH;
AnnaBridge 189:f392fc9709a3 465 tx_fifo_depth = TX_FIFO_DEPTH;
AnnaBridge 189:f392fc9709a3 466 rx_fifo_threshold = (uint8_t)(READ_BIT(hsmartcard->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
AnnaBridge 189:f392fc9709a3 467 tx_fifo_threshold = (uint8_t)(READ_BIT(hsmartcard->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
AnnaBridge 189:f392fc9709a3 468 hsmartcard->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) / (uint16_t)denominator[tx_fifo_threshold];
AnnaBridge 189:f392fc9709a3 469 hsmartcard->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) / (uint16_t)denominator[rx_fifo_threshold];
AnnaBridge 189:f392fc9709a3 470 }
AnnaBridge 189:f392fc9709a3 471 }
AnnaBridge 189:f392fc9709a3 472
AnnaBridge 189:f392fc9709a3 473 /**
AnnaBridge 189:f392fc9709a3 474 * @}
AnnaBridge 189:f392fc9709a3 475 */
AnnaBridge 189:f392fc9709a3 476
AnnaBridge 189:f392fc9709a3 477 #endif /* HAL_SMARTCARD_MODULE_ENABLED */
AnnaBridge 189:f392fc9709a3 478
AnnaBridge 189:f392fc9709a3 479 /**
AnnaBridge 189:f392fc9709a3 480 * @}
AnnaBridge 189:f392fc9709a3 481 */
AnnaBridge 189:f392fc9709a3 482
AnnaBridge 189:f392fc9709a3 483 /**
AnnaBridge 189:f392fc9709a3 484 * @}
AnnaBridge 189:f392fc9709a3 485 */
AnnaBridge 189:f392fc9709a3 486
AnnaBridge 189:f392fc9709a3 487 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/