mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_STM/TARGET_STM32H7/device/stm32h7xx_hal_irda.c@189:f392fc9709a3, 2019-02-20 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 189:f392fc9709a3 | 1 | /** |
AnnaBridge | 189:f392fc9709a3 | 2 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 3 | * @file stm32h7xx_hal_irda.c |
AnnaBridge | 189:f392fc9709a3 | 4 | * @author MCD Application Team |
AnnaBridge | 189:f392fc9709a3 | 5 | * @brief IRDA HAL module driver. |
AnnaBridge | 189:f392fc9709a3 | 6 | * This file provides firmware functions to manage the following |
AnnaBridge | 189:f392fc9709a3 | 7 | * functionalities of the IrDA (Infrared Data Association) Peripheral |
AnnaBridge | 189:f392fc9709a3 | 8 | * (IRDA) |
AnnaBridge | 189:f392fc9709a3 | 9 | * + Initialization and de-initialization functions |
AnnaBridge | 189:f392fc9709a3 | 10 | * + IO operation functions |
AnnaBridge | 189:f392fc9709a3 | 11 | * + Peripheral State and Errors functions |
AnnaBridge | 189:f392fc9709a3 | 12 | * + Peripheral Control functions |
AnnaBridge | 189:f392fc9709a3 | 13 | * |
AnnaBridge | 189:f392fc9709a3 | 14 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 15 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 16 | ##### How to use this driver ##### |
AnnaBridge | 189:f392fc9709a3 | 17 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 18 | [..] |
AnnaBridge | 189:f392fc9709a3 | 19 | The IRDA HAL driver can be used as follows: |
AnnaBridge | 189:f392fc9709a3 | 20 | |
AnnaBridge | 189:f392fc9709a3 | 21 | (#) Declare a IRDA_HandleTypeDef handle structure (eg. IRDA_HandleTypeDef hirda). |
AnnaBridge | 189:f392fc9709a3 | 22 | (#) Initialize the IRDA low level resources by implementing the HAL_IRDA_MspInit() API |
AnnaBridge | 189:f392fc9709a3 | 23 | in setting the associated USART or UART in IRDA mode: |
AnnaBridge | 189:f392fc9709a3 | 24 | (++) Enable the USARTx/UARTx interface clock. |
AnnaBridge | 189:f392fc9709a3 | 25 | (++) USARTx/UARTx pins configuration: |
AnnaBridge | 189:f392fc9709a3 | 26 | (+++) Enable the clock for the USARTx/UARTx GPIOs. |
AnnaBridge | 189:f392fc9709a3 | 27 | (+++) Configure these USARTx/UARTx pins (TX as alternate function pull-up, RX as alternate function Input). |
AnnaBridge | 189:f392fc9709a3 | 28 | (++) NVIC configuration if you need to use interrupt process (HAL_IRDA_Transmit_IT() |
AnnaBridge | 189:f392fc9709a3 | 29 | and HAL_IRDA_Receive_IT() APIs): |
AnnaBridge | 189:f392fc9709a3 | 30 | (+++) Configure the USARTx/UARTx interrupt priority. |
AnnaBridge | 189:f392fc9709a3 | 31 | (+++) Enable the NVIC USARTx/UARTx IRQ handle. |
AnnaBridge | 189:f392fc9709a3 | 32 | (+++) The specific IRDA interrupts (Transmission complete interrupt, |
AnnaBridge | 189:f392fc9709a3 | 33 | RXNE interrupt and Error Interrupts) will be managed using the macros |
AnnaBridge | 189:f392fc9709a3 | 34 | __HAL_IRDA_ENABLE_IT() and __HAL_IRDA_DISABLE_IT() inside the transmit and receive process. |
AnnaBridge | 189:f392fc9709a3 | 35 | |
AnnaBridge | 189:f392fc9709a3 | 36 | (++) DMA Configuration if you need to use DMA process (HAL_IRDA_Transmit_DMA() |
AnnaBridge | 189:f392fc9709a3 | 37 | and HAL_IRDA_Receive_DMA() APIs): |
AnnaBridge | 189:f392fc9709a3 | 38 | (+++) Declare a DMA handle structure for the Tx/Rx channel. |
AnnaBridge | 189:f392fc9709a3 | 39 | (+++) Enable the DMAx interface clock. |
AnnaBridge | 189:f392fc9709a3 | 40 | (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters. |
AnnaBridge | 189:f392fc9709a3 | 41 | (+++) Configure the DMA Tx/Rx channel. |
AnnaBridge | 189:f392fc9709a3 | 42 | (+++) Associate the initialized DMA handle to the IRDA DMA Tx/Rx handle. |
AnnaBridge | 189:f392fc9709a3 | 43 | (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel. |
AnnaBridge | 189:f392fc9709a3 | 44 | |
AnnaBridge | 189:f392fc9709a3 | 45 | (#) Program the Baud Rate, Word Length and Parity and Mode(Receiver/Transmitter), |
AnnaBridge | 189:f392fc9709a3 | 46 | the normal or low power mode and the clock prescaler in the hirda handle Init structure. |
AnnaBridge | 189:f392fc9709a3 | 47 | |
AnnaBridge | 189:f392fc9709a3 | 48 | (#) Initialize the IRDA registers by calling the HAL_IRDA_Init() API: |
AnnaBridge | 189:f392fc9709a3 | 49 | (++) This API configures also the low level Hardware GPIO, CLOCK, CORTEX...etc) |
AnnaBridge | 189:f392fc9709a3 | 50 | by calling the customized HAL_IRDA_MspInit() API. |
AnnaBridge | 189:f392fc9709a3 | 51 | |
AnnaBridge | 189:f392fc9709a3 | 52 | -@@- The specific IRDA interrupts (Transmission complete interrupt, |
AnnaBridge | 189:f392fc9709a3 | 53 | RXNE interrupt and Error Interrupts) will be managed using the macros |
AnnaBridge | 189:f392fc9709a3 | 54 | __HAL_IRDA_ENABLE_IT() and __HAL_IRDA_DISABLE_IT() inside the transmit and receive process. |
AnnaBridge | 189:f392fc9709a3 | 55 | |
AnnaBridge | 189:f392fc9709a3 | 56 | (#) Three operation modes are available within this driver : |
AnnaBridge | 189:f392fc9709a3 | 57 | |
AnnaBridge | 189:f392fc9709a3 | 58 | *** Polling mode IO operation *** |
AnnaBridge | 189:f392fc9709a3 | 59 | ================================= |
AnnaBridge | 189:f392fc9709a3 | 60 | [..] |
AnnaBridge | 189:f392fc9709a3 | 61 | (+) Send an amount of data in blocking mode using HAL_IRDA_Transmit() |
AnnaBridge | 189:f392fc9709a3 | 62 | (+) Receive an amount of data in blocking mode using HAL_IRDA_Receive() |
AnnaBridge | 189:f392fc9709a3 | 63 | |
AnnaBridge | 189:f392fc9709a3 | 64 | *** Interrupt mode IO operation *** |
AnnaBridge | 189:f392fc9709a3 | 65 | =================================== |
AnnaBridge | 189:f392fc9709a3 | 66 | [..] |
AnnaBridge | 189:f392fc9709a3 | 67 | (+) Send an amount of data in non-blocking mode using HAL_IRDA_Transmit_IT() |
AnnaBridge | 189:f392fc9709a3 | 68 | (+) At transmission end of transfer HAL_IRDA_TxCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 69 | add his own code by customization of function pointer HAL_IRDA_TxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 70 | (+) Receive an amount of data in non-blocking mode using HAL_IRDA_Receive_IT() |
AnnaBridge | 189:f392fc9709a3 | 71 | (+) At reception end of transfer HAL_IRDA_RxCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 72 | add his own code by customization of function pointer HAL_IRDA_RxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 73 | (+) In case of transfer Error, HAL_IRDA_ErrorCallback() function is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 74 | add his own code by customization of function pointer HAL_IRDA_ErrorCallback() |
AnnaBridge | 189:f392fc9709a3 | 75 | |
AnnaBridge | 189:f392fc9709a3 | 76 | *** DMA mode IO operation *** |
AnnaBridge | 189:f392fc9709a3 | 77 | ============================== |
AnnaBridge | 189:f392fc9709a3 | 78 | [..] |
AnnaBridge | 189:f392fc9709a3 | 79 | (+) Send an amount of data in non-blocking mode (DMA) using HAL_IRDA_Transmit_DMA() |
AnnaBridge | 189:f392fc9709a3 | 80 | (+) At transmission half of transfer HAL_IRDA_TxHalfCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 81 | add his own code by customization of function pointer HAL_IRDA_TxHalfCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 82 | (+) At transmission end of transfer HAL_IRDA_TxCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 83 | add his own code by customization of function pointer HAL_IRDA_TxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 84 | (+) Receive an amount of data in non-blocking mode (DMA) using HAL_IRDA_Receive_DMA() |
AnnaBridge | 189:f392fc9709a3 | 85 | (+) At reception half of transfer HAL_IRDA_RxHalfCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 86 | add his own code by customization of function pointer HAL_IRDA_RxHalfCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 87 | (+) At reception end of transfer HAL_IRDA_RxCpltCallback() is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 88 | add his own code by customization of function pointer HAL_IRDA_RxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 89 | (+) In case of transfer Error, HAL_IRDA_ErrorCallback() function is executed and user can |
AnnaBridge | 189:f392fc9709a3 | 90 | add his own code by customization of function pointer HAL_IRDA_ErrorCallback() |
AnnaBridge | 189:f392fc9709a3 | 91 | |
AnnaBridge | 189:f392fc9709a3 | 92 | *** IRDA HAL driver macros list *** |
AnnaBridge | 189:f392fc9709a3 | 93 | ==================================== |
AnnaBridge | 189:f392fc9709a3 | 94 | [..] |
AnnaBridge | 189:f392fc9709a3 | 95 | Below the list of most used macros in IRDA HAL driver. |
AnnaBridge | 189:f392fc9709a3 | 96 | |
AnnaBridge | 189:f392fc9709a3 | 97 | (+) __HAL_IRDA_ENABLE: Enable the IRDA peripheral |
AnnaBridge | 189:f392fc9709a3 | 98 | (+) __HAL_IRDA_DISABLE: Disable the IRDA peripheral |
AnnaBridge | 189:f392fc9709a3 | 99 | (+) __HAL_IRDA_GET_FLAG : Check whether the specified IRDA flag is set or not |
AnnaBridge | 189:f392fc9709a3 | 100 | (+) __HAL_IRDA_CLEAR_FLAG : Clear the specified IRDA pending flag |
AnnaBridge | 189:f392fc9709a3 | 101 | (+) __HAL_IRDA_ENABLE_IT: Enable the specified IRDA interrupt |
AnnaBridge | 189:f392fc9709a3 | 102 | (+) __HAL_IRDA_DISABLE_IT: Disable the specified IRDA interrupt |
AnnaBridge | 189:f392fc9709a3 | 103 | (+) __HAL_IRDA_GET_IT_SOURCE: Check whether or not the specified IRDA interrupt is enabled |
AnnaBridge | 189:f392fc9709a3 | 104 | |
AnnaBridge | 189:f392fc9709a3 | 105 | [..] |
AnnaBridge | 189:f392fc9709a3 | 106 | (@) You can refer to the IRDA HAL driver header file for more useful macros |
AnnaBridge | 189:f392fc9709a3 | 107 | |
AnnaBridge | 189:f392fc9709a3 | 108 | ##### Callback registration ##### |
AnnaBridge | 189:f392fc9709a3 | 109 | ================================== |
AnnaBridge | 189:f392fc9709a3 | 110 | |
AnnaBridge | 189:f392fc9709a3 | 111 | [..] |
AnnaBridge | 189:f392fc9709a3 | 112 | The compilation define USE_HAL_IRDA_REGISTER_CALLBACKS when set to 1 |
AnnaBridge | 189:f392fc9709a3 | 113 | allows the user to configure dynamically the driver callbacks. |
AnnaBridge | 189:f392fc9709a3 | 114 | |
AnnaBridge | 189:f392fc9709a3 | 115 | [..] |
AnnaBridge | 189:f392fc9709a3 | 116 | Use Function @ref HAL_IRDA_RegisterCallback() to register a user callback. |
AnnaBridge | 189:f392fc9709a3 | 117 | Function @ref HAL_IRDA_RegisterCallback() allows to register following callbacks: |
AnnaBridge | 189:f392fc9709a3 | 118 | (+) TxHalfCpltCallback : Tx Half Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 119 | (+) TxCpltCallback : Tx Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 120 | (+) RxHalfCpltCallback : Rx Half Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 121 | (+) RxCpltCallback : Rx Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 122 | (+) ErrorCallback : Error Callback. |
AnnaBridge | 189:f392fc9709a3 | 123 | (+) AbortCpltCallback : Abort Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 124 | (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 125 | (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 126 | (+) MspInitCallback : IRDA MspInit. |
AnnaBridge | 189:f392fc9709a3 | 127 | (+) MspDeInitCallback : IRDA MspDeInit. |
AnnaBridge | 189:f392fc9709a3 | 128 | This function takes as parameters the HAL peripheral handle, the Callback ID |
AnnaBridge | 189:f392fc9709a3 | 129 | and a pointer to the user callback function. |
AnnaBridge | 189:f392fc9709a3 | 130 | |
AnnaBridge | 189:f392fc9709a3 | 131 | [..] |
AnnaBridge | 189:f392fc9709a3 | 132 | Use function @ref HAL_IRDA_UnRegisterCallback() to reset a callback to the default |
AnnaBridge | 189:f392fc9709a3 | 133 | weak (surcharged) function. |
AnnaBridge | 189:f392fc9709a3 | 134 | @ref HAL_IRDA_UnRegisterCallback() takes as parameters the HAL peripheral handle, |
AnnaBridge | 189:f392fc9709a3 | 135 | and the Callback ID. |
AnnaBridge | 189:f392fc9709a3 | 136 | This function allows to reset following callbacks: |
AnnaBridge | 189:f392fc9709a3 | 137 | (+) TxHalfCpltCallback : Tx Half Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 138 | (+) TxCpltCallback : Tx Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 139 | (+) RxHalfCpltCallback : Rx Half Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 140 | (+) RxCpltCallback : Rx Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 141 | (+) ErrorCallback : Error Callback. |
AnnaBridge | 189:f392fc9709a3 | 142 | (+) AbortCpltCallback : Abort Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 143 | (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 144 | (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. |
AnnaBridge | 189:f392fc9709a3 | 145 | (+) MspInitCallback : IRDA MspInit. |
AnnaBridge | 189:f392fc9709a3 | 146 | (+) MspDeInitCallback : IRDA MspDeInit. |
AnnaBridge | 189:f392fc9709a3 | 147 | |
AnnaBridge | 189:f392fc9709a3 | 148 | [..] |
AnnaBridge | 189:f392fc9709a3 | 149 | By default, after the @ref HAL_IRDA_Init() and when the state is HAL_IRDA_STATE_RESET |
AnnaBridge | 189:f392fc9709a3 | 150 | all callbacks are set to the corresponding weak (surcharged) functions: |
AnnaBridge | 189:f392fc9709a3 | 151 | examples @ref HAL_IRDA_TxCpltCallback(), @ref HAL_IRDA_RxHalfCpltCallback(). |
AnnaBridge | 189:f392fc9709a3 | 152 | Exception done for MspInit and MspDeInit functions that are respectively |
AnnaBridge | 189:f392fc9709a3 | 153 | reset to the legacy weak (surcharged) functions in the @ref HAL_IRDA_Init() |
AnnaBridge | 189:f392fc9709a3 | 154 | and @ref HAL_IRDA_DeInit() only when these callbacks are null (not registered beforehand). |
AnnaBridge | 189:f392fc9709a3 | 155 | If not, MspInit or MspDeInit are not null, the @ref HAL_IRDA_Init() and @ref HAL_IRDA_DeInit() |
AnnaBridge | 189:f392fc9709a3 | 156 | keep and use the user MspInit/MspDeInit callbacks (registered beforehand). |
AnnaBridge | 189:f392fc9709a3 | 157 | |
AnnaBridge | 189:f392fc9709a3 | 158 | [..] |
AnnaBridge | 189:f392fc9709a3 | 159 | Callbacks can be registered/unregistered in HAL_IRDA_STATE_READY state only. |
AnnaBridge | 189:f392fc9709a3 | 160 | Exception done MspInit/MspDeInit that can be registered/unregistered |
AnnaBridge | 189:f392fc9709a3 | 161 | in HAL_IRDA_STATE_READY or HAL_IRDA_STATE_RESET state, thus registered (user) |
AnnaBridge | 189:f392fc9709a3 | 162 | MspInit/DeInit callbacks can be used during the Init/DeInit. |
AnnaBridge | 189:f392fc9709a3 | 163 | In that case first register the MspInit/MspDeInit user callbacks |
AnnaBridge | 189:f392fc9709a3 | 164 | using @ref HAL_IRDA_RegisterCallback() before calling @ref HAL_IRDA_DeInit() |
AnnaBridge | 189:f392fc9709a3 | 165 | or @ref HAL_IRDA_Init() function. |
AnnaBridge | 189:f392fc9709a3 | 166 | |
AnnaBridge | 189:f392fc9709a3 | 167 | [..] |
AnnaBridge | 189:f392fc9709a3 | 168 | When The compilation define USE_HAL_IRDA_REGISTER_CALLBACKS is set to 0 or |
AnnaBridge | 189:f392fc9709a3 | 169 | not defined, the callback registration feature is not available |
AnnaBridge | 189:f392fc9709a3 | 170 | and weak (surcharged) callbacks are used. |
AnnaBridge | 189:f392fc9709a3 | 171 | |
AnnaBridge | 189:f392fc9709a3 | 172 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 173 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 174 | * @attention |
AnnaBridge | 189:f392fc9709a3 | 175 | * |
AnnaBridge | 189:f392fc9709a3 | 176 | * <h2><center>© Copyright (c) 2017 STMicroelectronics. |
AnnaBridge | 189:f392fc9709a3 | 177 | * All rights reserved.</center></h2> |
AnnaBridge | 189:f392fc9709a3 | 178 | * |
AnnaBridge | 189:f392fc9709a3 | 179 | * This software component is licensed by ST under BSD 3-Clause license, |
AnnaBridge | 189:f392fc9709a3 | 180 | * the "License"; You may not use this file except in compliance with the |
AnnaBridge | 189:f392fc9709a3 | 181 | * License. You may obtain a copy of the License at: |
AnnaBridge | 189:f392fc9709a3 | 182 | * opensource.org/licenses/BSD-3-Clause |
AnnaBridge | 189:f392fc9709a3 | 183 | * |
AnnaBridge | 189:f392fc9709a3 | 184 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 185 | */ |
AnnaBridge | 189:f392fc9709a3 | 186 | |
AnnaBridge | 189:f392fc9709a3 | 187 | /* Includes ------------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 188 | #include "stm32h7xx_hal.h" |
AnnaBridge | 189:f392fc9709a3 | 189 | |
AnnaBridge | 189:f392fc9709a3 | 190 | /** @addtogroup STM32H7xx_HAL_Driver |
AnnaBridge | 189:f392fc9709a3 | 191 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 192 | */ |
AnnaBridge | 189:f392fc9709a3 | 193 | |
AnnaBridge | 189:f392fc9709a3 | 194 | /** @defgroup IRDA IRDA |
AnnaBridge | 189:f392fc9709a3 | 195 | * @brief HAL IRDA module driver |
AnnaBridge | 189:f392fc9709a3 | 196 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 197 | */ |
AnnaBridge | 189:f392fc9709a3 | 198 | |
AnnaBridge | 189:f392fc9709a3 | 199 | #ifdef HAL_IRDA_MODULE_ENABLED |
AnnaBridge | 189:f392fc9709a3 | 200 | |
AnnaBridge | 189:f392fc9709a3 | 201 | /* Private typedef -----------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 202 | /* Private define ------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 203 | /** @defgroup IRDA_Private_Constants IRDA Private Constants |
AnnaBridge | 189:f392fc9709a3 | 204 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 205 | */ |
AnnaBridge | 189:f392fc9709a3 | 206 | #define IRDA_TEACK_REACK_TIMEOUT 1000U /*!< IRDA TX or RX enable acknowledge time-out value */ |
AnnaBridge | 189:f392fc9709a3 | 207 | |
AnnaBridge | 189:f392fc9709a3 | 208 | #define IRDA_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE \ |
AnnaBridge | 189:f392fc9709a3 | 209 | | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE)) /*!< UART or USART CR1 fields of parameters set by IRDA_SetConfig API */ |
AnnaBridge | 189:f392fc9709a3 | 210 | |
AnnaBridge | 189:f392fc9709a3 | 211 | #define USART_BRR_MIN 0x10U /*!< USART BRR minimum authorized value */ |
AnnaBridge | 189:f392fc9709a3 | 212 | |
AnnaBridge | 189:f392fc9709a3 | 213 | #define USART_BRR_MAX 0x0000FFFFU /*!< USART BRR maximum authorized value */ |
AnnaBridge | 189:f392fc9709a3 | 214 | /** |
AnnaBridge | 189:f392fc9709a3 | 215 | * @} |
AnnaBridge | 189:f392fc9709a3 | 216 | */ |
AnnaBridge | 189:f392fc9709a3 | 217 | |
AnnaBridge | 189:f392fc9709a3 | 218 | /* Private macros ------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 219 | /** @defgroup IRDA_Private_Macros IRDA Private Macros |
AnnaBridge | 189:f392fc9709a3 | 220 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 221 | */ |
AnnaBridge | 189:f392fc9709a3 | 222 | /** @brief BRR division operation to set BRR register in 16-bit oversampling mode. |
AnnaBridge | 189:f392fc9709a3 | 223 | * @param __PCLK__ IRDA clock source. |
AnnaBridge | 189:f392fc9709a3 | 224 | * @param __BAUD__ Baud rate set by the user. |
AnnaBridge | 189:f392fc9709a3 | 225 | * @param __PRESCALER__ IRDA clock prescaler value. |
AnnaBridge | 189:f392fc9709a3 | 226 | * @retval Division result |
AnnaBridge | 189:f392fc9709a3 | 227 | */ |
AnnaBridge | 189:f392fc9709a3 | 228 | #define IRDA_DIV_SAMPLING16(__PCLK__, __BAUD__, __PRESCALER__) ((((__PCLK__)/IRDAPrescTable[(__PRESCALER__)]) + ((__BAUD__)/2U)) / (__BAUD__)) |
AnnaBridge | 189:f392fc9709a3 | 229 | /** |
AnnaBridge | 189:f392fc9709a3 | 230 | * @} |
AnnaBridge | 189:f392fc9709a3 | 231 | */ |
AnnaBridge | 189:f392fc9709a3 | 232 | |
AnnaBridge | 189:f392fc9709a3 | 233 | /* Private variables ---------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 234 | /* Private function prototypes -----------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 235 | /** @addtogroup IRDA_Private_Functions |
AnnaBridge | 189:f392fc9709a3 | 236 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 237 | */ |
AnnaBridge | 189:f392fc9709a3 | 238 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 239 | void IRDA_InitCallbacksToDefault(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 240 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 241 | static HAL_StatusTypeDef IRDA_SetConfig(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 242 | static HAL_StatusTypeDef IRDA_CheckIdleState(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 243 | static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout); |
AnnaBridge | 189:f392fc9709a3 | 244 | static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 245 | static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 246 | static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 247 | static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 248 | static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 249 | static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 250 | static void IRDA_DMAError(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 251 | static void IRDA_DMAAbortOnError(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 252 | static void IRDA_DMATxAbortCallback(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 253 | static void IRDA_DMARxAbortCallback(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 254 | static void IRDA_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 255 | static void IRDA_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); |
AnnaBridge | 189:f392fc9709a3 | 256 | static void IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 257 | static void IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 258 | static void IRDA_Receive_IT(IRDA_HandleTypeDef *hirda); |
AnnaBridge | 189:f392fc9709a3 | 259 | /** |
AnnaBridge | 189:f392fc9709a3 | 260 | * @} |
AnnaBridge | 189:f392fc9709a3 | 261 | */ |
AnnaBridge | 189:f392fc9709a3 | 262 | |
AnnaBridge | 189:f392fc9709a3 | 263 | /* Exported functions --------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 264 | |
AnnaBridge | 189:f392fc9709a3 | 265 | /** @defgroup IRDA_Exported_Functions IRDA Exported Functions |
AnnaBridge | 189:f392fc9709a3 | 266 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 267 | */ |
AnnaBridge | 189:f392fc9709a3 | 268 | |
AnnaBridge | 189:f392fc9709a3 | 269 | /** @defgroup IRDA_Exported_Functions_Group1 Initialization and de-initialization functions |
AnnaBridge | 189:f392fc9709a3 | 270 | * @brief Initialization and Configuration functions |
AnnaBridge | 189:f392fc9709a3 | 271 | * |
AnnaBridge | 189:f392fc9709a3 | 272 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 273 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 274 | ##### Initialization and Configuration functions ##### |
AnnaBridge | 189:f392fc9709a3 | 275 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 276 | [..] |
AnnaBridge | 189:f392fc9709a3 | 277 | This subsection provides a set of functions allowing to initialize the USARTx |
AnnaBridge | 189:f392fc9709a3 | 278 | in asynchronous IRDA mode. |
AnnaBridge | 189:f392fc9709a3 | 279 | (+) For the asynchronous mode only these parameters can be configured: |
AnnaBridge | 189:f392fc9709a3 | 280 | (++) Baud Rate |
AnnaBridge | 189:f392fc9709a3 | 281 | (++) Word Length |
AnnaBridge | 189:f392fc9709a3 | 282 | (++) Parity: If the parity is enabled, then the MSB bit of the data written |
AnnaBridge | 189:f392fc9709a3 | 283 | in the data register is transmitted but is changed by the parity bit. |
AnnaBridge | 189:f392fc9709a3 | 284 | (++) Power mode |
AnnaBridge | 189:f392fc9709a3 | 285 | (++) Prescaler setting |
AnnaBridge | 189:f392fc9709a3 | 286 | (++) Receiver/transmitter modes |
AnnaBridge | 189:f392fc9709a3 | 287 | |
AnnaBridge | 189:f392fc9709a3 | 288 | [..] |
AnnaBridge | 189:f392fc9709a3 | 289 | The HAL_IRDA_Init() API follows the USART asynchronous configuration procedures |
AnnaBridge | 189:f392fc9709a3 | 290 | (details for the procedures are available in reference manual). |
AnnaBridge | 189:f392fc9709a3 | 291 | |
AnnaBridge | 189:f392fc9709a3 | 292 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 293 | |
AnnaBridge | 189:f392fc9709a3 | 294 | Depending on the frame length defined by the M1 and M0 bits (7-bit, |
AnnaBridge | 189:f392fc9709a3 | 295 | 8-bit or 9-bit), the possible IRDA frame formats are listed in the |
AnnaBridge | 189:f392fc9709a3 | 296 | following table. |
AnnaBridge | 189:f392fc9709a3 | 297 | |
AnnaBridge | 189:f392fc9709a3 | 298 | Table 1. IRDA frame format. |
AnnaBridge | 189:f392fc9709a3 | 299 | +-----------------------------------------------------------------------+ |
AnnaBridge | 189:f392fc9709a3 | 300 | | M1 bit | M0 bit | PCE bit | IRDA frame | |
AnnaBridge | 189:f392fc9709a3 | 301 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 302 | | 0 | 0 | 0 | | SB | 8 bit data | STB | | |
AnnaBridge | 189:f392fc9709a3 | 303 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 304 | | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | | |
AnnaBridge | 189:f392fc9709a3 | 305 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 306 | | 0 | 1 | 0 | | SB | 9 bit data | STB | | |
AnnaBridge | 189:f392fc9709a3 | 307 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 308 | | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | | |
AnnaBridge | 189:f392fc9709a3 | 309 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 310 | | 1 | 0 | 0 | | SB | 7 bit data | STB | | |
AnnaBridge | 189:f392fc9709a3 | 311 | |---------|---------|-----------|---------------------------------------| |
AnnaBridge | 189:f392fc9709a3 | 312 | | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | | |
AnnaBridge | 189:f392fc9709a3 | 313 | +-----------------------------------------------------------------------+ |
AnnaBridge | 189:f392fc9709a3 | 314 | |
AnnaBridge | 189:f392fc9709a3 | 315 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 316 | */ |
AnnaBridge | 189:f392fc9709a3 | 317 | |
AnnaBridge | 189:f392fc9709a3 | 318 | /** |
AnnaBridge | 189:f392fc9709a3 | 319 | * @brief Initialize the IRDA mode according to the specified |
AnnaBridge | 189:f392fc9709a3 | 320 | * parameters in the IRDA_InitTypeDef and initialize the associated handle. |
AnnaBridge | 189:f392fc9709a3 | 321 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 322 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 323 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 324 | */ |
AnnaBridge | 189:f392fc9709a3 | 325 | HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 326 | { |
AnnaBridge | 189:f392fc9709a3 | 327 | /* Check the IRDA handle allocation */ |
AnnaBridge | 189:f392fc9709a3 | 328 | if (hirda == NULL) |
AnnaBridge | 189:f392fc9709a3 | 329 | { |
AnnaBridge | 189:f392fc9709a3 | 330 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 331 | } |
AnnaBridge | 189:f392fc9709a3 | 332 | |
AnnaBridge | 189:f392fc9709a3 | 333 | /* Check the USART/UART associated to the IRDA handle */ |
AnnaBridge | 189:f392fc9709a3 | 334 | assert_param(IS_IRDA_INSTANCE(hirda->Instance)); |
AnnaBridge | 189:f392fc9709a3 | 335 | |
AnnaBridge | 189:f392fc9709a3 | 336 | if (hirda->gState == HAL_IRDA_STATE_RESET) |
AnnaBridge | 189:f392fc9709a3 | 337 | { |
AnnaBridge | 189:f392fc9709a3 | 338 | /* Allocate lock resource and initialize it */ |
AnnaBridge | 189:f392fc9709a3 | 339 | hirda->Lock = HAL_UNLOCKED; |
AnnaBridge | 189:f392fc9709a3 | 340 | |
AnnaBridge | 189:f392fc9709a3 | 341 | #if USE_HAL_IRDA_REGISTER_CALLBACKS == 1 |
AnnaBridge | 189:f392fc9709a3 | 342 | IRDA_InitCallbacksToDefault(hirda); |
AnnaBridge | 189:f392fc9709a3 | 343 | |
AnnaBridge | 189:f392fc9709a3 | 344 | if (hirda->MspInitCallback == NULL) |
AnnaBridge | 189:f392fc9709a3 | 345 | { |
AnnaBridge | 189:f392fc9709a3 | 346 | hirda->MspInitCallback = HAL_IRDA_MspInit; |
AnnaBridge | 189:f392fc9709a3 | 347 | } |
AnnaBridge | 189:f392fc9709a3 | 348 | |
AnnaBridge | 189:f392fc9709a3 | 349 | /* Init the low level hardware */ |
AnnaBridge | 189:f392fc9709a3 | 350 | hirda->MspInitCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 351 | #else |
AnnaBridge | 189:f392fc9709a3 | 352 | /* Init the low level hardware : GPIO, CLOCK */ |
AnnaBridge | 189:f392fc9709a3 | 353 | HAL_IRDA_MspInit(hirda); |
AnnaBridge | 189:f392fc9709a3 | 354 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 355 | } |
AnnaBridge | 189:f392fc9709a3 | 356 | |
AnnaBridge | 189:f392fc9709a3 | 357 | hirda->gState = HAL_IRDA_STATE_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 358 | |
AnnaBridge | 189:f392fc9709a3 | 359 | /* Disable the Peripheral to update the configuration registers */ |
AnnaBridge | 189:f392fc9709a3 | 360 | __HAL_IRDA_DISABLE(hirda); |
AnnaBridge | 189:f392fc9709a3 | 361 | |
AnnaBridge | 189:f392fc9709a3 | 362 | /* Set the IRDA Communication parameters */ |
AnnaBridge | 189:f392fc9709a3 | 363 | if (IRDA_SetConfig(hirda) == HAL_ERROR) |
AnnaBridge | 189:f392fc9709a3 | 364 | { |
AnnaBridge | 189:f392fc9709a3 | 365 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 366 | } |
AnnaBridge | 189:f392fc9709a3 | 367 | |
AnnaBridge | 189:f392fc9709a3 | 368 | /* In IRDA mode, the following bits must be kept cleared: |
AnnaBridge | 189:f392fc9709a3 | 369 | - LINEN, STOP and CLKEN bits in the USART_CR2 register, |
AnnaBridge | 189:f392fc9709a3 | 370 | - SCEN and HDSEL bits in the USART_CR3 register.*/ |
AnnaBridge | 189:f392fc9709a3 | 371 | CLEAR_BIT(hirda->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP)); |
AnnaBridge | 189:f392fc9709a3 | 372 | CLEAR_BIT(hirda->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); |
AnnaBridge | 189:f392fc9709a3 | 373 | |
AnnaBridge | 189:f392fc9709a3 | 374 | /* set the UART/USART in IRDA mode */ |
AnnaBridge | 189:f392fc9709a3 | 375 | hirda->Instance->CR3 |= USART_CR3_IREN; |
AnnaBridge | 189:f392fc9709a3 | 376 | |
AnnaBridge | 189:f392fc9709a3 | 377 | /* Enable the Peripheral */ |
AnnaBridge | 189:f392fc9709a3 | 378 | __HAL_IRDA_ENABLE(hirda); |
AnnaBridge | 189:f392fc9709a3 | 379 | |
AnnaBridge | 189:f392fc9709a3 | 380 | /* TEACK and/or REACK to check before moving hirda->gState and hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 381 | return (IRDA_CheckIdleState(hirda)); |
AnnaBridge | 189:f392fc9709a3 | 382 | } |
AnnaBridge | 189:f392fc9709a3 | 383 | |
AnnaBridge | 189:f392fc9709a3 | 384 | /** |
AnnaBridge | 189:f392fc9709a3 | 385 | * @brief DeInitialize the IRDA peripheral. |
AnnaBridge | 189:f392fc9709a3 | 386 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 387 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 388 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 389 | */ |
AnnaBridge | 189:f392fc9709a3 | 390 | HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 391 | { |
AnnaBridge | 189:f392fc9709a3 | 392 | /* Check the IRDA handle allocation */ |
AnnaBridge | 189:f392fc9709a3 | 393 | if (hirda == NULL) |
AnnaBridge | 189:f392fc9709a3 | 394 | { |
AnnaBridge | 189:f392fc9709a3 | 395 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 396 | } |
AnnaBridge | 189:f392fc9709a3 | 397 | |
AnnaBridge | 189:f392fc9709a3 | 398 | /* Check the USART/UART associated to the IRDA handle */ |
AnnaBridge | 189:f392fc9709a3 | 399 | assert_param(IS_IRDA_INSTANCE(hirda->Instance)); |
AnnaBridge | 189:f392fc9709a3 | 400 | |
AnnaBridge | 189:f392fc9709a3 | 401 | hirda->gState = HAL_IRDA_STATE_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 402 | |
AnnaBridge | 189:f392fc9709a3 | 403 | /* DeInit the low level hardware */ |
AnnaBridge | 189:f392fc9709a3 | 404 | #if USE_HAL_IRDA_REGISTER_CALLBACKS == 1 |
AnnaBridge | 189:f392fc9709a3 | 405 | if (hirda->MspDeInitCallback == NULL) |
AnnaBridge | 189:f392fc9709a3 | 406 | { |
AnnaBridge | 189:f392fc9709a3 | 407 | hirda->MspDeInitCallback = HAL_IRDA_MspDeInit; |
AnnaBridge | 189:f392fc9709a3 | 408 | } |
AnnaBridge | 189:f392fc9709a3 | 409 | /* DeInit the low level hardware */ |
AnnaBridge | 189:f392fc9709a3 | 410 | hirda->MspDeInitCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 411 | #else |
AnnaBridge | 189:f392fc9709a3 | 412 | HAL_IRDA_MspDeInit(hirda); |
AnnaBridge | 189:f392fc9709a3 | 413 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 414 | /* Disable the Peripheral */ |
AnnaBridge | 189:f392fc9709a3 | 415 | __HAL_IRDA_DISABLE(hirda); |
AnnaBridge | 189:f392fc9709a3 | 416 | |
AnnaBridge | 189:f392fc9709a3 | 417 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 418 | hirda->gState = HAL_IRDA_STATE_RESET; |
AnnaBridge | 189:f392fc9709a3 | 419 | hirda->RxState = HAL_IRDA_STATE_RESET; |
AnnaBridge | 189:f392fc9709a3 | 420 | |
AnnaBridge | 189:f392fc9709a3 | 421 | /* Process Unlock */ |
AnnaBridge | 189:f392fc9709a3 | 422 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 423 | |
AnnaBridge | 189:f392fc9709a3 | 424 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 425 | } |
AnnaBridge | 189:f392fc9709a3 | 426 | |
AnnaBridge | 189:f392fc9709a3 | 427 | /** |
AnnaBridge | 189:f392fc9709a3 | 428 | * @brief Initialize the IRDA MSP. |
AnnaBridge | 189:f392fc9709a3 | 429 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 430 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 431 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 432 | */ |
AnnaBridge | 189:f392fc9709a3 | 433 | __weak void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 434 | { |
AnnaBridge | 189:f392fc9709a3 | 435 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 436 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 437 | |
AnnaBridge | 189:f392fc9709a3 | 438 | /* NOTE: This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 439 | the HAL_IRDA_MspInit can be implemented in the user file |
AnnaBridge | 189:f392fc9709a3 | 440 | */ |
AnnaBridge | 189:f392fc9709a3 | 441 | } |
AnnaBridge | 189:f392fc9709a3 | 442 | |
AnnaBridge | 189:f392fc9709a3 | 443 | /** |
AnnaBridge | 189:f392fc9709a3 | 444 | * @brief DeInitialize the IRDA MSP. |
AnnaBridge | 189:f392fc9709a3 | 445 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 446 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 447 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 448 | */ |
AnnaBridge | 189:f392fc9709a3 | 449 | __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 450 | { |
AnnaBridge | 189:f392fc9709a3 | 451 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 452 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 453 | |
AnnaBridge | 189:f392fc9709a3 | 454 | /* NOTE: This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 455 | the HAL_IRDA_MspDeInit can be implemented in the user file |
AnnaBridge | 189:f392fc9709a3 | 456 | */ |
AnnaBridge | 189:f392fc9709a3 | 457 | } |
AnnaBridge | 189:f392fc9709a3 | 458 | |
AnnaBridge | 189:f392fc9709a3 | 459 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 460 | /** |
AnnaBridge | 189:f392fc9709a3 | 461 | * @brief Register a User IRDA Callback |
AnnaBridge | 189:f392fc9709a3 | 462 | * To be used instead of the weak predefined callback |
AnnaBridge | 189:f392fc9709a3 | 463 | * @param hirda irda handle |
AnnaBridge | 189:f392fc9709a3 | 464 | * @param CallbackID ID of the callback to be registered |
AnnaBridge | 189:f392fc9709a3 | 465 | * This parameter can be one of the following values: |
AnnaBridge | 189:f392fc9709a3 | 466 | * @arg @ref HAL_IRDA_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 467 | * @arg @ref HAL_IRDA_TX_COMPLETE_CB_ID Tx Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 468 | * @arg @ref HAL_IRDA_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 469 | * @arg @ref HAL_IRDA_RX_COMPLETE_CB_ID Rx Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 470 | * @arg @ref HAL_IRDA_ERROR_CB_ID Error Callback ID |
AnnaBridge | 189:f392fc9709a3 | 471 | * @arg @ref HAL_IRDA_ABORT_COMPLETE_CB_ID Abort Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 472 | * @arg @ref HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 473 | * @arg @ref HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 474 | * @arg @ref HAL_IRDA_MSPINIT_CB_ID MspInit Callback ID |
AnnaBridge | 189:f392fc9709a3 | 475 | * @arg @ref HAL_IRDA_MSPDEINIT_CB_ID MspDeInit Callback ID |
AnnaBridge | 189:f392fc9709a3 | 476 | * @param pCallback pointer to the Callback function |
AnnaBridge | 189:f392fc9709a3 | 477 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 478 | */ |
AnnaBridge | 189:f392fc9709a3 | 479 | HAL_StatusTypeDef HAL_IRDA_RegisterCallback(IRDA_HandleTypeDef *hirda, HAL_IRDA_CallbackIDTypeDef CallbackID, pIRDA_CallbackTypeDef pCallback) |
AnnaBridge | 189:f392fc9709a3 | 480 | { |
AnnaBridge | 189:f392fc9709a3 | 481 | HAL_StatusTypeDef status = HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 482 | |
AnnaBridge | 189:f392fc9709a3 | 483 | if (pCallback == NULL) |
AnnaBridge | 189:f392fc9709a3 | 484 | { |
AnnaBridge | 189:f392fc9709a3 | 485 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 486 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 487 | |
AnnaBridge | 189:f392fc9709a3 | 488 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 489 | } |
AnnaBridge | 189:f392fc9709a3 | 490 | /* Process locked */ |
AnnaBridge | 189:f392fc9709a3 | 491 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 492 | |
AnnaBridge | 189:f392fc9709a3 | 493 | if (hirda->gState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 494 | { |
AnnaBridge | 189:f392fc9709a3 | 495 | switch (CallbackID) |
AnnaBridge | 189:f392fc9709a3 | 496 | { |
AnnaBridge | 189:f392fc9709a3 | 497 | case HAL_IRDA_TX_HALFCOMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 498 | hirda->TxHalfCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 499 | break; |
AnnaBridge | 189:f392fc9709a3 | 500 | |
AnnaBridge | 189:f392fc9709a3 | 501 | case HAL_IRDA_TX_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 502 | hirda->TxCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 503 | break; |
AnnaBridge | 189:f392fc9709a3 | 504 | |
AnnaBridge | 189:f392fc9709a3 | 505 | case HAL_IRDA_RX_HALFCOMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 506 | hirda->RxHalfCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 507 | break; |
AnnaBridge | 189:f392fc9709a3 | 508 | |
AnnaBridge | 189:f392fc9709a3 | 509 | case HAL_IRDA_RX_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 510 | hirda->RxCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 511 | break; |
AnnaBridge | 189:f392fc9709a3 | 512 | |
AnnaBridge | 189:f392fc9709a3 | 513 | case HAL_IRDA_ERROR_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 514 | hirda->ErrorCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 515 | break; |
AnnaBridge | 189:f392fc9709a3 | 516 | |
AnnaBridge | 189:f392fc9709a3 | 517 | case HAL_IRDA_ABORT_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 518 | hirda->AbortCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 519 | break; |
AnnaBridge | 189:f392fc9709a3 | 520 | |
AnnaBridge | 189:f392fc9709a3 | 521 | case HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 522 | hirda->AbortTransmitCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 523 | break; |
AnnaBridge | 189:f392fc9709a3 | 524 | |
AnnaBridge | 189:f392fc9709a3 | 525 | case HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 526 | hirda->AbortReceiveCpltCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 527 | break; |
AnnaBridge | 189:f392fc9709a3 | 528 | |
AnnaBridge | 189:f392fc9709a3 | 529 | case HAL_IRDA_MSPINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 530 | hirda->MspInitCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 531 | break; |
AnnaBridge | 189:f392fc9709a3 | 532 | |
AnnaBridge | 189:f392fc9709a3 | 533 | case HAL_IRDA_MSPDEINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 534 | hirda->MspDeInitCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 535 | break; |
AnnaBridge | 189:f392fc9709a3 | 536 | |
AnnaBridge | 189:f392fc9709a3 | 537 | default : |
AnnaBridge | 189:f392fc9709a3 | 538 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 539 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 540 | |
AnnaBridge | 189:f392fc9709a3 | 541 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 542 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 543 | break; |
AnnaBridge | 189:f392fc9709a3 | 544 | } |
AnnaBridge | 189:f392fc9709a3 | 545 | } |
AnnaBridge | 189:f392fc9709a3 | 546 | else if (hirda->gState == HAL_IRDA_STATE_RESET) |
AnnaBridge | 189:f392fc9709a3 | 547 | { |
AnnaBridge | 189:f392fc9709a3 | 548 | switch (CallbackID) |
AnnaBridge | 189:f392fc9709a3 | 549 | { |
AnnaBridge | 189:f392fc9709a3 | 550 | case HAL_IRDA_MSPINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 551 | hirda->MspInitCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 552 | break; |
AnnaBridge | 189:f392fc9709a3 | 553 | |
AnnaBridge | 189:f392fc9709a3 | 554 | case HAL_IRDA_MSPDEINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 555 | hirda->MspDeInitCallback = pCallback; |
AnnaBridge | 189:f392fc9709a3 | 556 | break; |
AnnaBridge | 189:f392fc9709a3 | 557 | |
AnnaBridge | 189:f392fc9709a3 | 558 | default : |
AnnaBridge | 189:f392fc9709a3 | 559 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 560 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 561 | |
AnnaBridge | 189:f392fc9709a3 | 562 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 563 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 564 | break; |
AnnaBridge | 189:f392fc9709a3 | 565 | } |
AnnaBridge | 189:f392fc9709a3 | 566 | } |
AnnaBridge | 189:f392fc9709a3 | 567 | else |
AnnaBridge | 189:f392fc9709a3 | 568 | { |
AnnaBridge | 189:f392fc9709a3 | 569 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 570 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 571 | |
AnnaBridge | 189:f392fc9709a3 | 572 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 573 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 574 | } |
AnnaBridge | 189:f392fc9709a3 | 575 | |
AnnaBridge | 189:f392fc9709a3 | 576 | /* Release Lock */ |
AnnaBridge | 189:f392fc9709a3 | 577 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 578 | |
AnnaBridge | 189:f392fc9709a3 | 579 | return status; |
AnnaBridge | 189:f392fc9709a3 | 580 | } |
AnnaBridge | 189:f392fc9709a3 | 581 | |
AnnaBridge | 189:f392fc9709a3 | 582 | /** |
AnnaBridge | 189:f392fc9709a3 | 583 | * @brief Unregister an IRDA callback |
AnnaBridge | 189:f392fc9709a3 | 584 | * IRDA callback is redirected to the weak predefined callback |
AnnaBridge | 189:f392fc9709a3 | 585 | * @param hirda irda handle |
AnnaBridge | 189:f392fc9709a3 | 586 | * @param CallbackID ID of the callback to be unregistered |
AnnaBridge | 189:f392fc9709a3 | 587 | * This parameter can be one of the following values: |
AnnaBridge | 189:f392fc9709a3 | 588 | * @arg @ref HAL_IRDA_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 589 | * @arg @ref HAL_IRDA_TX_COMPLETE_CB_ID Tx Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 590 | * @arg @ref HAL_IRDA_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 591 | * @arg @ref HAL_IRDA_RX_COMPLETE_CB_ID Rx Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 592 | * @arg @ref HAL_IRDA_ERROR_CB_ID Error Callback ID |
AnnaBridge | 189:f392fc9709a3 | 593 | * @arg @ref HAL_IRDA_ABORT_COMPLETE_CB_ID Abort Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 594 | * @arg @ref HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 595 | * @arg @ref HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID |
AnnaBridge | 189:f392fc9709a3 | 596 | * @arg @ref HAL_IRDA_MSPINIT_CB_ID MspInit Callback ID |
AnnaBridge | 189:f392fc9709a3 | 597 | * @arg @ref HAL_IRDA_MSPDEINIT_CB_ID MspDeInit Callback ID |
AnnaBridge | 189:f392fc9709a3 | 598 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 599 | */ |
AnnaBridge | 189:f392fc9709a3 | 600 | HAL_StatusTypeDef HAL_IRDA_UnRegisterCallback(IRDA_HandleTypeDef *hirda, HAL_IRDA_CallbackIDTypeDef CallbackID) |
AnnaBridge | 189:f392fc9709a3 | 601 | { |
AnnaBridge | 189:f392fc9709a3 | 602 | HAL_StatusTypeDef status = HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 603 | |
AnnaBridge | 189:f392fc9709a3 | 604 | /* Process locked */ |
AnnaBridge | 189:f392fc9709a3 | 605 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 606 | |
AnnaBridge | 189:f392fc9709a3 | 607 | if (HAL_IRDA_STATE_READY == hirda->gState) |
AnnaBridge | 189:f392fc9709a3 | 608 | { |
AnnaBridge | 189:f392fc9709a3 | 609 | switch (CallbackID) |
AnnaBridge | 189:f392fc9709a3 | 610 | { |
AnnaBridge | 189:f392fc9709a3 | 611 | case HAL_IRDA_TX_HALFCOMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 612 | hirda->TxHalfCpltCallback = HAL_IRDA_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 613 | break; |
AnnaBridge | 189:f392fc9709a3 | 614 | |
AnnaBridge | 189:f392fc9709a3 | 615 | case HAL_IRDA_TX_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 616 | hirda->TxCpltCallback = HAL_IRDA_TxCpltCallback; /* Legacy weak TxCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 617 | break; |
AnnaBridge | 189:f392fc9709a3 | 618 | |
AnnaBridge | 189:f392fc9709a3 | 619 | case HAL_IRDA_RX_HALFCOMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 620 | hirda->RxHalfCpltCallback = HAL_IRDA_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 621 | break; |
AnnaBridge | 189:f392fc9709a3 | 622 | |
AnnaBridge | 189:f392fc9709a3 | 623 | case HAL_IRDA_RX_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 624 | hirda->RxCpltCallback = HAL_IRDA_RxCpltCallback; /* Legacy weak RxCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 625 | break; |
AnnaBridge | 189:f392fc9709a3 | 626 | |
AnnaBridge | 189:f392fc9709a3 | 627 | case HAL_IRDA_ERROR_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 628 | hirda->ErrorCallback = HAL_IRDA_ErrorCallback; /* Legacy weak ErrorCallback */ |
AnnaBridge | 189:f392fc9709a3 | 629 | break; |
AnnaBridge | 189:f392fc9709a3 | 630 | |
AnnaBridge | 189:f392fc9709a3 | 631 | case HAL_IRDA_ABORT_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 632 | hirda->AbortCpltCallback = HAL_IRDA_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 633 | break; |
AnnaBridge | 189:f392fc9709a3 | 634 | |
AnnaBridge | 189:f392fc9709a3 | 635 | case HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 636 | hirda->AbortTransmitCpltCallback = HAL_IRDA_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 637 | break; |
AnnaBridge | 189:f392fc9709a3 | 638 | |
AnnaBridge | 189:f392fc9709a3 | 639 | case HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 640 | hirda->AbortReceiveCpltCallback = HAL_IRDA_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 641 | break; |
AnnaBridge | 189:f392fc9709a3 | 642 | |
AnnaBridge | 189:f392fc9709a3 | 643 | case HAL_IRDA_MSPINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 644 | hirda->MspInitCallback = HAL_IRDA_MspInit; /* Legacy weak MspInitCallback */ |
AnnaBridge | 189:f392fc9709a3 | 645 | break; |
AnnaBridge | 189:f392fc9709a3 | 646 | |
AnnaBridge | 189:f392fc9709a3 | 647 | case HAL_IRDA_MSPDEINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 648 | hirda->MspDeInitCallback = HAL_IRDA_MspDeInit; /* Legacy weak MspDeInitCallback */ |
AnnaBridge | 189:f392fc9709a3 | 649 | break; |
AnnaBridge | 189:f392fc9709a3 | 650 | |
AnnaBridge | 189:f392fc9709a3 | 651 | default : |
AnnaBridge | 189:f392fc9709a3 | 652 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 653 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 654 | |
AnnaBridge | 189:f392fc9709a3 | 655 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 656 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 657 | break; |
AnnaBridge | 189:f392fc9709a3 | 658 | } |
AnnaBridge | 189:f392fc9709a3 | 659 | } |
AnnaBridge | 189:f392fc9709a3 | 660 | else if (HAL_IRDA_STATE_RESET == hirda->gState) |
AnnaBridge | 189:f392fc9709a3 | 661 | { |
AnnaBridge | 189:f392fc9709a3 | 662 | switch (CallbackID) |
AnnaBridge | 189:f392fc9709a3 | 663 | { |
AnnaBridge | 189:f392fc9709a3 | 664 | case HAL_IRDA_MSPINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 665 | hirda->MspInitCallback = HAL_IRDA_MspInit; |
AnnaBridge | 189:f392fc9709a3 | 666 | break; |
AnnaBridge | 189:f392fc9709a3 | 667 | |
AnnaBridge | 189:f392fc9709a3 | 668 | case HAL_IRDA_MSPDEINIT_CB_ID : |
AnnaBridge | 189:f392fc9709a3 | 669 | hirda->MspDeInitCallback = HAL_IRDA_MspDeInit; |
AnnaBridge | 189:f392fc9709a3 | 670 | break; |
AnnaBridge | 189:f392fc9709a3 | 671 | |
AnnaBridge | 189:f392fc9709a3 | 672 | default : |
AnnaBridge | 189:f392fc9709a3 | 673 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 674 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 675 | |
AnnaBridge | 189:f392fc9709a3 | 676 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 677 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 678 | break; |
AnnaBridge | 189:f392fc9709a3 | 679 | } |
AnnaBridge | 189:f392fc9709a3 | 680 | } |
AnnaBridge | 189:f392fc9709a3 | 681 | else |
AnnaBridge | 189:f392fc9709a3 | 682 | { |
AnnaBridge | 189:f392fc9709a3 | 683 | /* Update the error code */ |
AnnaBridge | 189:f392fc9709a3 | 684 | hirda->ErrorCode |= HAL_IRDA_ERROR_INVALID_CALLBACK; |
AnnaBridge | 189:f392fc9709a3 | 685 | |
AnnaBridge | 189:f392fc9709a3 | 686 | /* Return error status */ |
AnnaBridge | 189:f392fc9709a3 | 687 | status = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 688 | } |
AnnaBridge | 189:f392fc9709a3 | 689 | |
AnnaBridge | 189:f392fc9709a3 | 690 | /* Release Lock */ |
AnnaBridge | 189:f392fc9709a3 | 691 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 692 | |
AnnaBridge | 189:f392fc9709a3 | 693 | return status; |
AnnaBridge | 189:f392fc9709a3 | 694 | } |
AnnaBridge | 189:f392fc9709a3 | 695 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 696 | |
AnnaBridge | 189:f392fc9709a3 | 697 | /** |
AnnaBridge | 189:f392fc9709a3 | 698 | * @} |
AnnaBridge | 189:f392fc9709a3 | 699 | */ |
AnnaBridge | 189:f392fc9709a3 | 700 | |
AnnaBridge | 189:f392fc9709a3 | 701 | /** @defgroup IRDA_Exported_Functions_Group2 IO operation functions |
AnnaBridge | 189:f392fc9709a3 | 702 | * @brief IRDA Transmit and Receive functions |
AnnaBridge | 189:f392fc9709a3 | 703 | * |
AnnaBridge | 189:f392fc9709a3 | 704 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 705 | =============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 706 | ##### IO operation functions ##### |
AnnaBridge | 189:f392fc9709a3 | 707 | =============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 708 | [..] |
AnnaBridge | 189:f392fc9709a3 | 709 | This subsection provides a set of functions allowing to manage the IRDA data transfers. |
AnnaBridge | 189:f392fc9709a3 | 710 | |
AnnaBridge | 189:f392fc9709a3 | 711 | [..] |
AnnaBridge | 189:f392fc9709a3 | 712 | IrDA is a half duplex communication protocol. If the Transmitter is busy, any data |
AnnaBridge | 189:f392fc9709a3 | 713 | on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver |
AnnaBridge | 189:f392fc9709a3 | 714 | is busy, data on the TX from the USART to IrDA will not be encoded by IrDA. |
AnnaBridge | 189:f392fc9709a3 | 715 | While receiving data, transmission should be avoided as the data to be transmitted |
AnnaBridge | 189:f392fc9709a3 | 716 | could be corrupted. |
AnnaBridge | 189:f392fc9709a3 | 717 | |
AnnaBridge | 189:f392fc9709a3 | 718 | (#) There are two modes of transfer: |
AnnaBridge | 189:f392fc9709a3 | 719 | (++) Blocking mode: the communication is performed in polling mode. |
AnnaBridge | 189:f392fc9709a3 | 720 | The HAL status of all data processing is returned by the same function |
AnnaBridge | 189:f392fc9709a3 | 721 | after finishing transfer. |
AnnaBridge | 189:f392fc9709a3 | 722 | (++) Non-Blocking mode: the communication is performed using Interrupts |
AnnaBridge | 189:f392fc9709a3 | 723 | or DMA, these API's return the HAL status. |
AnnaBridge | 189:f392fc9709a3 | 724 | The end of the data processing will be indicated through the |
AnnaBridge | 189:f392fc9709a3 | 725 | dedicated IRDA IRQ when using Interrupt mode or the DMA IRQ when |
AnnaBridge | 189:f392fc9709a3 | 726 | using DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 727 | The HAL_IRDA_TxCpltCallback(), HAL_IRDA_RxCpltCallback() user callbacks |
AnnaBridge | 189:f392fc9709a3 | 728 | will be executed respectively at the end of the Transmit or Receive process |
AnnaBridge | 189:f392fc9709a3 | 729 | The HAL_IRDA_ErrorCallback() user callback will be executed when a communication error is detected |
AnnaBridge | 189:f392fc9709a3 | 730 | |
AnnaBridge | 189:f392fc9709a3 | 731 | (#) Blocking mode APIs are : |
AnnaBridge | 189:f392fc9709a3 | 732 | (++) HAL_IRDA_Transmit() |
AnnaBridge | 189:f392fc9709a3 | 733 | (++) HAL_IRDA_Receive() |
AnnaBridge | 189:f392fc9709a3 | 734 | |
AnnaBridge | 189:f392fc9709a3 | 735 | (#) Non Blocking mode APIs with Interrupt are : |
AnnaBridge | 189:f392fc9709a3 | 736 | (++) HAL_IRDA_Transmit_IT() |
AnnaBridge | 189:f392fc9709a3 | 737 | (++) HAL_IRDA_Receive_IT() |
AnnaBridge | 189:f392fc9709a3 | 738 | (++) HAL_IRDA_IRQHandler() |
AnnaBridge | 189:f392fc9709a3 | 739 | |
AnnaBridge | 189:f392fc9709a3 | 740 | (#) Non Blocking mode functions with DMA are : |
AnnaBridge | 189:f392fc9709a3 | 741 | (++) HAL_IRDA_Transmit_DMA() |
AnnaBridge | 189:f392fc9709a3 | 742 | (++) HAL_IRDA_Receive_DMA() |
AnnaBridge | 189:f392fc9709a3 | 743 | (++) HAL_IRDA_DMAPause() |
AnnaBridge | 189:f392fc9709a3 | 744 | (++) HAL_IRDA_DMAResume() |
AnnaBridge | 189:f392fc9709a3 | 745 | (++) HAL_IRDA_DMAStop() |
AnnaBridge | 189:f392fc9709a3 | 746 | |
AnnaBridge | 189:f392fc9709a3 | 747 | (#) A set of Transfer Complete Callbacks are provided in Non Blocking mode: |
AnnaBridge | 189:f392fc9709a3 | 748 | (++) HAL_IRDA_TxHalfCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 749 | (++) HAL_IRDA_TxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 750 | (++) HAL_IRDA_RxHalfCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 751 | (++) HAL_IRDA_RxCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 752 | (++) HAL_IRDA_ErrorCallback() |
AnnaBridge | 189:f392fc9709a3 | 753 | |
AnnaBridge | 189:f392fc9709a3 | 754 | (#) Non-Blocking mode transfers could be aborted using Abort API's : |
AnnaBridge | 189:f392fc9709a3 | 755 | (+) HAL_IRDA_Abort() |
AnnaBridge | 189:f392fc9709a3 | 756 | (+) HAL_IRDA_AbortTransmit() |
AnnaBridge | 189:f392fc9709a3 | 757 | (+) HAL_IRDA_AbortReceive() |
AnnaBridge | 189:f392fc9709a3 | 758 | (+) HAL_IRDA_Abort_IT() |
AnnaBridge | 189:f392fc9709a3 | 759 | (+) HAL_IRDA_AbortTransmit_IT() |
AnnaBridge | 189:f392fc9709a3 | 760 | (+) HAL_IRDA_AbortReceive_IT() |
AnnaBridge | 189:f392fc9709a3 | 761 | |
AnnaBridge | 189:f392fc9709a3 | 762 | (#) For Abort services based on interrupts (HAL_IRDA_Abortxxx_IT), a set of Abort Complete Callbacks are provided: |
AnnaBridge | 189:f392fc9709a3 | 763 | (+) HAL_IRDA_AbortCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 764 | (+) HAL_IRDA_AbortTransmitCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 765 | (+) HAL_IRDA_AbortReceiveCpltCallback() |
AnnaBridge | 189:f392fc9709a3 | 766 | |
AnnaBridge | 189:f392fc9709a3 | 767 | (#) In Non-Blocking mode transfers, possible errors are split into 2 categories. |
AnnaBridge | 189:f392fc9709a3 | 768 | Errors are handled as follows : |
AnnaBridge | 189:f392fc9709a3 | 769 | (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is |
AnnaBridge | 189:f392fc9709a3 | 770 | to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception . |
AnnaBridge | 189:f392fc9709a3 | 771 | Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type, |
AnnaBridge | 189:f392fc9709a3 | 772 | and HAL_IRDA_ErrorCallback() user callback is executed. Transfer is kept ongoing on IRDA side. |
AnnaBridge | 189:f392fc9709a3 | 773 | If user wants to abort it, Abort services should be called by user. |
AnnaBridge | 189:f392fc9709a3 | 774 | (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted. |
AnnaBridge | 189:f392fc9709a3 | 775 | This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 776 | Error code is set to allow user to identify error type, and HAL_IRDA_ErrorCallback() user callback is executed. |
AnnaBridge | 189:f392fc9709a3 | 777 | |
AnnaBridge | 189:f392fc9709a3 | 778 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 779 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 780 | */ |
AnnaBridge | 189:f392fc9709a3 | 781 | |
AnnaBridge | 189:f392fc9709a3 | 782 | /** |
AnnaBridge | 189:f392fc9709a3 | 783 | * @brief Send an amount of data in blocking mode. |
AnnaBridge | 189:f392fc9709a3 | 784 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 785 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 786 | * @param pData Pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 787 | * @param Size Amount of data to be sent. |
AnnaBridge | 189:f392fc9709a3 | 788 | * @param Timeout Specify timeout value. |
AnnaBridge | 189:f392fc9709a3 | 789 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 790 | */ |
AnnaBridge | 189:f392fc9709a3 | 791 | HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout) |
AnnaBridge | 189:f392fc9709a3 | 792 | { |
AnnaBridge | 189:f392fc9709a3 | 793 | uint8_t *pdata8bits; |
AnnaBridge | 189:f392fc9709a3 | 794 | uint16_t *pdata16bits; |
AnnaBridge | 189:f392fc9709a3 | 795 | uint32_t tickstart; |
AnnaBridge | 189:f392fc9709a3 | 796 | |
AnnaBridge | 189:f392fc9709a3 | 797 | /* Check that a Tx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 798 | if (hirda->gState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 799 | { |
AnnaBridge | 189:f392fc9709a3 | 800 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 801 | { |
AnnaBridge | 189:f392fc9709a3 | 802 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 803 | } |
AnnaBridge | 189:f392fc9709a3 | 804 | |
AnnaBridge | 189:f392fc9709a3 | 805 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 806 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 807 | |
AnnaBridge | 189:f392fc9709a3 | 808 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 809 | hirda->gState = HAL_IRDA_STATE_BUSY_TX; |
AnnaBridge | 189:f392fc9709a3 | 810 | |
AnnaBridge | 189:f392fc9709a3 | 811 | /* Init tickstart for timeout managment*/ |
AnnaBridge | 189:f392fc9709a3 | 812 | tickstart = HAL_GetTick(); |
AnnaBridge | 189:f392fc9709a3 | 813 | |
AnnaBridge | 189:f392fc9709a3 | 814 | hirda->TxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 815 | hirda->TxXferCount = Size; |
AnnaBridge | 189:f392fc9709a3 | 816 | |
AnnaBridge | 189:f392fc9709a3 | 817 | /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ |
AnnaBridge | 189:f392fc9709a3 | 818 | if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE)) |
AnnaBridge | 189:f392fc9709a3 | 819 | { |
AnnaBridge | 189:f392fc9709a3 | 820 | pdata8bits = NULL; |
AnnaBridge | 189:f392fc9709a3 | 821 | pdata16bits = (uint16_t *) pData; /* Derogation R.11.3 */ |
AnnaBridge | 189:f392fc9709a3 | 822 | } |
AnnaBridge | 189:f392fc9709a3 | 823 | else |
AnnaBridge | 189:f392fc9709a3 | 824 | { |
AnnaBridge | 189:f392fc9709a3 | 825 | pdata8bits = pData; |
AnnaBridge | 189:f392fc9709a3 | 826 | pdata16bits = NULL; |
AnnaBridge | 189:f392fc9709a3 | 827 | } |
AnnaBridge | 189:f392fc9709a3 | 828 | |
AnnaBridge | 189:f392fc9709a3 | 829 | while (hirda->TxXferCount > 0U) |
AnnaBridge | 189:f392fc9709a3 | 830 | { |
AnnaBridge | 189:f392fc9709a3 | 831 | hirda->TxXferCount--; |
AnnaBridge | 189:f392fc9709a3 | 832 | |
AnnaBridge | 189:f392fc9709a3 | 833 | if (IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 834 | { |
AnnaBridge | 189:f392fc9709a3 | 835 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 836 | } |
AnnaBridge | 189:f392fc9709a3 | 837 | if (pdata8bits == NULL) |
AnnaBridge | 189:f392fc9709a3 | 838 | { |
AnnaBridge | 189:f392fc9709a3 | 839 | hirda->Instance->TDR = (uint16_t)(*pdata16bits & 0x01FFU); |
AnnaBridge | 189:f392fc9709a3 | 840 | pdata16bits++; |
AnnaBridge | 189:f392fc9709a3 | 841 | } |
AnnaBridge | 189:f392fc9709a3 | 842 | else |
AnnaBridge | 189:f392fc9709a3 | 843 | { |
AnnaBridge | 189:f392fc9709a3 | 844 | hirda->Instance->TDR = (uint8_t)(*pdata8bits & 0xFFU); |
AnnaBridge | 189:f392fc9709a3 | 845 | pdata8bits++; |
AnnaBridge | 189:f392fc9709a3 | 846 | } |
AnnaBridge | 189:f392fc9709a3 | 847 | } |
AnnaBridge | 189:f392fc9709a3 | 848 | |
AnnaBridge | 189:f392fc9709a3 | 849 | if (IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 850 | { |
AnnaBridge | 189:f392fc9709a3 | 851 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 852 | } |
AnnaBridge | 189:f392fc9709a3 | 853 | |
AnnaBridge | 189:f392fc9709a3 | 854 | /* At end of Tx process, restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 855 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 856 | |
AnnaBridge | 189:f392fc9709a3 | 857 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 858 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 859 | |
AnnaBridge | 189:f392fc9709a3 | 860 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 861 | } |
AnnaBridge | 189:f392fc9709a3 | 862 | else |
AnnaBridge | 189:f392fc9709a3 | 863 | { |
AnnaBridge | 189:f392fc9709a3 | 864 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 865 | } |
AnnaBridge | 189:f392fc9709a3 | 866 | } |
AnnaBridge | 189:f392fc9709a3 | 867 | |
AnnaBridge | 189:f392fc9709a3 | 868 | /** |
AnnaBridge | 189:f392fc9709a3 | 869 | * @brief Receive an amount of data in blocking mode. |
AnnaBridge | 189:f392fc9709a3 | 870 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 871 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 872 | * @param pData Pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 873 | * @param Size Amount of data to be received. |
AnnaBridge | 189:f392fc9709a3 | 874 | * @param Timeout Specify timeout value. |
AnnaBridge | 189:f392fc9709a3 | 875 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 876 | */ |
AnnaBridge | 189:f392fc9709a3 | 877 | HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout) |
AnnaBridge | 189:f392fc9709a3 | 878 | { |
AnnaBridge | 189:f392fc9709a3 | 879 | uint8_t *pdata8bits; |
AnnaBridge | 189:f392fc9709a3 | 880 | uint16_t *pdata16bits; |
AnnaBridge | 189:f392fc9709a3 | 881 | uint16_t uhMask; |
AnnaBridge | 189:f392fc9709a3 | 882 | uint32_t tickstart; |
AnnaBridge | 189:f392fc9709a3 | 883 | |
AnnaBridge | 189:f392fc9709a3 | 884 | /* Check that a Rx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 885 | if (hirda->RxState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 886 | { |
AnnaBridge | 189:f392fc9709a3 | 887 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 888 | { |
AnnaBridge | 189:f392fc9709a3 | 889 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 890 | } |
AnnaBridge | 189:f392fc9709a3 | 891 | |
AnnaBridge | 189:f392fc9709a3 | 892 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 893 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 894 | |
AnnaBridge | 189:f392fc9709a3 | 895 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 896 | hirda->RxState = HAL_IRDA_STATE_BUSY_RX; |
AnnaBridge | 189:f392fc9709a3 | 897 | |
AnnaBridge | 189:f392fc9709a3 | 898 | /* Init tickstart for timeout managment*/ |
AnnaBridge | 189:f392fc9709a3 | 899 | tickstart = HAL_GetTick(); |
AnnaBridge | 189:f392fc9709a3 | 900 | |
AnnaBridge | 189:f392fc9709a3 | 901 | hirda->RxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 902 | hirda->RxXferCount = Size; |
AnnaBridge | 189:f392fc9709a3 | 903 | |
AnnaBridge | 189:f392fc9709a3 | 904 | /* Computation of the mask to apply to RDR register |
AnnaBridge | 189:f392fc9709a3 | 905 | of the UART associated to the IRDA */ |
AnnaBridge | 189:f392fc9709a3 | 906 | IRDA_MASK_COMPUTATION(hirda); |
AnnaBridge | 189:f392fc9709a3 | 907 | uhMask = hirda->Mask; |
AnnaBridge | 189:f392fc9709a3 | 908 | |
AnnaBridge | 189:f392fc9709a3 | 909 | /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ |
AnnaBridge | 189:f392fc9709a3 | 910 | if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE)) |
AnnaBridge | 189:f392fc9709a3 | 911 | { |
AnnaBridge | 189:f392fc9709a3 | 912 | pdata8bits = NULL; |
AnnaBridge | 189:f392fc9709a3 | 913 | pdata16bits = (uint16_t *) pData; /* Derogation R.11.3 */ |
AnnaBridge | 189:f392fc9709a3 | 914 | } |
AnnaBridge | 189:f392fc9709a3 | 915 | else |
AnnaBridge | 189:f392fc9709a3 | 916 | { |
AnnaBridge | 189:f392fc9709a3 | 917 | pdata8bits = pData; |
AnnaBridge | 189:f392fc9709a3 | 918 | pdata16bits = NULL; |
AnnaBridge | 189:f392fc9709a3 | 919 | } |
AnnaBridge | 189:f392fc9709a3 | 920 | |
AnnaBridge | 189:f392fc9709a3 | 921 | /* Check data remaining to be received */ |
AnnaBridge | 189:f392fc9709a3 | 922 | while (hirda->RxXferCount > 0U) |
AnnaBridge | 189:f392fc9709a3 | 923 | { |
AnnaBridge | 189:f392fc9709a3 | 924 | hirda->RxXferCount--; |
AnnaBridge | 189:f392fc9709a3 | 925 | |
AnnaBridge | 189:f392fc9709a3 | 926 | if (IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 927 | { |
AnnaBridge | 189:f392fc9709a3 | 928 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 929 | } |
AnnaBridge | 189:f392fc9709a3 | 930 | if (pdata8bits == NULL) |
AnnaBridge | 189:f392fc9709a3 | 931 | { |
AnnaBridge | 189:f392fc9709a3 | 932 | *pdata16bits = (uint16_t)(hirda->Instance->RDR & uhMask); |
AnnaBridge | 189:f392fc9709a3 | 933 | pdata16bits++; |
AnnaBridge | 189:f392fc9709a3 | 934 | } |
AnnaBridge | 189:f392fc9709a3 | 935 | else |
AnnaBridge | 189:f392fc9709a3 | 936 | { |
AnnaBridge | 189:f392fc9709a3 | 937 | *pdata8bits = (uint8_t)(hirda->Instance->RDR & (uint8_t)uhMask); |
AnnaBridge | 189:f392fc9709a3 | 938 | pdata8bits++; |
AnnaBridge | 189:f392fc9709a3 | 939 | } |
AnnaBridge | 189:f392fc9709a3 | 940 | } |
AnnaBridge | 189:f392fc9709a3 | 941 | |
AnnaBridge | 189:f392fc9709a3 | 942 | /* At end of Rx process, restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 943 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 944 | |
AnnaBridge | 189:f392fc9709a3 | 945 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 946 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 947 | |
AnnaBridge | 189:f392fc9709a3 | 948 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 949 | } |
AnnaBridge | 189:f392fc9709a3 | 950 | else |
AnnaBridge | 189:f392fc9709a3 | 951 | { |
AnnaBridge | 189:f392fc9709a3 | 952 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 953 | } |
AnnaBridge | 189:f392fc9709a3 | 954 | } |
AnnaBridge | 189:f392fc9709a3 | 955 | |
AnnaBridge | 189:f392fc9709a3 | 956 | /** |
AnnaBridge | 189:f392fc9709a3 | 957 | * @brief Send an amount of data in interrupt mode. |
AnnaBridge | 189:f392fc9709a3 | 958 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 959 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 960 | * @param pData Pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 961 | * @param Size Amount of data to be sent. |
AnnaBridge | 189:f392fc9709a3 | 962 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 963 | */ |
AnnaBridge | 189:f392fc9709a3 | 964 | HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) |
AnnaBridge | 189:f392fc9709a3 | 965 | { |
AnnaBridge | 189:f392fc9709a3 | 966 | /* Check that a Tx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 967 | if (hirda->gState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 968 | { |
AnnaBridge | 189:f392fc9709a3 | 969 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 970 | { |
AnnaBridge | 189:f392fc9709a3 | 971 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 972 | } |
AnnaBridge | 189:f392fc9709a3 | 973 | |
AnnaBridge | 189:f392fc9709a3 | 974 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 975 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 976 | |
AnnaBridge | 189:f392fc9709a3 | 977 | hirda->pTxBuffPtr = pData; |
AnnaBridge | 189:f392fc9709a3 | 978 | hirda->TxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 979 | hirda->TxXferCount = Size; |
AnnaBridge | 189:f392fc9709a3 | 980 | |
AnnaBridge | 189:f392fc9709a3 | 981 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 982 | hirda->gState = HAL_IRDA_STATE_BUSY_TX; |
AnnaBridge | 189:f392fc9709a3 | 983 | |
AnnaBridge | 189:f392fc9709a3 | 984 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 985 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 986 | |
AnnaBridge | 189:f392fc9709a3 | 987 | /* Enable the IRDA Transmit Data Register Empty Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 988 | SET_BIT(hirda->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); |
AnnaBridge | 189:f392fc9709a3 | 989 | |
AnnaBridge | 189:f392fc9709a3 | 990 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 991 | } |
AnnaBridge | 189:f392fc9709a3 | 992 | else |
AnnaBridge | 189:f392fc9709a3 | 993 | { |
AnnaBridge | 189:f392fc9709a3 | 994 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 995 | } |
AnnaBridge | 189:f392fc9709a3 | 996 | } |
AnnaBridge | 189:f392fc9709a3 | 997 | |
AnnaBridge | 189:f392fc9709a3 | 998 | /** |
AnnaBridge | 189:f392fc9709a3 | 999 | * @brief Receive an amount of data in interrupt mode. |
AnnaBridge | 189:f392fc9709a3 | 1000 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1001 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1002 | * @param pData Pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 1003 | * @param Size Amount of data to be received. |
AnnaBridge | 189:f392fc9709a3 | 1004 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1005 | */ |
AnnaBridge | 189:f392fc9709a3 | 1006 | HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) |
AnnaBridge | 189:f392fc9709a3 | 1007 | { |
AnnaBridge | 189:f392fc9709a3 | 1008 | /* Check that a Rx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1009 | if (hirda->RxState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 1010 | { |
AnnaBridge | 189:f392fc9709a3 | 1011 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1012 | { |
AnnaBridge | 189:f392fc9709a3 | 1013 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 1014 | } |
AnnaBridge | 189:f392fc9709a3 | 1015 | |
AnnaBridge | 189:f392fc9709a3 | 1016 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 1017 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1018 | |
AnnaBridge | 189:f392fc9709a3 | 1019 | hirda->pRxBuffPtr = pData; |
AnnaBridge | 189:f392fc9709a3 | 1020 | hirda->RxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 1021 | hirda->RxXferCount = Size; |
AnnaBridge | 189:f392fc9709a3 | 1022 | |
AnnaBridge | 189:f392fc9709a3 | 1023 | /* Computation of the mask to apply to the RDR register |
AnnaBridge | 189:f392fc9709a3 | 1024 | of the UART associated to the IRDA */ |
AnnaBridge | 189:f392fc9709a3 | 1025 | IRDA_MASK_COMPUTATION(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1026 | |
AnnaBridge | 189:f392fc9709a3 | 1027 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1028 | hirda->RxState = HAL_IRDA_STATE_BUSY_RX; |
AnnaBridge | 189:f392fc9709a3 | 1029 | |
AnnaBridge | 189:f392fc9709a3 | 1030 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1031 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1032 | |
AnnaBridge | 189:f392fc9709a3 | 1033 | /* Enable the IRDA Parity Error and Data Register not empty Interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1034 | SET_BIT(hirda->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE); |
AnnaBridge | 189:f392fc9709a3 | 1035 | |
AnnaBridge | 189:f392fc9709a3 | 1036 | /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */ |
AnnaBridge | 189:f392fc9709a3 | 1037 | SET_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1038 | |
AnnaBridge | 189:f392fc9709a3 | 1039 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1040 | } |
AnnaBridge | 189:f392fc9709a3 | 1041 | else |
AnnaBridge | 189:f392fc9709a3 | 1042 | { |
AnnaBridge | 189:f392fc9709a3 | 1043 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 1044 | } |
AnnaBridge | 189:f392fc9709a3 | 1045 | } |
AnnaBridge | 189:f392fc9709a3 | 1046 | |
AnnaBridge | 189:f392fc9709a3 | 1047 | /** |
AnnaBridge | 189:f392fc9709a3 | 1048 | * @brief Send an amount of data in DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1049 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1050 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1051 | * @param pData pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 1052 | * @param Size amount of data to be sent. |
AnnaBridge | 189:f392fc9709a3 | 1053 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1054 | */ |
AnnaBridge | 189:f392fc9709a3 | 1055 | HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) |
AnnaBridge | 189:f392fc9709a3 | 1056 | { |
AnnaBridge | 189:f392fc9709a3 | 1057 | /* Check that a Tx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1058 | if (hirda->gState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 1059 | { |
AnnaBridge | 189:f392fc9709a3 | 1060 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1061 | { |
AnnaBridge | 189:f392fc9709a3 | 1062 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 1063 | } |
AnnaBridge | 189:f392fc9709a3 | 1064 | |
AnnaBridge | 189:f392fc9709a3 | 1065 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 1066 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1067 | |
AnnaBridge | 189:f392fc9709a3 | 1068 | hirda->pTxBuffPtr = pData; |
AnnaBridge | 189:f392fc9709a3 | 1069 | hirda->TxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 1070 | hirda->TxXferCount = Size; |
AnnaBridge | 189:f392fc9709a3 | 1071 | |
AnnaBridge | 189:f392fc9709a3 | 1072 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1073 | hirda->gState = HAL_IRDA_STATE_BUSY_TX; |
AnnaBridge | 189:f392fc9709a3 | 1074 | |
AnnaBridge | 189:f392fc9709a3 | 1075 | /* Set the IRDA DMA transfer complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1076 | hirda->hdmatx->XferCpltCallback = IRDA_DMATransmitCplt; |
AnnaBridge | 189:f392fc9709a3 | 1077 | |
AnnaBridge | 189:f392fc9709a3 | 1078 | /* Set the IRDA DMA half transfer complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1079 | hirda->hdmatx->XferHalfCpltCallback = IRDA_DMATransmitHalfCplt; |
AnnaBridge | 189:f392fc9709a3 | 1080 | |
AnnaBridge | 189:f392fc9709a3 | 1081 | /* Set the DMA error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1082 | hirda->hdmatx->XferErrorCallback = IRDA_DMAError; |
AnnaBridge | 189:f392fc9709a3 | 1083 | |
AnnaBridge | 189:f392fc9709a3 | 1084 | /* Set the DMA abort callback */ |
AnnaBridge | 189:f392fc9709a3 | 1085 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1086 | |
AnnaBridge | 189:f392fc9709a3 | 1087 | /* Enable the IRDA transmit DMA channel */ |
AnnaBridge | 189:f392fc9709a3 | 1088 | if (HAL_DMA_Start_IT(hirda->hdmatx, (uint32_t)hirda->pTxBuffPtr, (uint32_t)&hirda->Instance->TDR, Size) == HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1089 | { |
AnnaBridge | 189:f392fc9709a3 | 1090 | /* Clear the TC flag in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1091 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_TCF); |
AnnaBridge | 189:f392fc9709a3 | 1092 | |
AnnaBridge | 189:f392fc9709a3 | 1093 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1094 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1095 | |
AnnaBridge | 189:f392fc9709a3 | 1096 | /* Enable the DMA transfer for transmit request by setting the DMAT bit |
AnnaBridge | 189:f392fc9709a3 | 1097 | in the USART CR3 register */ |
AnnaBridge | 189:f392fc9709a3 | 1098 | SET_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1099 | |
AnnaBridge | 189:f392fc9709a3 | 1100 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1101 | } |
AnnaBridge | 189:f392fc9709a3 | 1102 | else |
AnnaBridge | 189:f392fc9709a3 | 1103 | { |
AnnaBridge | 189:f392fc9709a3 | 1104 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1105 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1106 | |
AnnaBridge | 189:f392fc9709a3 | 1107 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1108 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1109 | |
AnnaBridge | 189:f392fc9709a3 | 1110 | /* Restore hirda->gState to ready */ |
AnnaBridge | 189:f392fc9709a3 | 1111 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1112 | |
AnnaBridge | 189:f392fc9709a3 | 1113 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 1114 | } |
AnnaBridge | 189:f392fc9709a3 | 1115 | } |
AnnaBridge | 189:f392fc9709a3 | 1116 | else |
AnnaBridge | 189:f392fc9709a3 | 1117 | { |
AnnaBridge | 189:f392fc9709a3 | 1118 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 1119 | } |
AnnaBridge | 189:f392fc9709a3 | 1120 | } |
AnnaBridge | 189:f392fc9709a3 | 1121 | |
AnnaBridge | 189:f392fc9709a3 | 1122 | /** |
AnnaBridge | 189:f392fc9709a3 | 1123 | * @brief Receive an amount of data in DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1124 | * @note When the IRDA parity is enabled (PCE = 1), the received data contains |
AnnaBridge | 189:f392fc9709a3 | 1125 | * the parity bit (MSB position). |
AnnaBridge | 189:f392fc9709a3 | 1126 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1127 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1128 | * @param pData Pointer to data buffer. |
AnnaBridge | 189:f392fc9709a3 | 1129 | * @param Size Amount of data to be received. |
AnnaBridge | 189:f392fc9709a3 | 1130 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1131 | */ |
AnnaBridge | 189:f392fc9709a3 | 1132 | HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) |
AnnaBridge | 189:f392fc9709a3 | 1133 | { |
AnnaBridge | 189:f392fc9709a3 | 1134 | /* Check that a Rx process is not already ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1135 | if (hirda->RxState == HAL_IRDA_STATE_READY) |
AnnaBridge | 189:f392fc9709a3 | 1136 | { |
AnnaBridge | 189:f392fc9709a3 | 1137 | if ((pData == NULL) || (Size == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1138 | { |
AnnaBridge | 189:f392fc9709a3 | 1139 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 1140 | } |
AnnaBridge | 189:f392fc9709a3 | 1141 | |
AnnaBridge | 189:f392fc9709a3 | 1142 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 1143 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1144 | |
AnnaBridge | 189:f392fc9709a3 | 1145 | hirda->pRxBuffPtr = pData; |
AnnaBridge | 189:f392fc9709a3 | 1146 | hirda->RxXferSize = Size; |
AnnaBridge | 189:f392fc9709a3 | 1147 | |
AnnaBridge | 189:f392fc9709a3 | 1148 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1149 | hirda->RxState = HAL_IRDA_STATE_BUSY_RX; |
AnnaBridge | 189:f392fc9709a3 | 1150 | |
AnnaBridge | 189:f392fc9709a3 | 1151 | /* Set the IRDA DMA transfer complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1152 | hirda->hdmarx->XferCpltCallback = IRDA_DMAReceiveCplt; |
AnnaBridge | 189:f392fc9709a3 | 1153 | |
AnnaBridge | 189:f392fc9709a3 | 1154 | /* Set the IRDA DMA half transfer complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1155 | hirda->hdmarx->XferHalfCpltCallback = IRDA_DMAReceiveHalfCplt; |
AnnaBridge | 189:f392fc9709a3 | 1156 | |
AnnaBridge | 189:f392fc9709a3 | 1157 | /* Set the DMA error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1158 | hirda->hdmarx->XferErrorCallback = IRDA_DMAError; |
AnnaBridge | 189:f392fc9709a3 | 1159 | |
AnnaBridge | 189:f392fc9709a3 | 1160 | /* Set the DMA abort callback */ |
AnnaBridge | 189:f392fc9709a3 | 1161 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1162 | |
AnnaBridge | 189:f392fc9709a3 | 1163 | /* Enable the DMA channel */ |
AnnaBridge | 189:f392fc9709a3 | 1164 | if (HAL_DMA_Start_IT(hirda->hdmarx, (uint32_t)&hirda->Instance->RDR, (uint32_t)hirda->pRxBuffPtr, Size) == HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1165 | { |
AnnaBridge | 189:f392fc9709a3 | 1166 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1167 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1168 | |
AnnaBridge | 189:f392fc9709a3 | 1169 | /* Enable the UART Parity Error Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 1170 | SET_BIT(hirda->Instance->CR1, USART_CR1_PEIE); |
AnnaBridge | 189:f392fc9709a3 | 1171 | |
AnnaBridge | 189:f392fc9709a3 | 1172 | /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ |
AnnaBridge | 189:f392fc9709a3 | 1173 | SET_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1174 | |
AnnaBridge | 189:f392fc9709a3 | 1175 | /* Enable the DMA transfer for the receiver request by setting the DMAR bit |
AnnaBridge | 189:f392fc9709a3 | 1176 | in the USART CR3 register */ |
AnnaBridge | 189:f392fc9709a3 | 1177 | SET_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1178 | |
AnnaBridge | 189:f392fc9709a3 | 1179 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1180 | } |
AnnaBridge | 189:f392fc9709a3 | 1181 | else |
AnnaBridge | 189:f392fc9709a3 | 1182 | { |
AnnaBridge | 189:f392fc9709a3 | 1183 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1184 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1185 | |
AnnaBridge | 189:f392fc9709a3 | 1186 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1187 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1188 | |
AnnaBridge | 189:f392fc9709a3 | 1189 | /* Restore hirda->RxState to ready */ |
AnnaBridge | 189:f392fc9709a3 | 1190 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1191 | |
AnnaBridge | 189:f392fc9709a3 | 1192 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 1193 | } |
AnnaBridge | 189:f392fc9709a3 | 1194 | } |
AnnaBridge | 189:f392fc9709a3 | 1195 | else |
AnnaBridge | 189:f392fc9709a3 | 1196 | { |
AnnaBridge | 189:f392fc9709a3 | 1197 | return HAL_BUSY; |
AnnaBridge | 189:f392fc9709a3 | 1198 | } |
AnnaBridge | 189:f392fc9709a3 | 1199 | } |
AnnaBridge | 189:f392fc9709a3 | 1200 | |
AnnaBridge | 189:f392fc9709a3 | 1201 | |
AnnaBridge | 189:f392fc9709a3 | 1202 | /** |
AnnaBridge | 189:f392fc9709a3 | 1203 | * @brief Pause the DMA Transfer. |
AnnaBridge | 189:f392fc9709a3 | 1204 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1205 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1206 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1207 | */ |
AnnaBridge | 189:f392fc9709a3 | 1208 | HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1209 | { |
AnnaBridge | 189:f392fc9709a3 | 1210 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 1211 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1212 | |
AnnaBridge | 189:f392fc9709a3 | 1213 | if (hirda->gState == HAL_IRDA_STATE_BUSY_TX) |
AnnaBridge | 189:f392fc9709a3 | 1214 | { |
AnnaBridge | 189:f392fc9709a3 | 1215 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1216 | { |
AnnaBridge | 189:f392fc9709a3 | 1217 | /* Disable the IRDA DMA Tx request */ |
AnnaBridge | 189:f392fc9709a3 | 1218 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1219 | } |
AnnaBridge | 189:f392fc9709a3 | 1220 | } |
AnnaBridge | 189:f392fc9709a3 | 1221 | if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX) |
AnnaBridge | 189:f392fc9709a3 | 1222 | { |
AnnaBridge | 189:f392fc9709a3 | 1223 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1224 | { |
AnnaBridge | 189:f392fc9709a3 | 1225 | /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1226 | CLEAR_BIT(hirda->Instance->CR1, USART_CR1_PEIE); |
AnnaBridge | 189:f392fc9709a3 | 1227 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1228 | |
AnnaBridge | 189:f392fc9709a3 | 1229 | /* Disable the IRDA DMA Rx request */ |
AnnaBridge | 189:f392fc9709a3 | 1230 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1231 | } |
AnnaBridge | 189:f392fc9709a3 | 1232 | } |
AnnaBridge | 189:f392fc9709a3 | 1233 | |
AnnaBridge | 189:f392fc9709a3 | 1234 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1235 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1236 | |
AnnaBridge | 189:f392fc9709a3 | 1237 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1238 | } |
AnnaBridge | 189:f392fc9709a3 | 1239 | |
AnnaBridge | 189:f392fc9709a3 | 1240 | /** |
AnnaBridge | 189:f392fc9709a3 | 1241 | * @brief Resume the DMA Transfer. |
AnnaBridge | 189:f392fc9709a3 | 1242 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1243 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1244 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1245 | */ |
AnnaBridge | 189:f392fc9709a3 | 1246 | HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1247 | { |
AnnaBridge | 189:f392fc9709a3 | 1248 | /* Process Locked */ |
AnnaBridge | 189:f392fc9709a3 | 1249 | __HAL_LOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1250 | |
AnnaBridge | 189:f392fc9709a3 | 1251 | if (hirda->gState == HAL_IRDA_STATE_BUSY_TX) |
AnnaBridge | 189:f392fc9709a3 | 1252 | { |
AnnaBridge | 189:f392fc9709a3 | 1253 | /* Enable the IRDA DMA Tx request */ |
AnnaBridge | 189:f392fc9709a3 | 1254 | SET_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1255 | } |
AnnaBridge | 189:f392fc9709a3 | 1256 | if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX) |
AnnaBridge | 189:f392fc9709a3 | 1257 | { |
AnnaBridge | 189:f392fc9709a3 | 1258 | /* Clear the Overrun flag before resuming the Rx transfer*/ |
AnnaBridge | 189:f392fc9709a3 | 1259 | __HAL_IRDA_CLEAR_OREFLAG(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1260 | |
AnnaBridge | 189:f392fc9709a3 | 1261 | /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1262 | SET_BIT(hirda->Instance->CR1, USART_CR1_PEIE); |
AnnaBridge | 189:f392fc9709a3 | 1263 | SET_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1264 | |
AnnaBridge | 189:f392fc9709a3 | 1265 | /* Enable the IRDA DMA Rx request */ |
AnnaBridge | 189:f392fc9709a3 | 1266 | SET_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1267 | } |
AnnaBridge | 189:f392fc9709a3 | 1268 | |
AnnaBridge | 189:f392fc9709a3 | 1269 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 1270 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1271 | |
AnnaBridge | 189:f392fc9709a3 | 1272 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1273 | } |
AnnaBridge | 189:f392fc9709a3 | 1274 | |
AnnaBridge | 189:f392fc9709a3 | 1275 | /** |
AnnaBridge | 189:f392fc9709a3 | 1276 | * @brief Stop the DMA Transfer. |
AnnaBridge | 189:f392fc9709a3 | 1277 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1278 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1279 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1280 | */ |
AnnaBridge | 189:f392fc9709a3 | 1281 | HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1282 | { |
AnnaBridge | 189:f392fc9709a3 | 1283 | /* The Lock is not implemented on this API to allow the user application |
AnnaBridge | 189:f392fc9709a3 | 1284 | to call the HAL IRDA API under callbacks HAL_IRDA_TxCpltCallback() / HAL_IRDA_RxCpltCallback() / |
AnnaBridge | 189:f392fc9709a3 | 1285 | HAL_IRDA_TxHalfCpltCallback / HAL_IRDA_RxHalfCpltCallback: |
AnnaBridge | 189:f392fc9709a3 | 1286 | indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete |
AnnaBridge | 189:f392fc9709a3 | 1287 | interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of |
AnnaBridge | 189:f392fc9709a3 | 1288 | the stream and the corresponding call back is executed. */ |
AnnaBridge | 189:f392fc9709a3 | 1289 | |
AnnaBridge | 189:f392fc9709a3 | 1290 | /* Stop IRDA DMA Tx request if ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1291 | if (hirda->gState == HAL_IRDA_STATE_BUSY_TX) |
AnnaBridge | 189:f392fc9709a3 | 1292 | { |
AnnaBridge | 189:f392fc9709a3 | 1293 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1294 | { |
AnnaBridge | 189:f392fc9709a3 | 1295 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1296 | |
AnnaBridge | 189:f392fc9709a3 | 1297 | /* Abort the IRDA DMA Tx channel */ |
AnnaBridge | 189:f392fc9709a3 | 1298 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1299 | { |
AnnaBridge | 189:f392fc9709a3 | 1300 | if (HAL_DMA_Abort(hirda->hdmatx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1301 | { |
AnnaBridge | 189:f392fc9709a3 | 1302 | if (HAL_DMA_GetError(hirda->hdmatx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1303 | { |
AnnaBridge | 189:f392fc9709a3 | 1304 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1305 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1306 | |
AnnaBridge | 189:f392fc9709a3 | 1307 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1308 | } |
AnnaBridge | 189:f392fc9709a3 | 1309 | } |
AnnaBridge | 189:f392fc9709a3 | 1310 | } |
AnnaBridge | 189:f392fc9709a3 | 1311 | |
AnnaBridge | 189:f392fc9709a3 | 1312 | IRDA_EndTxTransfer(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1313 | } |
AnnaBridge | 189:f392fc9709a3 | 1314 | } |
AnnaBridge | 189:f392fc9709a3 | 1315 | |
AnnaBridge | 189:f392fc9709a3 | 1316 | /* Stop IRDA DMA Rx request if ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1317 | if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX) |
AnnaBridge | 189:f392fc9709a3 | 1318 | { |
AnnaBridge | 189:f392fc9709a3 | 1319 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1320 | { |
AnnaBridge | 189:f392fc9709a3 | 1321 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1322 | |
AnnaBridge | 189:f392fc9709a3 | 1323 | /* Abort the IRDA DMA Rx channel */ |
AnnaBridge | 189:f392fc9709a3 | 1324 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1325 | { |
AnnaBridge | 189:f392fc9709a3 | 1326 | if (HAL_DMA_Abort(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1327 | { |
AnnaBridge | 189:f392fc9709a3 | 1328 | if (HAL_DMA_GetError(hirda->hdmarx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1329 | { |
AnnaBridge | 189:f392fc9709a3 | 1330 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1331 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1332 | |
AnnaBridge | 189:f392fc9709a3 | 1333 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1334 | } |
AnnaBridge | 189:f392fc9709a3 | 1335 | } |
AnnaBridge | 189:f392fc9709a3 | 1336 | } |
AnnaBridge | 189:f392fc9709a3 | 1337 | |
AnnaBridge | 189:f392fc9709a3 | 1338 | IRDA_EndRxTransfer(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1339 | } |
AnnaBridge | 189:f392fc9709a3 | 1340 | } |
AnnaBridge | 189:f392fc9709a3 | 1341 | |
AnnaBridge | 189:f392fc9709a3 | 1342 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1343 | } |
AnnaBridge | 189:f392fc9709a3 | 1344 | |
AnnaBridge | 189:f392fc9709a3 | 1345 | /** |
AnnaBridge | 189:f392fc9709a3 | 1346 | * @brief Abort ongoing transfers (blocking mode). |
AnnaBridge | 189:f392fc9709a3 | 1347 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1348 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1349 | * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1350 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1351 | * - Disable IRDA Interrupts (Tx and Rx) |
AnnaBridge | 189:f392fc9709a3 | 1352 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1353 | * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1354 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1355 | * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. |
AnnaBridge | 189:f392fc9709a3 | 1356 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1357 | */ |
AnnaBridge | 189:f392fc9709a3 | 1358 | HAL_StatusTypeDef HAL_IRDA_Abort(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1359 | { |
AnnaBridge | 189:f392fc9709a3 | 1360 | /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1361 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); |
AnnaBridge | 189:f392fc9709a3 | 1362 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1363 | |
AnnaBridge | 189:f392fc9709a3 | 1364 | /* Disable the IRDA DMA Tx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1365 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1366 | { |
AnnaBridge | 189:f392fc9709a3 | 1367 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1368 | |
AnnaBridge | 189:f392fc9709a3 | 1369 | /* Abort the IRDA DMA Tx channel : use blocking DMA Abort API (no callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1370 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1371 | { |
AnnaBridge | 189:f392fc9709a3 | 1372 | /* Set the IRDA DMA Abort callback to Null. |
AnnaBridge | 189:f392fc9709a3 | 1373 | No call back execution at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1374 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1375 | |
AnnaBridge | 189:f392fc9709a3 | 1376 | if (HAL_DMA_Abort(hirda->hdmatx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1377 | { |
AnnaBridge | 189:f392fc9709a3 | 1378 | if (HAL_DMA_GetError(hirda->hdmatx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1379 | { |
AnnaBridge | 189:f392fc9709a3 | 1380 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1381 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1382 | |
AnnaBridge | 189:f392fc9709a3 | 1383 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1384 | } |
AnnaBridge | 189:f392fc9709a3 | 1385 | } |
AnnaBridge | 189:f392fc9709a3 | 1386 | } |
AnnaBridge | 189:f392fc9709a3 | 1387 | } |
AnnaBridge | 189:f392fc9709a3 | 1388 | |
AnnaBridge | 189:f392fc9709a3 | 1389 | /* Disable the IRDA DMA Rx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1390 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1391 | { |
AnnaBridge | 189:f392fc9709a3 | 1392 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1393 | |
AnnaBridge | 189:f392fc9709a3 | 1394 | /* Abort the IRDA DMA Rx channel : use blocking DMA Abort API (no callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1395 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1396 | { |
AnnaBridge | 189:f392fc9709a3 | 1397 | /* Set the IRDA DMA Abort callback to Null. |
AnnaBridge | 189:f392fc9709a3 | 1398 | No call back execution at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1399 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1400 | |
AnnaBridge | 189:f392fc9709a3 | 1401 | if (HAL_DMA_Abort(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1402 | { |
AnnaBridge | 189:f392fc9709a3 | 1403 | if (HAL_DMA_GetError(hirda->hdmarx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1404 | { |
AnnaBridge | 189:f392fc9709a3 | 1405 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1406 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1407 | |
AnnaBridge | 189:f392fc9709a3 | 1408 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1409 | } |
AnnaBridge | 189:f392fc9709a3 | 1410 | } |
AnnaBridge | 189:f392fc9709a3 | 1411 | } |
AnnaBridge | 189:f392fc9709a3 | 1412 | } |
AnnaBridge | 189:f392fc9709a3 | 1413 | |
AnnaBridge | 189:f392fc9709a3 | 1414 | /* Reset Tx and Rx transfer counters */ |
AnnaBridge | 189:f392fc9709a3 | 1415 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1416 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1417 | |
AnnaBridge | 189:f392fc9709a3 | 1418 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1419 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1420 | |
AnnaBridge | 189:f392fc9709a3 | 1421 | /* Restore hirda->gState and hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1422 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1423 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1424 | |
AnnaBridge | 189:f392fc9709a3 | 1425 | /* Reset Handle ErrorCode to No Error */ |
AnnaBridge | 189:f392fc9709a3 | 1426 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1427 | |
AnnaBridge | 189:f392fc9709a3 | 1428 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1429 | } |
AnnaBridge | 189:f392fc9709a3 | 1430 | |
AnnaBridge | 189:f392fc9709a3 | 1431 | /** |
AnnaBridge | 189:f392fc9709a3 | 1432 | * @brief Abort ongoing Transmit transfer (blocking mode). |
AnnaBridge | 189:f392fc9709a3 | 1433 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1434 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1435 | * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1436 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1437 | * - Disable IRDA Interrupts (Tx) |
AnnaBridge | 189:f392fc9709a3 | 1438 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1439 | * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1440 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1441 | * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. |
AnnaBridge | 189:f392fc9709a3 | 1442 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1443 | */ |
AnnaBridge | 189:f392fc9709a3 | 1444 | HAL_StatusTypeDef HAL_IRDA_AbortTransmit(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1445 | { |
AnnaBridge | 189:f392fc9709a3 | 1446 | /* Disable TXEIE and TCIE interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1447 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); |
AnnaBridge | 189:f392fc9709a3 | 1448 | |
AnnaBridge | 189:f392fc9709a3 | 1449 | /* Disable the IRDA DMA Tx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1450 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1451 | { |
AnnaBridge | 189:f392fc9709a3 | 1452 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1453 | |
AnnaBridge | 189:f392fc9709a3 | 1454 | /* Abort the IRDA DMA Tx channel : use blocking DMA Abort API (no callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1455 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1456 | { |
AnnaBridge | 189:f392fc9709a3 | 1457 | /* Set the IRDA DMA Abort callback to Null. |
AnnaBridge | 189:f392fc9709a3 | 1458 | No call back execution at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1459 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1460 | |
AnnaBridge | 189:f392fc9709a3 | 1461 | if (HAL_DMA_Abort(hirda->hdmatx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1462 | { |
AnnaBridge | 189:f392fc9709a3 | 1463 | if (HAL_DMA_GetError(hirda->hdmatx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1464 | { |
AnnaBridge | 189:f392fc9709a3 | 1465 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1466 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1467 | |
AnnaBridge | 189:f392fc9709a3 | 1468 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1469 | } |
AnnaBridge | 189:f392fc9709a3 | 1470 | } |
AnnaBridge | 189:f392fc9709a3 | 1471 | } |
AnnaBridge | 189:f392fc9709a3 | 1472 | } |
AnnaBridge | 189:f392fc9709a3 | 1473 | |
AnnaBridge | 189:f392fc9709a3 | 1474 | /* Reset Tx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1475 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1476 | |
AnnaBridge | 189:f392fc9709a3 | 1477 | /* Restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1478 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1479 | |
AnnaBridge | 189:f392fc9709a3 | 1480 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1481 | } |
AnnaBridge | 189:f392fc9709a3 | 1482 | |
AnnaBridge | 189:f392fc9709a3 | 1483 | /** |
AnnaBridge | 189:f392fc9709a3 | 1484 | * @brief Abort ongoing Receive transfer (blocking mode). |
AnnaBridge | 189:f392fc9709a3 | 1485 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1486 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1487 | * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1488 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1489 | * - Disable IRDA Interrupts (Rx) |
AnnaBridge | 189:f392fc9709a3 | 1490 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1491 | * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1492 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1493 | * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. |
AnnaBridge | 189:f392fc9709a3 | 1494 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1495 | */ |
AnnaBridge | 189:f392fc9709a3 | 1496 | HAL_StatusTypeDef HAL_IRDA_AbortReceive(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1497 | { |
AnnaBridge | 189:f392fc9709a3 | 1498 | /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1499 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); |
AnnaBridge | 189:f392fc9709a3 | 1500 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1501 | |
AnnaBridge | 189:f392fc9709a3 | 1502 | /* Disable the IRDA DMA Rx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1503 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1504 | { |
AnnaBridge | 189:f392fc9709a3 | 1505 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1506 | |
AnnaBridge | 189:f392fc9709a3 | 1507 | /* Abort the IRDA DMA Rx channel : use blocking DMA Abort API (no callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1508 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1509 | { |
AnnaBridge | 189:f392fc9709a3 | 1510 | /* Set the IRDA DMA Abort callback to Null. |
AnnaBridge | 189:f392fc9709a3 | 1511 | No call back execution at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1512 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1513 | |
AnnaBridge | 189:f392fc9709a3 | 1514 | if (HAL_DMA_Abort(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1515 | { |
AnnaBridge | 189:f392fc9709a3 | 1516 | if (HAL_DMA_GetError(hirda->hdmarx) == HAL_DMA_ERROR_TIMEOUT) |
AnnaBridge | 189:f392fc9709a3 | 1517 | { |
AnnaBridge | 189:f392fc9709a3 | 1518 | /* Set error code to DMA */ |
AnnaBridge | 189:f392fc9709a3 | 1519 | hirda->ErrorCode = HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 1520 | |
AnnaBridge | 189:f392fc9709a3 | 1521 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 1522 | } |
AnnaBridge | 189:f392fc9709a3 | 1523 | } |
AnnaBridge | 189:f392fc9709a3 | 1524 | } |
AnnaBridge | 189:f392fc9709a3 | 1525 | } |
AnnaBridge | 189:f392fc9709a3 | 1526 | |
AnnaBridge | 189:f392fc9709a3 | 1527 | /* Reset Rx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1528 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1529 | |
AnnaBridge | 189:f392fc9709a3 | 1530 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1531 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1532 | |
AnnaBridge | 189:f392fc9709a3 | 1533 | /* Restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1534 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1535 | |
AnnaBridge | 189:f392fc9709a3 | 1536 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1537 | } |
AnnaBridge | 189:f392fc9709a3 | 1538 | |
AnnaBridge | 189:f392fc9709a3 | 1539 | /** |
AnnaBridge | 189:f392fc9709a3 | 1540 | * @brief Abort ongoing transfers (Interrupt mode). |
AnnaBridge | 189:f392fc9709a3 | 1541 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1542 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1543 | * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1544 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1545 | * - Disable IRDA Interrupts (Tx and Rx) |
AnnaBridge | 189:f392fc9709a3 | 1546 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1547 | * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1548 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1549 | * - At abort completion, call user abort complete callback |
AnnaBridge | 189:f392fc9709a3 | 1550 | * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be |
AnnaBridge | 189:f392fc9709a3 | 1551 | * considered as completed only when user abort complete callback is executed (not when exiting function). |
AnnaBridge | 189:f392fc9709a3 | 1552 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1553 | */ |
AnnaBridge | 189:f392fc9709a3 | 1554 | HAL_StatusTypeDef HAL_IRDA_Abort_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1555 | { |
AnnaBridge | 189:f392fc9709a3 | 1556 | uint32_t abortcplt = 1U; |
AnnaBridge | 189:f392fc9709a3 | 1557 | |
AnnaBridge | 189:f392fc9709a3 | 1558 | /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1559 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); |
AnnaBridge | 189:f392fc9709a3 | 1560 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1561 | |
AnnaBridge | 189:f392fc9709a3 | 1562 | /* If DMA Tx and/or DMA Rx Handles are associated to IRDA Handle, DMA Abort complete callbacks should be initialised |
AnnaBridge | 189:f392fc9709a3 | 1563 | before any call to DMA Abort functions */ |
AnnaBridge | 189:f392fc9709a3 | 1564 | /* DMA Tx Handle is valid */ |
AnnaBridge | 189:f392fc9709a3 | 1565 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1566 | { |
AnnaBridge | 189:f392fc9709a3 | 1567 | /* Set DMA Abort Complete callback if IRDA DMA Tx request if enabled. |
AnnaBridge | 189:f392fc9709a3 | 1568 | Otherwise, set it to NULL */ |
AnnaBridge | 189:f392fc9709a3 | 1569 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1570 | { |
AnnaBridge | 189:f392fc9709a3 | 1571 | hirda->hdmatx->XferAbortCallback = IRDA_DMATxAbortCallback; |
AnnaBridge | 189:f392fc9709a3 | 1572 | } |
AnnaBridge | 189:f392fc9709a3 | 1573 | else |
AnnaBridge | 189:f392fc9709a3 | 1574 | { |
AnnaBridge | 189:f392fc9709a3 | 1575 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1576 | } |
AnnaBridge | 189:f392fc9709a3 | 1577 | } |
AnnaBridge | 189:f392fc9709a3 | 1578 | /* DMA Rx Handle is valid */ |
AnnaBridge | 189:f392fc9709a3 | 1579 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1580 | { |
AnnaBridge | 189:f392fc9709a3 | 1581 | /* Set DMA Abort Complete callback if IRDA DMA Rx request if enabled. |
AnnaBridge | 189:f392fc9709a3 | 1582 | Otherwise, set it to NULL */ |
AnnaBridge | 189:f392fc9709a3 | 1583 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1584 | { |
AnnaBridge | 189:f392fc9709a3 | 1585 | hirda->hdmarx->XferAbortCallback = IRDA_DMARxAbortCallback; |
AnnaBridge | 189:f392fc9709a3 | 1586 | } |
AnnaBridge | 189:f392fc9709a3 | 1587 | else |
AnnaBridge | 189:f392fc9709a3 | 1588 | { |
AnnaBridge | 189:f392fc9709a3 | 1589 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1590 | } |
AnnaBridge | 189:f392fc9709a3 | 1591 | } |
AnnaBridge | 189:f392fc9709a3 | 1592 | |
AnnaBridge | 189:f392fc9709a3 | 1593 | /* Disable the IRDA DMA Tx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1594 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1595 | { |
AnnaBridge | 189:f392fc9709a3 | 1596 | /* Disable DMA Tx at UART level */ |
AnnaBridge | 189:f392fc9709a3 | 1597 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1598 | |
AnnaBridge | 189:f392fc9709a3 | 1599 | /* Abort the IRDA DMA Tx channel : use non blocking DMA Abort API (callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1600 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1601 | { |
AnnaBridge | 189:f392fc9709a3 | 1602 | /* IRDA Tx DMA Abort callback has already been initialised : |
AnnaBridge | 189:f392fc9709a3 | 1603 | will lead to call HAL_IRDA_AbortCpltCallback() at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1604 | |
AnnaBridge | 189:f392fc9709a3 | 1605 | /* Abort DMA TX */ |
AnnaBridge | 189:f392fc9709a3 | 1606 | if (HAL_DMA_Abort_IT(hirda->hdmatx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1607 | { |
AnnaBridge | 189:f392fc9709a3 | 1608 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1609 | } |
AnnaBridge | 189:f392fc9709a3 | 1610 | else |
AnnaBridge | 189:f392fc9709a3 | 1611 | { |
AnnaBridge | 189:f392fc9709a3 | 1612 | abortcplt = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1613 | } |
AnnaBridge | 189:f392fc9709a3 | 1614 | } |
AnnaBridge | 189:f392fc9709a3 | 1615 | } |
AnnaBridge | 189:f392fc9709a3 | 1616 | |
AnnaBridge | 189:f392fc9709a3 | 1617 | /* Disable the IRDA DMA Rx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1618 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1619 | { |
AnnaBridge | 189:f392fc9709a3 | 1620 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1621 | |
AnnaBridge | 189:f392fc9709a3 | 1622 | /* Abort the IRDA DMA Rx channel : use non blocking DMA Abort API (callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1623 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1624 | { |
AnnaBridge | 189:f392fc9709a3 | 1625 | /* IRDA Rx DMA Abort callback has already been initialised : |
AnnaBridge | 189:f392fc9709a3 | 1626 | will lead to call HAL_IRDA_AbortCpltCallback() at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1627 | |
AnnaBridge | 189:f392fc9709a3 | 1628 | /* Abort DMA RX */ |
AnnaBridge | 189:f392fc9709a3 | 1629 | if (HAL_DMA_Abort_IT(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1630 | { |
AnnaBridge | 189:f392fc9709a3 | 1631 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 1632 | abortcplt = 1U; |
AnnaBridge | 189:f392fc9709a3 | 1633 | } |
AnnaBridge | 189:f392fc9709a3 | 1634 | else |
AnnaBridge | 189:f392fc9709a3 | 1635 | { |
AnnaBridge | 189:f392fc9709a3 | 1636 | abortcplt = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1637 | } |
AnnaBridge | 189:f392fc9709a3 | 1638 | } |
AnnaBridge | 189:f392fc9709a3 | 1639 | } |
AnnaBridge | 189:f392fc9709a3 | 1640 | |
AnnaBridge | 189:f392fc9709a3 | 1641 | /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1642 | if (abortcplt == 1U) |
AnnaBridge | 189:f392fc9709a3 | 1643 | { |
AnnaBridge | 189:f392fc9709a3 | 1644 | /* Reset Tx and Rx transfer counters */ |
AnnaBridge | 189:f392fc9709a3 | 1645 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1646 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1647 | |
AnnaBridge | 189:f392fc9709a3 | 1648 | /* Reset errorCode */ |
AnnaBridge | 189:f392fc9709a3 | 1649 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1650 | |
AnnaBridge | 189:f392fc9709a3 | 1651 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1652 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1653 | |
AnnaBridge | 189:f392fc9709a3 | 1654 | /* Restore hirda->gState and hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1655 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1656 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1657 | |
AnnaBridge | 189:f392fc9709a3 | 1658 | /* As no DMA to be aborted, call directly user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1659 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1660 | /* Call registered Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1661 | hirda->AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1662 | #else |
AnnaBridge | 189:f392fc9709a3 | 1663 | /* Call legacy weak Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1664 | HAL_IRDA_AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1665 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1666 | } |
AnnaBridge | 189:f392fc9709a3 | 1667 | |
AnnaBridge | 189:f392fc9709a3 | 1668 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1669 | } |
AnnaBridge | 189:f392fc9709a3 | 1670 | |
AnnaBridge | 189:f392fc9709a3 | 1671 | /** |
AnnaBridge | 189:f392fc9709a3 | 1672 | * @brief Abort ongoing Transmit transfer (Interrupt mode). |
AnnaBridge | 189:f392fc9709a3 | 1673 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1674 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1675 | * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1676 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1677 | * - Disable IRDA Interrupts (Tx) |
AnnaBridge | 189:f392fc9709a3 | 1678 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1679 | * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1680 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1681 | * - At abort completion, call user abort complete callback |
AnnaBridge | 189:f392fc9709a3 | 1682 | * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be |
AnnaBridge | 189:f392fc9709a3 | 1683 | * considered as completed only when user abort complete callback is executed (not when exiting function). |
AnnaBridge | 189:f392fc9709a3 | 1684 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1685 | */ |
AnnaBridge | 189:f392fc9709a3 | 1686 | HAL_StatusTypeDef HAL_IRDA_AbortTransmit_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1687 | { |
AnnaBridge | 189:f392fc9709a3 | 1688 | /* Disable TXEIE and TCIE interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1689 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); |
AnnaBridge | 189:f392fc9709a3 | 1690 | |
AnnaBridge | 189:f392fc9709a3 | 1691 | /* Disable the IRDA DMA Tx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1692 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 1693 | { |
AnnaBridge | 189:f392fc9709a3 | 1694 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 1695 | |
AnnaBridge | 189:f392fc9709a3 | 1696 | /* Abort the IRDA DMA Tx channel : use non blocking DMA Abort API (callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1697 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1698 | { |
AnnaBridge | 189:f392fc9709a3 | 1699 | /* Set the IRDA DMA Abort callback : |
AnnaBridge | 189:f392fc9709a3 | 1700 | will lead to call HAL_IRDA_AbortCpltCallback() at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1701 | hirda->hdmatx->XferAbortCallback = IRDA_DMATxOnlyAbortCallback; |
AnnaBridge | 189:f392fc9709a3 | 1702 | |
AnnaBridge | 189:f392fc9709a3 | 1703 | /* Abort DMA TX */ |
AnnaBridge | 189:f392fc9709a3 | 1704 | if (HAL_DMA_Abort_IT(hirda->hdmatx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1705 | { |
AnnaBridge | 189:f392fc9709a3 | 1706 | /* Call Directly hirda->hdmatx->XferAbortCallback function in case of error */ |
AnnaBridge | 189:f392fc9709a3 | 1707 | hirda->hdmatx->XferAbortCallback(hirda->hdmatx); |
AnnaBridge | 189:f392fc9709a3 | 1708 | } |
AnnaBridge | 189:f392fc9709a3 | 1709 | } |
AnnaBridge | 189:f392fc9709a3 | 1710 | else |
AnnaBridge | 189:f392fc9709a3 | 1711 | { |
AnnaBridge | 189:f392fc9709a3 | 1712 | /* Reset Tx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1713 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1714 | |
AnnaBridge | 189:f392fc9709a3 | 1715 | /* Restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1716 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1717 | |
AnnaBridge | 189:f392fc9709a3 | 1718 | /* As no DMA to be aborted, call directly user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1719 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1720 | /* Call registered Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1721 | hirda->AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1722 | #else |
AnnaBridge | 189:f392fc9709a3 | 1723 | /* Call legacy weak Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1724 | HAL_IRDA_AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1725 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1726 | } |
AnnaBridge | 189:f392fc9709a3 | 1727 | } |
AnnaBridge | 189:f392fc9709a3 | 1728 | else |
AnnaBridge | 189:f392fc9709a3 | 1729 | { |
AnnaBridge | 189:f392fc9709a3 | 1730 | /* Reset Tx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1731 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1732 | |
AnnaBridge | 189:f392fc9709a3 | 1733 | /* Restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1734 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1735 | |
AnnaBridge | 189:f392fc9709a3 | 1736 | /* As no DMA to be aborted, call directly user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1737 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1738 | /* Call registered Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1739 | hirda->AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1740 | #else |
AnnaBridge | 189:f392fc9709a3 | 1741 | /* Call legacy weak Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1742 | HAL_IRDA_AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1743 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1744 | } |
AnnaBridge | 189:f392fc9709a3 | 1745 | |
AnnaBridge | 189:f392fc9709a3 | 1746 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1747 | } |
AnnaBridge | 189:f392fc9709a3 | 1748 | |
AnnaBridge | 189:f392fc9709a3 | 1749 | /** |
AnnaBridge | 189:f392fc9709a3 | 1750 | * @brief Abort ongoing Receive transfer (Interrupt mode). |
AnnaBridge | 189:f392fc9709a3 | 1751 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1752 | * the configuration information for the specified UART module. |
AnnaBridge | 189:f392fc9709a3 | 1753 | * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. |
AnnaBridge | 189:f392fc9709a3 | 1754 | * This procedure performs following operations : |
AnnaBridge | 189:f392fc9709a3 | 1755 | * - Disable IRDA Interrupts (Rx) |
AnnaBridge | 189:f392fc9709a3 | 1756 | * - Disable the DMA transfer in the peripheral register (if enabled) |
AnnaBridge | 189:f392fc9709a3 | 1757 | * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) |
AnnaBridge | 189:f392fc9709a3 | 1758 | * - Set handle State to READY |
AnnaBridge | 189:f392fc9709a3 | 1759 | * - At abort completion, call user abort complete callback |
AnnaBridge | 189:f392fc9709a3 | 1760 | * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be |
AnnaBridge | 189:f392fc9709a3 | 1761 | * considered as completed only when user abort complete callback is executed (not when exiting function). |
AnnaBridge | 189:f392fc9709a3 | 1762 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 1763 | */ |
AnnaBridge | 189:f392fc9709a3 | 1764 | HAL_StatusTypeDef HAL_IRDA_AbortReceive_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1765 | { |
AnnaBridge | 189:f392fc9709a3 | 1766 | /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 1767 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); |
AnnaBridge | 189:f392fc9709a3 | 1768 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 1769 | |
AnnaBridge | 189:f392fc9709a3 | 1770 | /* Disable the IRDA DMA Rx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1771 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1772 | { |
AnnaBridge | 189:f392fc9709a3 | 1773 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1774 | |
AnnaBridge | 189:f392fc9709a3 | 1775 | /* Abort the IRDA DMA Rx channel : use non blocking DMA Abort API (callback) */ |
AnnaBridge | 189:f392fc9709a3 | 1776 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1777 | { |
AnnaBridge | 189:f392fc9709a3 | 1778 | /* Set the IRDA DMA Abort callback : |
AnnaBridge | 189:f392fc9709a3 | 1779 | will lead to call HAL_IRDA_AbortCpltCallback() at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1780 | hirda->hdmarx->XferAbortCallback = IRDA_DMARxOnlyAbortCallback; |
AnnaBridge | 189:f392fc9709a3 | 1781 | |
AnnaBridge | 189:f392fc9709a3 | 1782 | /* Abort DMA RX */ |
AnnaBridge | 189:f392fc9709a3 | 1783 | if (HAL_DMA_Abort_IT(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1784 | { |
AnnaBridge | 189:f392fc9709a3 | 1785 | /* Call Directly hirda->hdmarx->XferAbortCallback function in case of error */ |
AnnaBridge | 189:f392fc9709a3 | 1786 | hirda->hdmarx->XferAbortCallback(hirda->hdmarx); |
AnnaBridge | 189:f392fc9709a3 | 1787 | } |
AnnaBridge | 189:f392fc9709a3 | 1788 | } |
AnnaBridge | 189:f392fc9709a3 | 1789 | else |
AnnaBridge | 189:f392fc9709a3 | 1790 | { |
AnnaBridge | 189:f392fc9709a3 | 1791 | /* Reset Rx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1792 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1793 | |
AnnaBridge | 189:f392fc9709a3 | 1794 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1795 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1796 | |
AnnaBridge | 189:f392fc9709a3 | 1797 | /* Restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1798 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1799 | |
AnnaBridge | 189:f392fc9709a3 | 1800 | /* As no DMA to be aborted, call directly user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1801 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1802 | /* Call registered Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1803 | hirda->AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1804 | #else |
AnnaBridge | 189:f392fc9709a3 | 1805 | /* Call legacy weak Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1806 | HAL_IRDA_AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1807 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1808 | } |
AnnaBridge | 189:f392fc9709a3 | 1809 | } |
AnnaBridge | 189:f392fc9709a3 | 1810 | else |
AnnaBridge | 189:f392fc9709a3 | 1811 | { |
AnnaBridge | 189:f392fc9709a3 | 1812 | /* Reset Rx transfer counter */ |
AnnaBridge | 189:f392fc9709a3 | 1813 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 1814 | |
AnnaBridge | 189:f392fc9709a3 | 1815 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 1816 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1817 | |
AnnaBridge | 189:f392fc9709a3 | 1818 | /* Restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 1819 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 1820 | |
AnnaBridge | 189:f392fc9709a3 | 1821 | /* As no DMA to be aborted, call directly user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 1822 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1823 | /* Call registered Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1824 | hirda->AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1825 | #else |
AnnaBridge | 189:f392fc9709a3 | 1826 | /* Call legacy weak Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 1827 | HAL_IRDA_AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1828 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1829 | } |
AnnaBridge | 189:f392fc9709a3 | 1830 | |
AnnaBridge | 189:f392fc9709a3 | 1831 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 1832 | } |
AnnaBridge | 189:f392fc9709a3 | 1833 | |
AnnaBridge | 189:f392fc9709a3 | 1834 | /** |
AnnaBridge | 189:f392fc9709a3 | 1835 | * @brief Handle IRDA interrupt request. |
AnnaBridge | 189:f392fc9709a3 | 1836 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1837 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1838 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 1839 | */ |
AnnaBridge | 189:f392fc9709a3 | 1840 | void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 1841 | { |
AnnaBridge | 189:f392fc9709a3 | 1842 | uint32_t isrflags = READ_REG(hirda->Instance->ISR); |
AnnaBridge | 189:f392fc9709a3 | 1843 | uint32_t cr1its = READ_REG(hirda->Instance->CR1); |
AnnaBridge | 189:f392fc9709a3 | 1844 | uint32_t cr3its; |
AnnaBridge | 189:f392fc9709a3 | 1845 | uint32_t errorflags; |
AnnaBridge | 189:f392fc9709a3 | 1846 | uint32_t errorcode; |
AnnaBridge | 189:f392fc9709a3 | 1847 | |
AnnaBridge | 189:f392fc9709a3 | 1848 | /* If no error occurs */ |
AnnaBridge | 189:f392fc9709a3 | 1849 | errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE)); |
AnnaBridge | 189:f392fc9709a3 | 1850 | if (errorflags == 0U) |
AnnaBridge | 189:f392fc9709a3 | 1851 | { |
AnnaBridge | 189:f392fc9709a3 | 1852 | /* IRDA in mode Receiver ---------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1853 | if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U) && ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1854 | { |
AnnaBridge | 189:f392fc9709a3 | 1855 | IRDA_Receive_IT(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1856 | return; |
AnnaBridge | 189:f392fc9709a3 | 1857 | } |
AnnaBridge | 189:f392fc9709a3 | 1858 | } |
AnnaBridge | 189:f392fc9709a3 | 1859 | |
AnnaBridge | 189:f392fc9709a3 | 1860 | /* If some errors occur */ |
AnnaBridge | 189:f392fc9709a3 | 1861 | cr3its = READ_REG(hirda->Instance->CR3); |
AnnaBridge | 189:f392fc9709a3 | 1862 | if ((errorflags != 0U) |
AnnaBridge | 189:f392fc9709a3 | 1863 | && (((cr3its & USART_CR3_EIE) != 0U) |
AnnaBridge | 189:f392fc9709a3 | 1864 | || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != 0U))) |
AnnaBridge | 189:f392fc9709a3 | 1865 | { |
AnnaBridge | 189:f392fc9709a3 | 1866 | /* IRDA parity error interrupt occurred -------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1867 | if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1868 | { |
AnnaBridge | 189:f392fc9709a3 | 1869 | __HAL_IRDA_CLEAR_IT(hirda, IRDA_CLEAR_PEF); |
AnnaBridge | 189:f392fc9709a3 | 1870 | |
AnnaBridge | 189:f392fc9709a3 | 1871 | hirda->ErrorCode |= HAL_IRDA_ERROR_PE; |
AnnaBridge | 189:f392fc9709a3 | 1872 | } |
AnnaBridge | 189:f392fc9709a3 | 1873 | |
AnnaBridge | 189:f392fc9709a3 | 1874 | /* IRDA frame error interrupt occurred --------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1875 | if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1876 | { |
AnnaBridge | 189:f392fc9709a3 | 1877 | __HAL_IRDA_CLEAR_IT(hirda, IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 1878 | |
AnnaBridge | 189:f392fc9709a3 | 1879 | hirda->ErrorCode |= HAL_IRDA_ERROR_FE; |
AnnaBridge | 189:f392fc9709a3 | 1880 | } |
AnnaBridge | 189:f392fc9709a3 | 1881 | |
AnnaBridge | 189:f392fc9709a3 | 1882 | /* IRDA noise error interrupt occurred --------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1883 | if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1884 | { |
AnnaBridge | 189:f392fc9709a3 | 1885 | __HAL_IRDA_CLEAR_IT(hirda, IRDA_CLEAR_NEF); |
AnnaBridge | 189:f392fc9709a3 | 1886 | |
AnnaBridge | 189:f392fc9709a3 | 1887 | hirda->ErrorCode |= HAL_IRDA_ERROR_NE; |
AnnaBridge | 189:f392fc9709a3 | 1888 | } |
AnnaBridge | 189:f392fc9709a3 | 1889 | |
AnnaBridge | 189:f392fc9709a3 | 1890 | /* IRDA Over-Run interrupt occurred -----------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1891 | if (((isrflags & USART_ISR_ORE) != 0U) && |
AnnaBridge | 189:f392fc9709a3 | 1892 | (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) || ((cr3its & USART_CR3_EIE) != 0U))) |
AnnaBridge | 189:f392fc9709a3 | 1893 | { |
AnnaBridge | 189:f392fc9709a3 | 1894 | __HAL_IRDA_CLEAR_IT(hirda, IRDA_CLEAR_OREF); |
AnnaBridge | 189:f392fc9709a3 | 1895 | |
AnnaBridge | 189:f392fc9709a3 | 1896 | hirda->ErrorCode |= HAL_IRDA_ERROR_ORE; |
AnnaBridge | 189:f392fc9709a3 | 1897 | } |
AnnaBridge | 189:f392fc9709a3 | 1898 | |
AnnaBridge | 189:f392fc9709a3 | 1899 | /* Call IRDA Error Call back function if need be --------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1900 | if (hirda->ErrorCode != HAL_IRDA_ERROR_NONE) |
AnnaBridge | 189:f392fc9709a3 | 1901 | { |
AnnaBridge | 189:f392fc9709a3 | 1902 | /* IRDA in mode Receiver ---------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1903 | if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U) && ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1904 | { |
AnnaBridge | 189:f392fc9709a3 | 1905 | IRDA_Receive_IT(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1906 | } |
AnnaBridge | 189:f392fc9709a3 | 1907 | |
AnnaBridge | 189:f392fc9709a3 | 1908 | /* If Overrun error occurs, or if any error occurs in DMA mode reception, |
AnnaBridge | 189:f392fc9709a3 | 1909 | consider error as blocking */ |
AnnaBridge | 189:f392fc9709a3 | 1910 | errorcode = hirda->ErrorCode; |
AnnaBridge | 189:f392fc9709a3 | 1911 | if ((HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) || |
AnnaBridge | 189:f392fc9709a3 | 1912 | ((errorcode & HAL_IRDA_ERROR_ORE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1913 | { |
AnnaBridge | 189:f392fc9709a3 | 1914 | /* Blocking error : transfer is aborted |
AnnaBridge | 189:f392fc9709a3 | 1915 | Set the IRDA state ready to be able to start again the process, |
AnnaBridge | 189:f392fc9709a3 | 1916 | Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 1917 | IRDA_EndRxTransfer(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1918 | |
AnnaBridge | 189:f392fc9709a3 | 1919 | /* Disable the IRDA DMA Rx request if enabled */ |
AnnaBridge | 189:f392fc9709a3 | 1920 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 1921 | { |
AnnaBridge | 189:f392fc9709a3 | 1922 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 1923 | |
AnnaBridge | 189:f392fc9709a3 | 1924 | /* Abort the IRDA DMA Rx channel */ |
AnnaBridge | 189:f392fc9709a3 | 1925 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 1926 | { |
AnnaBridge | 189:f392fc9709a3 | 1927 | /* Set the IRDA DMA Abort callback : |
AnnaBridge | 189:f392fc9709a3 | 1928 | will lead to call HAL_IRDA_ErrorCallback() at end of DMA abort procedure */ |
AnnaBridge | 189:f392fc9709a3 | 1929 | hirda->hdmarx->XferAbortCallback = IRDA_DMAAbortOnError; |
AnnaBridge | 189:f392fc9709a3 | 1930 | |
AnnaBridge | 189:f392fc9709a3 | 1931 | /* Abort DMA RX */ |
AnnaBridge | 189:f392fc9709a3 | 1932 | if (HAL_DMA_Abort_IT(hirda->hdmarx) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 1933 | { |
AnnaBridge | 189:f392fc9709a3 | 1934 | /* Call Directly hirda->hdmarx->XferAbortCallback function in case of error */ |
AnnaBridge | 189:f392fc9709a3 | 1935 | hirda->hdmarx->XferAbortCallback(hirda->hdmarx); |
AnnaBridge | 189:f392fc9709a3 | 1936 | } |
AnnaBridge | 189:f392fc9709a3 | 1937 | } |
AnnaBridge | 189:f392fc9709a3 | 1938 | else |
AnnaBridge | 189:f392fc9709a3 | 1939 | { |
AnnaBridge | 189:f392fc9709a3 | 1940 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1941 | /* Call registered user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1942 | hirda->ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1943 | #else |
AnnaBridge | 189:f392fc9709a3 | 1944 | /* Call legacy weak user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1945 | HAL_IRDA_ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1946 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1947 | } |
AnnaBridge | 189:f392fc9709a3 | 1948 | } |
AnnaBridge | 189:f392fc9709a3 | 1949 | else |
AnnaBridge | 189:f392fc9709a3 | 1950 | { |
AnnaBridge | 189:f392fc9709a3 | 1951 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1952 | /* Call registered user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1953 | hirda->ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1954 | #else |
AnnaBridge | 189:f392fc9709a3 | 1955 | /* Call legacy weak user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1956 | HAL_IRDA_ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1957 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1958 | } |
AnnaBridge | 189:f392fc9709a3 | 1959 | } |
AnnaBridge | 189:f392fc9709a3 | 1960 | else |
AnnaBridge | 189:f392fc9709a3 | 1961 | { |
AnnaBridge | 189:f392fc9709a3 | 1962 | /* Non Blocking error : transfer could go on. |
AnnaBridge | 189:f392fc9709a3 | 1963 | Error is notified to user through user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1964 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 1965 | /* Call registered user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1966 | hirda->ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1967 | #else |
AnnaBridge | 189:f392fc9709a3 | 1968 | /* Call legacy weak user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 1969 | HAL_IRDA_ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1970 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 1971 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 1972 | } |
AnnaBridge | 189:f392fc9709a3 | 1973 | } |
AnnaBridge | 189:f392fc9709a3 | 1974 | return; |
AnnaBridge | 189:f392fc9709a3 | 1975 | |
AnnaBridge | 189:f392fc9709a3 | 1976 | } /* End if some error occurs */ |
AnnaBridge | 189:f392fc9709a3 | 1977 | |
AnnaBridge | 189:f392fc9709a3 | 1978 | /* IRDA in mode Transmitter ------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1979 | if (((isrflags & USART_ISR_TXE_TXFNF) != 0U) && ((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1980 | { |
AnnaBridge | 189:f392fc9709a3 | 1981 | IRDA_Transmit_IT(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1982 | return; |
AnnaBridge | 189:f392fc9709a3 | 1983 | } |
AnnaBridge | 189:f392fc9709a3 | 1984 | |
AnnaBridge | 189:f392fc9709a3 | 1985 | /* IRDA in mode Transmitter (transmission end) -----------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 1986 | if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U)) |
AnnaBridge | 189:f392fc9709a3 | 1987 | { |
AnnaBridge | 189:f392fc9709a3 | 1988 | IRDA_EndTransmit_IT(hirda); |
AnnaBridge | 189:f392fc9709a3 | 1989 | return; |
AnnaBridge | 189:f392fc9709a3 | 1990 | } |
AnnaBridge | 189:f392fc9709a3 | 1991 | |
AnnaBridge | 189:f392fc9709a3 | 1992 | } |
AnnaBridge | 189:f392fc9709a3 | 1993 | |
AnnaBridge | 189:f392fc9709a3 | 1994 | /** |
AnnaBridge | 189:f392fc9709a3 | 1995 | * @brief Tx Transfer completed callback. |
AnnaBridge | 189:f392fc9709a3 | 1996 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 1997 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 1998 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 1999 | */ |
AnnaBridge | 189:f392fc9709a3 | 2000 | __weak void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2001 | { |
AnnaBridge | 189:f392fc9709a3 | 2002 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2003 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2004 | |
AnnaBridge | 189:f392fc9709a3 | 2005 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2006 | the HAL_IRDA_TxCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2007 | */ |
AnnaBridge | 189:f392fc9709a3 | 2008 | } |
AnnaBridge | 189:f392fc9709a3 | 2009 | |
AnnaBridge | 189:f392fc9709a3 | 2010 | /** |
AnnaBridge | 189:f392fc9709a3 | 2011 | * @brief Tx Half Transfer completed callback. |
AnnaBridge | 189:f392fc9709a3 | 2012 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2013 | * the configuration information for the specified USART module. |
AnnaBridge | 189:f392fc9709a3 | 2014 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2015 | */ |
AnnaBridge | 189:f392fc9709a3 | 2016 | __weak void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2017 | { |
AnnaBridge | 189:f392fc9709a3 | 2018 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2019 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2020 | |
AnnaBridge | 189:f392fc9709a3 | 2021 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2022 | the HAL_IRDA_TxHalfCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2023 | */ |
AnnaBridge | 189:f392fc9709a3 | 2024 | } |
AnnaBridge | 189:f392fc9709a3 | 2025 | |
AnnaBridge | 189:f392fc9709a3 | 2026 | /** |
AnnaBridge | 189:f392fc9709a3 | 2027 | * @brief Rx Transfer completed callback. |
AnnaBridge | 189:f392fc9709a3 | 2028 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2029 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2030 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2031 | */ |
AnnaBridge | 189:f392fc9709a3 | 2032 | __weak void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2033 | { |
AnnaBridge | 189:f392fc9709a3 | 2034 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2035 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2036 | |
AnnaBridge | 189:f392fc9709a3 | 2037 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2038 | the HAL_IRDA_RxCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2039 | */ |
AnnaBridge | 189:f392fc9709a3 | 2040 | } |
AnnaBridge | 189:f392fc9709a3 | 2041 | |
AnnaBridge | 189:f392fc9709a3 | 2042 | /** |
AnnaBridge | 189:f392fc9709a3 | 2043 | * @brief Rx Half Transfer complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2044 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2045 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2046 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2047 | */ |
AnnaBridge | 189:f392fc9709a3 | 2048 | __weak void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2049 | { |
AnnaBridge | 189:f392fc9709a3 | 2050 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2051 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2052 | |
AnnaBridge | 189:f392fc9709a3 | 2053 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2054 | the HAL_IRDA_RxHalfCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2055 | */ |
AnnaBridge | 189:f392fc9709a3 | 2056 | } |
AnnaBridge | 189:f392fc9709a3 | 2057 | |
AnnaBridge | 189:f392fc9709a3 | 2058 | /** |
AnnaBridge | 189:f392fc9709a3 | 2059 | * @brief IRDA error callback. |
AnnaBridge | 189:f392fc9709a3 | 2060 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2061 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2062 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2063 | */ |
AnnaBridge | 189:f392fc9709a3 | 2064 | __weak void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2065 | { |
AnnaBridge | 189:f392fc9709a3 | 2066 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2067 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2068 | |
AnnaBridge | 189:f392fc9709a3 | 2069 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2070 | the HAL_IRDA_ErrorCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2071 | */ |
AnnaBridge | 189:f392fc9709a3 | 2072 | } |
AnnaBridge | 189:f392fc9709a3 | 2073 | |
AnnaBridge | 189:f392fc9709a3 | 2074 | /** |
AnnaBridge | 189:f392fc9709a3 | 2075 | * @brief IRDA Abort Complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2076 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2077 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2078 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2079 | */ |
AnnaBridge | 189:f392fc9709a3 | 2080 | __weak void HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2081 | { |
AnnaBridge | 189:f392fc9709a3 | 2082 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2083 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2084 | |
AnnaBridge | 189:f392fc9709a3 | 2085 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2086 | the HAL_IRDA_AbortCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2087 | */ |
AnnaBridge | 189:f392fc9709a3 | 2088 | } |
AnnaBridge | 189:f392fc9709a3 | 2089 | |
AnnaBridge | 189:f392fc9709a3 | 2090 | /** |
AnnaBridge | 189:f392fc9709a3 | 2091 | * @brief IRDA Abort Complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2092 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2093 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2094 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2095 | */ |
AnnaBridge | 189:f392fc9709a3 | 2096 | __weak void HAL_IRDA_AbortTransmitCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2097 | { |
AnnaBridge | 189:f392fc9709a3 | 2098 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2099 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2100 | |
AnnaBridge | 189:f392fc9709a3 | 2101 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2102 | the HAL_IRDA_AbortTransmitCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2103 | */ |
AnnaBridge | 189:f392fc9709a3 | 2104 | } |
AnnaBridge | 189:f392fc9709a3 | 2105 | |
AnnaBridge | 189:f392fc9709a3 | 2106 | /** |
AnnaBridge | 189:f392fc9709a3 | 2107 | * @brief IRDA Abort Receive Complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2108 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2109 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2110 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2111 | */ |
AnnaBridge | 189:f392fc9709a3 | 2112 | __weak void HAL_IRDA_AbortReceiveCpltCallback(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2113 | { |
AnnaBridge | 189:f392fc9709a3 | 2114 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 2115 | UNUSED(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2116 | |
AnnaBridge | 189:f392fc9709a3 | 2117 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 2118 | the HAL_IRDA_AbortReceiveCpltCallback can be implemented in the user file. |
AnnaBridge | 189:f392fc9709a3 | 2119 | */ |
AnnaBridge | 189:f392fc9709a3 | 2120 | } |
AnnaBridge | 189:f392fc9709a3 | 2121 | |
AnnaBridge | 189:f392fc9709a3 | 2122 | /** |
AnnaBridge | 189:f392fc9709a3 | 2123 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2124 | */ |
AnnaBridge | 189:f392fc9709a3 | 2125 | |
AnnaBridge | 189:f392fc9709a3 | 2126 | /** @defgroup IRDA_Exported_Functions_Group4 Peripheral State and Error functions |
AnnaBridge | 189:f392fc9709a3 | 2127 | * @brief IRDA State and Errors functions |
AnnaBridge | 189:f392fc9709a3 | 2128 | * |
AnnaBridge | 189:f392fc9709a3 | 2129 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 2130 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 2131 | ##### Peripheral State and Error functions ##### |
AnnaBridge | 189:f392fc9709a3 | 2132 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 2133 | [..] |
AnnaBridge | 189:f392fc9709a3 | 2134 | This subsection provides a set of functions allowing to return the State of IrDA |
AnnaBridge | 189:f392fc9709a3 | 2135 | communication process and also return Peripheral Errors occurred during communication process |
AnnaBridge | 189:f392fc9709a3 | 2136 | (+) HAL_IRDA_GetState() API can be helpful to check in run-time the state |
AnnaBridge | 189:f392fc9709a3 | 2137 | of the IRDA peripheral handle. |
AnnaBridge | 189:f392fc9709a3 | 2138 | (+) HAL_IRDA_GetError() checks in run-time errors that could occur during |
AnnaBridge | 189:f392fc9709a3 | 2139 | communication. |
AnnaBridge | 189:f392fc9709a3 | 2140 | |
AnnaBridge | 189:f392fc9709a3 | 2141 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 2142 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 2143 | */ |
AnnaBridge | 189:f392fc9709a3 | 2144 | |
AnnaBridge | 189:f392fc9709a3 | 2145 | /** |
AnnaBridge | 189:f392fc9709a3 | 2146 | * @brief Return the IRDA handle state. |
AnnaBridge | 189:f392fc9709a3 | 2147 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2148 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2149 | * @retval HAL state |
AnnaBridge | 189:f392fc9709a3 | 2150 | */ |
AnnaBridge | 189:f392fc9709a3 | 2151 | HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2152 | { |
AnnaBridge | 189:f392fc9709a3 | 2153 | /* Return IRDA handle state */ |
AnnaBridge | 189:f392fc9709a3 | 2154 | uint32_t temp1, temp2; |
AnnaBridge | 189:f392fc9709a3 | 2155 | temp1 = (uint32_t)hirda->gState; |
AnnaBridge | 189:f392fc9709a3 | 2156 | temp2 = (uint32_t)hirda->RxState; |
AnnaBridge | 189:f392fc9709a3 | 2157 | |
AnnaBridge | 189:f392fc9709a3 | 2158 | return (HAL_IRDA_StateTypeDef)(temp1 | temp2); |
AnnaBridge | 189:f392fc9709a3 | 2159 | } |
AnnaBridge | 189:f392fc9709a3 | 2160 | |
AnnaBridge | 189:f392fc9709a3 | 2161 | /** |
AnnaBridge | 189:f392fc9709a3 | 2162 | * @brief Return the IRDA handle error code. |
AnnaBridge | 189:f392fc9709a3 | 2163 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2164 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2165 | * @retval IRDA Error Code |
AnnaBridge | 189:f392fc9709a3 | 2166 | */ |
AnnaBridge | 189:f392fc9709a3 | 2167 | uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2168 | { |
AnnaBridge | 189:f392fc9709a3 | 2169 | return hirda->ErrorCode; |
AnnaBridge | 189:f392fc9709a3 | 2170 | } |
AnnaBridge | 189:f392fc9709a3 | 2171 | |
AnnaBridge | 189:f392fc9709a3 | 2172 | /** |
AnnaBridge | 189:f392fc9709a3 | 2173 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2174 | */ |
AnnaBridge | 189:f392fc9709a3 | 2175 | |
AnnaBridge | 189:f392fc9709a3 | 2176 | /** |
AnnaBridge | 189:f392fc9709a3 | 2177 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2178 | */ |
AnnaBridge | 189:f392fc9709a3 | 2179 | |
AnnaBridge | 189:f392fc9709a3 | 2180 | /** @defgroup IRDA_Private_Functions IRDA Private Functions |
AnnaBridge | 189:f392fc9709a3 | 2181 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 2182 | */ |
AnnaBridge | 189:f392fc9709a3 | 2183 | |
AnnaBridge | 189:f392fc9709a3 | 2184 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2185 | /** |
AnnaBridge | 189:f392fc9709a3 | 2186 | * @brief Initialize the callbacks to their default values. |
AnnaBridge | 189:f392fc9709a3 | 2187 | * @param hirda IRDA handle. |
AnnaBridge | 189:f392fc9709a3 | 2188 | * @retval none |
AnnaBridge | 189:f392fc9709a3 | 2189 | */ |
AnnaBridge | 189:f392fc9709a3 | 2190 | void IRDA_InitCallbacksToDefault(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2191 | { |
AnnaBridge | 189:f392fc9709a3 | 2192 | /* Init the IRDA Callback settings */ |
AnnaBridge | 189:f392fc9709a3 | 2193 | hirda->TxHalfCpltCallback = HAL_IRDA_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2194 | hirda->TxCpltCallback = HAL_IRDA_TxCpltCallback; /* Legacy weak TxCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2195 | hirda->RxHalfCpltCallback = HAL_IRDA_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2196 | hirda->RxCpltCallback = HAL_IRDA_RxCpltCallback; /* Legacy weak RxCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2197 | hirda->ErrorCallback = HAL_IRDA_ErrorCallback; /* Legacy weak ErrorCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2198 | hirda->AbortCpltCallback = HAL_IRDA_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2199 | hirda->AbortTransmitCpltCallback = HAL_IRDA_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2200 | hirda->AbortReceiveCpltCallback = HAL_IRDA_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ |
AnnaBridge | 189:f392fc9709a3 | 2201 | |
AnnaBridge | 189:f392fc9709a3 | 2202 | } |
AnnaBridge | 189:f392fc9709a3 | 2203 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 2204 | |
AnnaBridge | 189:f392fc9709a3 | 2205 | /** |
AnnaBridge | 189:f392fc9709a3 | 2206 | * @brief Configure the IRDA peripheral. |
AnnaBridge | 189:f392fc9709a3 | 2207 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2208 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2209 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 2210 | */ |
AnnaBridge | 189:f392fc9709a3 | 2211 | static HAL_StatusTypeDef IRDA_SetConfig(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2212 | { |
AnnaBridge | 189:f392fc9709a3 | 2213 | uint32_t tmpreg; |
AnnaBridge | 189:f392fc9709a3 | 2214 | IRDA_ClockSourceTypeDef clocksource; |
AnnaBridge | 189:f392fc9709a3 | 2215 | HAL_StatusTypeDef ret = HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 2216 | const uint16_t IRDAPrescTable[12] = {1U, 2U, 4U, 6U, 8U, 10U, 12U, 16U, 32U, 64U, 128U, 256U}; |
AnnaBridge | 189:f392fc9709a3 | 2217 | PLL2_ClocksTypeDef pll2_clocks; |
AnnaBridge | 189:f392fc9709a3 | 2218 | PLL3_ClocksTypeDef pll3_clocks; |
AnnaBridge | 189:f392fc9709a3 | 2219 | |
AnnaBridge | 189:f392fc9709a3 | 2220 | /* Check the communication parameters */ |
AnnaBridge | 189:f392fc9709a3 | 2221 | assert_param(IS_IRDA_BAUDRATE(hirda->Init.BaudRate)); |
AnnaBridge | 189:f392fc9709a3 | 2222 | assert_param(IS_IRDA_WORD_LENGTH(hirda->Init.WordLength)); |
AnnaBridge | 189:f392fc9709a3 | 2223 | assert_param(IS_IRDA_PARITY(hirda->Init.Parity)); |
AnnaBridge | 189:f392fc9709a3 | 2224 | assert_param(IS_IRDA_TX_RX_MODE(hirda->Init.Mode)); |
AnnaBridge | 189:f392fc9709a3 | 2225 | assert_param(IS_IRDA_PRESCALER(hirda->Init.Prescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2226 | assert_param(IS_IRDA_POWERMODE(hirda->Init.PowerMode)); |
AnnaBridge | 189:f392fc9709a3 | 2227 | assert_param(IS_IRDA_CLOCKPRESCALER(hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2228 | |
AnnaBridge | 189:f392fc9709a3 | 2229 | /*-------------------------- USART CR1 Configuration -----------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 2230 | /* Configure the IRDA Word Length, Parity and transfer Mode: |
AnnaBridge | 189:f392fc9709a3 | 2231 | Set the M bits according to hirda->Init.WordLength value |
AnnaBridge | 189:f392fc9709a3 | 2232 | Set PCE and PS bits according to hirda->Init.Parity value |
AnnaBridge | 189:f392fc9709a3 | 2233 | Set TE and RE bits according to hirda->Init.Mode value */ |
AnnaBridge | 189:f392fc9709a3 | 2234 | tmpreg = (uint32_t)hirda->Init.WordLength | hirda->Init.Parity | hirda->Init.Mode ; |
AnnaBridge | 189:f392fc9709a3 | 2235 | |
AnnaBridge | 189:f392fc9709a3 | 2236 | MODIFY_REG(hirda->Instance->CR1, IRDA_CR1_FIELDS, tmpreg); |
AnnaBridge | 189:f392fc9709a3 | 2237 | |
AnnaBridge | 189:f392fc9709a3 | 2238 | /*-------------------------- USART CR3 Configuration -----------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 2239 | MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.PowerMode); |
AnnaBridge | 189:f392fc9709a3 | 2240 | |
AnnaBridge | 189:f392fc9709a3 | 2241 | /*--------------------- USART clock PRESC Configuration ----------------*/ |
AnnaBridge | 189:f392fc9709a3 | 2242 | /* Configure |
AnnaBridge | 189:f392fc9709a3 | 2243 | * - IRDA Clock Prescaler: set PRESCALER according to hirda->Init.ClockPrescaler value */ |
AnnaBridge | 189:f392fc9709a3 | 2244 | MODIFY_REG(hirda->Instance->PRESC, USART_PRESC_PRESCALER, hirda->Init.ClockPrescaler); |
AnnaBridge | 189:f392fc9709a3 | 2245 | |
AnnaBridge | 189:f392fc9709a3 | 2246 | /*-------------------------- USART GTPR Configuration ----------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 2247 | MODIFY_REG(hirda->Instance->GTPR, (uint16_t)USART_GTPR_PSC, hirda->Init.Prescaler); |
AnnaBridge | 189:f392fc9709a3 | 2248 | |
AnnaBridge | 189:f392fc9709a3 | 2249 | /*-------------------------- USART BRR Configuration -----------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 2250 | IRDA_GETCLOCKSOURCE(hirda, clocksource); |
AnnaBridge | 189:f392fc9709a3 | 2251 | tmpreg = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2252 | switch (clocksource) |
AnnaBridge | 189:f392fc9709a3 | 2253 | { |
AnnaBridge | 189:f392fc9709a3 | 2254 | case IRDA_CLOCKSOURCE_D2PCLK1: |
AnnaBridge | 189:f392fc9709a3 | 2255 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2256 | break; |
AnnaBridge | 189:f392fc9709a3 | 2257 | case IRDA_CLOCKSOURCE_D2PCLK2: |
AnnaBridge | 189:f392fc9709a3 | 2258 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2259 | break; |
AnnaBridge | 189:f392fc9709a3 | 2260 | case IRDA_CLOCKSOURCE_PLL2Q: |
AnnaBridge | 189:f392fc9709a3 | 2261 | HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks); |
AnnaBridge | 189:f392fc9709a3 | 2262 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(pll2_clocks.PLL2_Q_Frequency, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2263 | break; |
AnnaBridge | 189:f392fc9709a3 | 2264 | case IRDA_CLOCKSOURCE_PLL3Q: |
AnnaBridge | 189:f392fc9709a3 | 2265 | HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks); |
AnnaBridge | 189:f392fc9709a3 | 2266 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(pll3_clocks.PLL3_Q_Frequency, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2267 | break; |
AnnaBridge | 189:f392fc9709a3 | 2268 | case IRDA_CLOCKSOURCE_CSI: |
AnnaBridge | 189:f392fc9709a3 | 2269 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(CSI_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2270 | break; |
AnnaBridge | 189:f392fc9709a3 | 2271 | case IRDA_CLOCKSOURCE_HSI: |
AnnaBridge | 189:f392fc9709a3 | 2272 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HSI_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2273 | break; |
AnnaBridge | 189:f392fc9709a3 | 2274 | case IRDA_CLOCKSOURCE_LSE: |
AnnaBridge | 189:f392fc9709a3 | 2275 | tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16((uint32_t)LSE_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); |
AnnaBridge | 189:f392fc9709a3 | 2276 | break; |
AnnaBridge | 189:f392fc9709a3 | 2277 | default: |
AnnaBridge | 189:f392fc9709a3 | 2278 | ret = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 2279 | break; |
AnnaBridge | 189:f392fc9709a3 | 2280 | } |
AnnaBridge | 189:f392fc9709a3 | 2281 | |
AnnaBridge | 189:f392fc9709a3 | 2282 | /* USARTDIV must be greater than or equal to 0d16 */ |
AnnaBridge | 189:f392fc9709a3 | 2283 | if ((tmpreg >= USART_BRR_MIN) && (tmpreg <= USART_BRR_MAX)) |
AnnaBridge | 189:f392fc9709a3 | 2284 | { |
AnnaBridge | 189:f392fc9709a3 | 2285 | hirda->Instance->BRR = tmpreg; |
AnnaBridge | 189:f392fc9709a3 | 2286 | } |
AnnaBridge | 189:f392fc9709a3 | 2287 | else |
AnnaBridge | 189:f392fc9709a3 | 2288 | { |
AnnaBridge | 189:f392fc9709a3 | 2289 | ret = HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 2290 | } |
AnnaBridge | 189:f392fc9709a3 | 2291 | |
AnnaBridge | 189:f392fc9709a3 | 2292 | return ret; |
AnnaBridge | 189:f392fc9709a3 | 2293 | } |
AnnaBridge | 189:f392fc9709a3 | 2294 | |
AnnaBridge | 189:f392fc9709a3 | 2295 | /** |
AnnaBridge | 189:f392fc9709a3 | 2296 | * @brief Check the IRDA Idle State. |
AnnaBridge | 189:f392fc9709a3 | 2297 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2298 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2299 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 2300 | */ |
AnnaBridge | 189:f392fc9709a3 | 2301 | static HAL_StatusTypeDef IRDA_CheckIdleState(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2302 | { |
AnnaBridge | 189:f392fc9709a3 | 2303 | uint32_t tickstart; |
AnnaBridge | 189:f392fc9709a3 | 2304 | |
AnnaBridge | 189:f392fc9709a3 | 2305 | /* Initialize the IRDA ErrorCode */ |
AnnaBridge | 189:f392fc9709a3 | 2306 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 2307 | |
AnnaBridge | 189:f392fc9709a3 | 2308 | /* Init tickstart for timeout managment*/ |
AnnaBridge | 189:f392fc9709a3 | 2309 | tickstart = HAL_GetTick(); |
AnnaBridge | 189:f392fc9709a3 | 2310 | |
AnnaBridge | 189:f392fc9709a3 | 2311 | /* Check if the Transmitter is enabled */ |
AnnaBridge | 189:f392fc9709a3 | 2312 | if ((hirda->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE) |
AnnaBridge | 189:f392fc9709a3 | 2313 | { |
AnnaBridge | 189:f392fc9709a3 | 2314 | /* Wait until TEACK flag is set */ |
AnnaBridge | 189:f392fc9709a3 | 2315 | if (IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_TEACK, RESET, tickstart, IRDA_TEACK_REACK_TIMEOUT) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 2316 | { |
AnnaBridge | 189:f392fc9709a3 | 2317 | /* Timeout occurred */ |
AnnaBridge | 189:f392fc9709a3 | 2318 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 2319 | } |
AnnaBridge | 189:f392fc9709a3 | 2320 | } |
AnnaBridge | 189:f392fc9709a3 | 2321 | /* Check if the Receiver is enabled */ |
AnnaBridge | 189:f392fc9709a3 | 2322 | if ((hirda->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE) |
AnnaBridge | 189:f392fc9709a3 | 2323 | { |
AnnaBridge | 189:f392fc9709a3 | 2324 | /* Wait until REACK flag is set */ |
AnnaBridge | 189:f392fc9709a3 | 2325 | if (IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_REACK, RESET, tickstart, IRDA_TEACK_REACK_TIMEOUT) != HAL_OK) |
AnnaBridge | 189:f392fc9709a3 | 2326 | { |
AnnaBridge | 189:f392fc9709a3 | 2327 | /* Timeout occurred */ |
AnnaBridge | 189:f392fc9709a3 | 2328 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 2329 | } |
AnnaBridge | 189:f392fc9709a3 | 2330 | } |
AnnaBridge | 189:f392fc9709a3 | 2331 | |
AnnaBridge | 189:f392fc9709a3 | 2332 | /* Initialize the IRDA state*/ |
AnnaBridge | 189:f392fc9709a3 | 2333 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2334 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2335 | |
AnnaBridge | 189:f392fc9709a3 | 2336 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 2337 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2338 | |
AnnaBridge | 189:f392fc9709a3 | 2339 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 2340 | } |
AnnaBridge | 189:f392fc9709a3 | 2341 | |
AnnaBridge | 189:f392fc9709a3 | 2342 | /** |
AnnaBridge | 189:f392fc9709a3 | 2343 | * @brief Handle IRDA Communication Timeout. |
AnnaBridge | 189:f392fc9709a3 | 2344 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2345 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2346 | * @param Flag Specifies the IRDA flag to check. |
AnnaBridge | 189:f392fc9709a3 | 2347 | * @param Status Flag status (SET or RESET) |
AnnaBridge | 189:f392fc9709a3 | 2348 | * @param Tickstart Tick start value |
AnnaBridge | 189:f392fc9709a3 | 2349 | * @param Timeout Timeout duration |
AnnaBridge | 189:f392fc9709a3 | 2350 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 2351 | */ |
AnnaBridge | 189:f392fc9709a3 | 2352 | static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout) |
AnnaBridge | 189:f392fc9709a3 | 2353 | { |
AnnaBridge | 189:f392fc9709a3 | 2354 | /* Wait until flag is set */ |
AnnaBridge | 189:f392fc9709a3 | 2355 | while ((__HAL_IRDA_GET_FLAG(hirda, Flag) ? SET : RESET) == Status) |
AnnaBridge | 189:f392fc9709a3 | 2356 | { |
AnnaBridge | 189:f392fc9709a3 | 2357 | /* Check for the Timeout */ |
AnnaBridge | 189:f392fc9709a3 | 2358 | if (Timeout != HAL_MAX_DELAY) |
AnnaBridge | 189:f392fc9709a3 | 2359 | { |
AnnaBridge | 189:f392fc9709a3 | 2360 | if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) |
AnnaBridge | 189:f392fc9709a3 | 2361 | { |
AnnaBridge | 189:f392fc9709a3 | 2362 | /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ |
AnnaBridge | 189:f392fc9709a3 | 2363 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE)); |
AnnaBridge | 189:f392fc9709a3 | 2364 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 2365 | |
AnnaBridge | 189:f392fc9709a3 | 2366 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2367 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2368 | |
AnnaBridge | 189:f392fc9709a3 | 2369 | /* Process Unlocked */ |
AnnaBridge | 189:f392fc9709a3 | 2370 | __HAL_UNLOCK(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2371 | return HAL_TIMEOUT; |
AnnaBridge | 189:f392fc9709a3 | 2372 | } |
AnnaBridge | 189:f392fc9709a3 | 2373 | } |
AnnaBridge | 189:f392fc9709a3 | 2374 | } |
AnnaBridge | 189:f392fc9709a3 | 2375 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 2376 | } |
AnnaBridge | 189:f392fc9709a3 | 2377 | |
AnnaBridge | 189:f392fc9709a3 | 2378 | |
AnnaBridge | 189:f392fc9709a3 | 2379 | /** |
AnnaBridge | 189:f392fc9709a3 | 2380 | * @brief End ongoing Tx transfer on IRDA peripheral (following error detection or Transmit completion). |
AnnaBridge | 189:f392fc9709a3 | 2381 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2382 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2383 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2384 | */ |
AnnaBridge | 189:f392fc9709a3 | 2385 | static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2386 | { |
AnnaBridge | 189:f392fc9709a3 | 2387 | /* Disable TXEIE and TCIE interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 2388 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); |
AnnaBridge | 189:f392fc9709a3 | 2389 | |
AnnaBridge | 189:f392fc9709a3 | 2390 | /* At end of Tx process, restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2391 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2392 | } |
AnnaBridge | 189:f392fc9709a3 | 2393 | |
AnnaBridge | 189:f392fc9709a3 | 2394 | |
AnnaBridge | 189:f392fc9709a3 | 2395 | /** |
AnnaBridge | 189:f392fc9709a3 | 2396 | * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). |
AnnaBridge | 189:f392fc9709a3 | 2397 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2398 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2399 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2400 | */ |
AnnaBridge | 189:f392fc9709a3 | 2401 | static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2402 | { |
AnnaBridge | 189:f392fc9709a3 | 2403 | /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 2404 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); |
AnnaBridge | 189:f392fc9709a3 | 2405 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 2406 | |
AnnaBridge | 189:f392fc9709a3 | 2407 | /* At end of Rx process, restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2408 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2409 | } |
AnnaBridge | 189:f392fc9709a3 | 2410 | |
AnnaBridge | 189:f392fc9709a3 | 2411 | |
AnnaBridge | 189:f392fc9709a3 | 2412 | /** |
AnnaBridge | 189:f392fc9709a3 | 2413 | * @brief DMA IRDA transmit process complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2414 | * @param hdma Pointer to a DMA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2415 | * the configuration information for the specified DMA module. |
AnnaBridge | 189:f392fc9709a3 | 2416 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2417 | */ |
AnnaBridge | 189:f392fc9709a3 | 2418 | static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2419 | { |
AnnaBridge | 189:f392fc9709a3 | 2420 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2421 | |
AnnaBridge | 189:f392fc9709a3 | 2422 | /* DMA Normal mode */ |
AnnaBridge | 189:f392fc9709a3 | 2423 | if (hdma->Init.Mode != DMA_CIRCULAR) |
AnnaBridge | 189:f392fc9709a3 | 2424 | { |
AnnaBridge | 189:f392fc9709a3 | 2425 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2426 | |
AnnaBridge | 189:f392fc9709a3 | 2427 | /* Disable the DMA transfer for transmit request by resetting the DMAT bit |
AnnaBridge | 189:f392fc9709a3 | 2428 | in the IRDA CR3 register */ |
AnnaBridge | 189:f392fc9709a3 | 2429 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAT); |
AnnaBridge | 189:f392fc9709a3 | 2430 | |
AnnaBridge | 189:f392fc9709a3 | 2431 | /* Enable the IRDA Transmit Complete Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 2432 | SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE); |
AnnaBridge | 189:f392fc9709a3 | 2433 | } |
AnnaBridge | 189:f392fc9709a3 | 2434 | /* DMA Circular mode */ |
AnnaBridge | 189:f392fc9709a3 | 2435 | else |
AnnaBridge | 189:f392fc9709a3 | 2436 | { |
AnnaBridge | 189:f392fc9709a3 | 2437 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2438 | /* Call registered Tx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2439 | hirda->TxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2440 | #else |
AnnaBridge | 189:f392fc9709a3 | 2441 | /* Call legacy weak Tx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2442 | HAL_IRDA_TxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2443 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2444 | } |
AnnaBridge | 189:f392fc9709a3 | 2445 | |
AnnaBridge | 189:f392fc9709a3 | 2446 | } |
AnnaBridge | 189:f392fc9709a3 | 2447 | |
AnnaBridge | 189:f392fc9709a3 | 2448 | /** |
AnnaBridge | 189:f392fc9709a3 | 2449 | * @brief DMA IRDA transmit process half complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2450 | * @param hdma Pointer to a DMA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2451 | * the configuration information for the specified DMA module. |
AnnaBridge | 189:f392fc9709a3 | 2452 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2453 | */ |
AnnaBridge | 189:f392fc9709a3 | 2454 | static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2455 | { |
AnnaBridge | 189:f392fc9709a3 | 2456 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2457 | |
AnnaBridge | 189:f392fc9709a3 | 2458 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2459 | /* Call registered Tx Half complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2460 | hirda->TxHalfCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2461 | #else |
AnnaBridge | 189:f392fc9709a3 | 2462 | /* Call legacy weak Tx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2463 | HAL_IRDA_TxHalfCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2464 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2465 | } |
AnnaBridge | 189:f392fc9709a3 | 2466 | |
AnnaBridge | 189:f392fc9709a3 | 2467 | /** |
AnnaBridge | 189:f392fc9709a3 | 2468 | * @brief DMA IRDA receive process complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2469 | * @param hdma Pointer to a DMA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2470 | * the configuration information for the specified DMA module. |
AnnaBridge | 189:f392fc9709a3 | 2471 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2472 | */ |
AnnaBridge | 189:f392fc9709a3 | 2473 | static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2474 | { |
AnnaBridge | 189:f392fc9709a3 | 2475 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2476 | |
AnnaBridge | 189:f392fc9709a3 | 2477 | /* DMA Normal mode */ |
AnnaBridge | 189:f392fc9709a3 | 2478 | if (hdma->Init.Mode != DMA_CIRCULAR) |
AnnaBridge | 189:f392fc9709a3 | 2479 | { |
AnnaBridge | 189:f392fc9709a3 | 2480 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2481 | |
AnnaBridge | 189:f392fc9709a3 | 2482 | /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ |
AnnaBridge | 189:f392fc9709a3 | 2483 | CLEAR_BIT(hirda->Instance->CR1, USART_CR1_PEIE); |
AnnaBridge | 189:f392fc9709a3 | 2484 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 2485 | |
AnnaBridge | 189:f392fc9709a3 | 2486 | /* Disable the DMA transfer for the receiver request by resetting the DMAR bit |
AnnaBridge | 189:f392fc9709a3 | 2487 | in the IRDA CR3 register */ |
AnnaBridge | 189:f392fc9709a3 | 2488 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_DMAR); |
AnnaBridge | 189:f392fc9709a3 | 2489 | |
AnnaBridge | 189:f392fc9709a3 | 2490 | /* At end of Rx process, restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2491 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2492 | } |
AnnaBridge | 189:f392fc9709a3 | 2493 | |
AnnaBridge | 189:f392fc9709a3 | 2494 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2495 | /* Call registered Rx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2496 | hirda->RxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2497 | #else |
AnnaBridge | 189:f392fc9709a3 | 2498 | /* Call legacy weak Rx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2499 | HAL_IRDA_RxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2500 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 2501 | } |
AnnaBridge | 189:f392fc9709a3 | 2502 | |
AnnaBridge | 189:f392fc9709a3 | 2503 | /** |
AnnaBridge | 189:f392fc9709a3 | 2504 | * @brief DMA IRDA receive process half complete callback. |
AnnaBridge | 189:f392fc9709a3 | 2505 | * @param hdma Pointer to a DMA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2506 | * the configuration information for the specified DMA module. |
AnnaBridge | 189:f392fc9709a3 | 2507 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2508 | */ |
AnnaBridge | 189:f392fc9709a3 | 2509 | static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2510 | { |
AnnaBridge | 189:f392fc9709a3 | 2511 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2512 | |
AnnaBridge | 189:f392fc9709a3 | 2513 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2514 | /*Call registered Rx Half complete callback*/ |
AnnaBridge | 189:f392fc9709a3 | 2515 | hirda->RxHalfCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2516 | #else |
AnnaBridge | 189:f392fc9709a3 | 2517 | /* Call legacy weak Rx Half complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2518 | HAL_IRDA_RxHalfCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2519 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2520 | } |
AnnaBridge | 189:f392fc9709a3 | 2521 | |
AnnaBridge | 189:f392fc9709a3 | 2522 | /** |
AnnaBridge | 189:f392fc9709a3 | 2523 | * @brief DMA IRDA communication error callback. |
AnnaBridge | 189:f392fc9709a3 | 2524 | * @param hdma Pointer to a DMA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2525 | * the configuration information for the specified DMA module. |
AnnaBridge | 189:f392fc9709a3 | 2526 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2527 | */ |
AnnaBridge | 189:f392fc9709a3 | 2528 | static void IRDA_DMAError(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2529 | { |
AnnaBridge | 189:f392fc9709a3 | 2530 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2531 | |
AnnaBridge | 189:f392fc9709a3 | 2532 | /* Stop IRDA DMA Tx request if ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2533 | if (hirda->gState == HAL_IRDA_STATE_BUSY_TX) |
AnnaBridge | 189:f392fc9709a3 | 2534 | { |
AnnaBridge | 189:f392fc9709a3 | 2535 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) |
AnnaBridge | 189:f392fc9709a3 | 2536 | { |
AnnaBridge | 189:f392fc9709a3 | 2537 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2538 | IRDA_EndTxTransfer(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2539 | } |
AnnaBridge | 189:f392fc9709a3 | 2540 | } |
AnnaBridge | 189:f392fc9709a3 | 2541 | |
AnnaBridge | 189:f392fc9709a3 | 2542 | /* Stop IRDA DMA Rx request if ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2543 | if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX) |
AnnaBridge | 189:f392fc9709a3 | 2544 | { |
AnnaBridge | 189:f392fc9709a3 | 2545 | if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) |
AnnaBridge | 189:f392fc9709a3 | 2546 | { |
AnnaBridge | 189:f392fc9709a3 | 2547 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2548 | IRDA_EndRxTransfer(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2549 | } |
AnnaBridge | 189:f392fc9709a3 | 2550 | } |
AnnaBridge | 189:f392fc9709a3 | 2551 | |
AnnaBridge | 189:f392fc9709a3 | 2552 | hirda->ErrorCode |= HAL_IRDA_ERROR_DMA; |
AnnaBridge | 189:f392fc9709a3 | 2553 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2554 | /* Call registered user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 2555 | hirda->ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2556 | #else |
AnnaBridge | 189:f392fc9709a3 | 2557 | /* Call legacy weak user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 2558 | HAL_IRDA_ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2559 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2560 | } |
AnnaBridge | 189:f392fc9709a3 | 2561 | |
AnnaBridge | 189:f392fc9709a3 | 2562 | /** |
AnnaBridge | 189:f392fc9709a3 | 2563 | * @brief DMA IRDA communication abort callback, when initiated by HAL services on Error |
AnnaBridge | 189:f392fc9709a3 | 2564 | * (To be called at end of DMA Abort procedure following error occurrence). |
AnnaBridge | 189:f392fc9709a3 | 2565 | * @param hdma DMA handle. |
AnnaBridge | 189:f392fc9709a3 | 2566 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2567 | */ |
AnnaBridge | 189:f392fc9709a3 | 2568 | static void IRDA_DMAAbortOnError(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2569 | { |
AnnaBridge | 189:f392fc9709a3 | 2570 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2571 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2572 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2573 | |
AnnaBridge | 189:f392fc9709a3 | 2574 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2575 | /* Call registered user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 2576 | hirda->ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2577 | #else |
AnnaBridge | 189:f392fc9709a3 | 2578 | /* Call legacy weak user error callback */ |
AnnaBridge | 189:f392fc9709a3 | 2579 | HAL_IRDA_ErrorCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2580 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2581 | } |
AnnaBridge | 189:f392fc9709a3 | 2582 | |
AnnaBridge | 189:f392fc9709a3 | 2583 | /** |
AnnaBridge | 189:f392fc9709a3 | 2584 | * @brief DMA IRDA Tx communication abort callback, when initiated by user |
AnnaBridge | 189:f392fc9709a3 | 2585 | * (To be called at end of DMA Tx Abort procedure following user abort request). |
AnnaBridge | 189:f392fc9709a3 | 2586 | * @note When this callback is executed, User Abort complete call back is called only if no |
AnnaBridge | 189:f392fc9709a3 | 2587 | * Abort still ongoing for Rx DMA Handle. |
AnnaBridge | 189:f392fc9709a3 | 2588 | * @param hdma DMA handle. |
AnnaBridge | 189:f392fc9709a3 | 2589 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2590 | */ |
AnnaBridge | 189:f392fc9709a3 | 2591 | static void IRDA_DMATxAbortCallback(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2592 | { |
AnnaBridge | 189:f392fc9709a3 | 2593 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2594 | |
AnnaBridge | 189:f392fc9709a3 | 2595 | hirda->hdmatx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 2596 | |
AnnaBridge | 189:f392fc9709a3 | 2597 | /* Check if an Abort process is still ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2598 | if (hirda->hdmarx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 2599 | { |
AnnaBridge | 189:f392fc9709a3 | 2600 | if (hirda->hdmarx->XferAbortCallback != NULL) |
AnnaBridge | 189:f392fc9709a3 | 2601 | { |
AnnaBridge | 189:f392fc9709a3 | 2602 | return; |
AnnaBridge | 189:f392fc9709a3 | 2603 | } |
AnnaBridge | 189:f392fc9709a3 | 2604 | } |
AnnaBridge | 189:f392fc9709a3 | 2605 | |
AnnaBridge | 189:f392fc9709a3 | 2606 | /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2607 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2608 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2609 | |
AnnaBridge | 189:f392fc9709a3 | 2610 | /* Reset errorCode */ |
AnnaBridge | 189:f392fc9709a3 | 2611 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 2612 | |
AnnaBridge | 189:f392fc9709a3 | 2613 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 2614 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 2615 | |
AnnaBridge | 189:f392fc9709a3 | 2616 | /* Restore hirda->gState and hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2617 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2618 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2619 | |
AnnaBridge | 189:f392fc9709a3 | 2620 | /* Call user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2621 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2622 | /* Call registered Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2623 | hirda->AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2624 | #else |
AnnaBridge | 189:f392fc9709a3 | 2625 | /* Call legacy weak Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2626 | HAL_IRDA_AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2627 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2628 | } |
AnnaBridge | 189:f392fc9709a3 | 2629 | |
AnnaBridge | 189:f392fc9709a3 | 2630 | |
AnnaBridge | 189:f392fc9709a3 | 2631 | /** |
AnnaBridge | 189:f392fc9709a3 | 2632 | * @brief DMA IRDA Rx communication abort callback, when initiated by user |
AnnaBridge | 189:f392fc9709a3 | 2633 | * (To be called at end of DMA Rx Abort procedure following user abort request). |
AnnaBridge | 189:f392fc9709a3 | 2634 | * @note When this callback is executed, User Abort complete call back is called only if no |
AnnaBridge | 189:f392fc9709a3 | 2635 | * Abort still ongoing for Tx DMA Handle. |
AnnaBridge | 189:f392fc9709a3 | 2636 | * @param hdma DMA handle. |
AnnaBridge | 189:f392fc9709a3 | 2637 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2638 | */ |
AnnaBridge | 189:f392fc9709a3 | 2639 | static void IRDA_DMARxAbortCallback(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2640 | { |
AnnaBridge | 189:f392fc9709a3 | 2641 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2642 | |
AnnaBridge | 189:f392fc9709a3 | 2643 | hirda->hdmarx->XferAbortCallback = NULL; |
AnnaBridge | 189:f392fc9709a3 | 2644 | |
AnnaBridge | 189:f392fc9709a3 | 2645 | /* Check if an Abort process is still ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2646 | if (hirda->hdmatx != NULL) |
AnnaBridge | 189:f392fc9709a3 | 2647 | { |
AnnaBridge | 189:f392fc9709a3 | 2648 | if (hirda->hdmatx->XferAbortCallback != NULL) |
AnnaBridge | 189:f392fc9709a3 | 2649 | { |
AnnaBridge | 189:f392fc9709a3 | 2650 | return; |
AnnaBridge | 189:f392fc9709a3 | 2651 | } |
AnnaBridge | 189:f392fc9709a3 | 2652 | } |
AnnaBridge | 189:f392fc9709a3 | 2653 | |
AnnaBridge | 189:f392fc9709a3 | 2654 | /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2655 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2656 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2657 | |
AnnaBridge | 189:f392fc9709a3 | 2658 | /* Reset errorCode */ |
AnnaBridge | 189:f392fc9709a3 | 2659 | hirda->ErrorCode = HAL_IRDA_ERROR_NONE; |
AnnaBridge | 189:f392fc9709a3 | 2660 | |
AnnaBridge | 189:f392fc9709a3 | 2661 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 2662 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 2663 | |
AnnaBridge | 189:f392fc9709a3 | 2664 | /* Restore hirda->gState and hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2665 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2666 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2667 | |
AnnaBridge | 189:f392fc9709a3 | 2668 | /* Call user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2669 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2670 | /* Call registered Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2671 | hirda->AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2672 | #else |
AnnaBridge | 189:f392fc9709a3 | 2673 | /* Call legacy weak Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2674 | HAL_IRDA_AbortCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2675 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2676 | } |
AnnaBridge | 189:f392fc9709a3 | 2677 | |
AnnaBridge | 189:f392fc9709a3 | 2678 | |
AnnaBridge | 189:f392fc9709a3 | 2679 | /** |
AnnaBridge | 189:f392fc9709a3 | 2680 | * @brief DMA IRDA Tx communication abort callback, when initiated by user by a call to |
AnnaBridge | 189:f392fc9709a3 | 2681 | * HAL_IRDA_AbortTransmit_IT API (Abort only Tx transfer) |
AnnaBridge | 189:f392fc9709a3 | 2682 | * (This callback is executed at end of DMA Tx Abort procedure following user abort request, |
AnnaBridge | 189:f392fc9709a3 | 2683 | * and leads to user Tx Abort Complete callback execution). |
AnnaBridge | 189:f392fc9709a3 | 2684 | * @param hdma DMA handle. |
AnnaBridge | 189:f392fc9709a3 | 2685 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2686 | */ |
AnnaBridge | 189:f392fc9709a3 | 2687 | static void IRDA_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2688 | { |
AnnaBridge | 189:f392fc9709a3 | 2689 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)(hdma->Parent); |
AnnaBridge | 189:f392fc9709a3 | 2690 | |
AnnaBridge | 189:f392fc9709a3 | 2691 | hirda->TxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2692 | |
AnnaBridge | 189:f392fc9709a3 | 2693 | /* Restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2694 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2695 | |
AnnaBridge | 189:f392fc9709a3 | 2696 | /* Call user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2697 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2698 | /* Call registered Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 2699 | hirda->AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2700 | #else |
AnnaBridge | 189:f392fc9709a3 | 2701 | /* Call legacy weak Abort Transmit Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 2702 | HAL_IRDA_AbortTransmitCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2703 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2704 | } |
AnnaBridge | 189:f392fc9709a3 | 2705 | |
AnnaBridge | 189:f392fc9709a3 | 2706 | /** |
AnnaBridge | 189:f392fc9709a3 | 2707 | * @brief DMA IRDA Rx communication abort callback, when initiated by user by a call to |
AnnaBridge | 189:f392fc9709a3 | 2708 | * HAL_IRDA_AbortReceive_IT API (Abort only Rx transfer) |
AnnaBridge | 189:f392fc9709a3 | 2709 | * (This callback is executed at end of DMA Rx Abort procedure following user abort request, |
AnnaBridge | 189:f392fc9709a3 | 2710 | * and leads to user Rx Abort Complete callback execution). |
AnnaBridge | 189:f392fc9709a3 | 2711 | * @param hdma DMA handle. |
AnnaBridge | 189:f392fc9709a3 | 2712 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2713 | */ |
AnnaBridge | 189:f392fc9709a3 | 2714 | static void IRDA_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) |
AnnaBridge | 189:f392fc9709a3 | 2715 | { |
AnnaBridge | 189:f392fc9709a3 | 2716 | IRDA_HandleTypeDef *hirda = (IRDA_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; |
AnnaBridge | 189:f392fc9709a3 | 2717 | |
AnnaBridge | 189:f392fc9709a3 | 2718 | hirda->RxXferCount = 0U; |
AnnaBridge | 189:f392fc9709a3 | 2719 | |
AnnaBridge | 189:f392fc9709a3 | 2720 | /* Clear the Error flags in the ICR register */ |
AnnaBridge | 189:f392fc9709a3 | 2721 | __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_CLEAR_OREF | IRDA_CLEAR_NEF | IRDA_CLEAR_PEF | IRDA_CLEAR_FEF); |
AnnaBridge | 189:f392fc9709a3 | 2722 | |
AnnaBridge | 189:f392fc9709a3 | 2723 | /* Restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2724 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2725 | |
AnnaBridge | 189:f392fc9709a3 | 2726 | /* Call user Abort complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2727 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2728 | /* Call registered Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 2729 | hirda->AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2730 | #else |
AnnaBridge | 189:f392fc9709a3 | 2731 | /* Call legacy weak Abort Receive Complete Callback */ |
AnnaBridge | 189:f392fc9709a3 | 2732 | HAL_IRDA_AbortReceiveCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2733 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2734 | } |
AnnaBridge | 189:f392fc9709a3 | 2735 | |
AnnaBridge | 189:f392fc9709a3 | 2736 | /** |
AnnaBridge | 189:f392fc9709a3 | 2737 | * @brief Send an amount of data in interrupt mode. |
AnnaBridge | 189:f392fc9709a3 | 2738 | * @note Function is called under interruption only, once |
AnnaBridge | 189:f392fc9709a3 | 2739 | * interruptions have been enabled by HAL_IRDA_Transmit_IT(). |
AnnaBridge | 189:f392fc9709a3 | 2740 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2741 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2742 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2743 | */ |
AnnaBridge | 189:f392fc9709a3 | 2744 | static void IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2745 | { |
AnnaBridge | 189:f392fc9709a3 | 2746 | uint16_t *tmp; |
AnnaBridge | 189:f392fc9709a3 | 2747 | |
AnnaBridge | 189:f392fc9709a3 | 2748 | /* Check that a Tx process is ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2749 | if (hirda->gState == HAL_IRDA_STATE_BUSY_TX) |
AnnaBridge | 189:f392fc9709a3 | 2750 | { |
AnnaBridge | 189:f392fc9709a3 | 2751 | if (hirda->TxXferCount == 0U) |
AnnaBridge | 189:f392fc9709a3 | 2752 | { |
AnnaBridge | 189:f392fc9709a3 | 2753 | /* Disable the IRDA Transmit Data Register Empty Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 2754 | CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); |
AnnaBridge | 189:f392fc9709a3 | 2755 | |
AnnaBridge | 189:f392fc9709a3 | 2756 | /* Enable the IRDA Transmit Complete Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 2757 | SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE); |
AnnaBridge | 189:f392fc9709a3 | 2758 | } |
AnnaBridge | 189:f392fc9709a3 | 2759 | else |
AnnaBridge | 189:f392fc9709a3 | 2760 | { |
AnnaBridge | 189:f392fc9709a3 | 2761 | if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE)) |
AnnaBridge | 189:f392fc9709a3 | 2762 | { |
AnnaBridge | 189:f392fc9709a3 | 2763 | tmp = (uint16_t *) hirda->pTxBuffPtr; /* Derogation R.11.3 */ |
AnnaBridge | 189:f392fc9709a3 | 2764 | hirda->Instance->TDR = (uint16_t)(*tmp & 0x01FFU); |
AnnaBridge | 189:f392fc9709a3 | 2765 | hirda->pTxBuffPtr += 2U; |
AnnaBridge | 189:f392fc9709a3 | 2766 | } |
AnnaBridge | 189:f392fc9709a3 | 2767 | else |
AnnaBridge | 189:f392fc9709a3 | 2768 | { |
AnnaBridge | 189:f392fc9709a3 | 2769 | hirda->Instance->TDR = (uint8_t)(*hirda->pTxBuffPtr & 0xFFU); |
AnnaBridge | 189:f392fc9709a3 | 2770 | hirda->pTxBuffPtr++; |
AnnaBridge | 189:f392fc9709a3 | 2771 | } |
AnnaBridge | 189:f392fc9709a3 | 2772 | hirda->TxXferCount--; |
AnnaBridge | 189:f392fc9709a3 | 2773 | } |
AnnaBridge | 189:f392fc9709a3 | 2774 | } |
AnnaBridge | 189:f392fc9709a3 | 2775 | } |
AnnaBridge | 189:f392fc9709a3 | 2776 | |
AnnaBridge | 189:f392fc9709a3 | 2777 | /** |
AnnaBridge | 189:f392fc9709a3 | 2778 | * @brief Wrap up transmission in non-blocking mode. |
AnnaBridge | 189:f392fc9709a3 | 2779 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2780 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2781 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2782 | */ |
AnnaBridge | 189:f392fc9709a3 | 2783 | static void IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2784 | { |
AnnaBridge | 189:f392fc9709a3 | 2785 | /* Disable the IRDA Transmit Complete Interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 2786 | CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TCIE); |
AnnaBridge | 189:f392fc9709a3 | 2787 | |
AnnaBridge | 189:f392fc9709a3 | 2788 | /* Tx process is ended, restore hirda->gState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2789 | hirda->gState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2790 | |
AnnaBridge | 189:f392fc9709a3 | 2791 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2792 | /* Call registered Tx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2793 | hirda->TxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2794 | #else |
AnnaBridge | 189:f392fc9709a3 | 2795 | /* Call legacy weak Tx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2796 | HAL_IRDA_TxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2797 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACK */ |
AnnaBridge | 189:f392fc9709a3 | 2798 | } |
AnnaBridge | 189:f392fc9709a3 | 2799 | |
AnnaBridge | 189:f392fc9709a3 | 2800 | /** |
AnnaBridge | 189:f392fc9709a3 | 2801 | * @brief Receive an amount of data in interrupt mode. |
AnnaBridge | 189:f392fc9709a3 | 2802 | * @note Function is called under interruption only, once |
AnnaBridge | 189:f392fc9709a3 | 2803 | * interruptions have been enabled by HAL_IRDA_Receive_IT() |
AnnaBridge | 189:f392fc9709a3 | 2804 | * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains |
AnnaBridge | 189:f392fc9709a3 | 2805 | * the configuration information for the specified IRDA module. |
AnnaBridge | 189:f392fc9709a3 | 2806 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 2807 | */ |
AnnaBridge | 189:f392fc9709a3 | 2808 | static void IRDA_Receive_IT(IRDA_HandleTypeDef *hirda) |
AnnaBridge | 189:f392fc9709a3 | 2809 | { |
AnnaBridge | 189:f392fc9709a3 | 2810 | uint16_t *tmp; |
AnnaBridge | 189:f392fc9709a3 | 2811 | uint16_t uhMask = hirda->Mask; |
AnnaBridge | 189:f392fc9709a3 | 2812 | uint16_t uhdata; |
AnnaBridge | 189:f392fc9709a3 | 2813 | |
AnnaBridge | 189:f392fc9709a3 | 2814 | /* Check that a Rx process is ongoing */ |
AnnaBridge | 189:f392fc9709a3 | 2815 | if (hirda->RxState == HAL_IRDA_STATE_BUSY_RX) |
AnnaBridge | 189:f392fc9709a3 | 2816 | { |
AnnaBridge | 189:f392fc9709a3 | 2817 | uhdata = (uint16_t) READ_REG(hirda->Instance->RDR); |
AnnaBridge | 189:f392fc9709a3 | 2818 | if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE)) |
AnnaBridge | 189:f392fc9709a3 | 2819 | { |
AnnaBridge | 189:f392fc9709a3 | 2820 | tmp = (uint16_t *) hirda->pRxBuffPtr; /* Derogation R.11.3 */ |
AnnaBridge | 189:f392fc9709a3 | 2821 | *tmp = (uint16_t)(uhdata & uhMask); |
AnnaBridge | 189:f392fc9709a3 | 2822 | hirda->pRxBuffPtr += 2U; |
AnnaBridge | 189:f392fc9709a3 | 2823 | } |
AnnaBridge | 189:f392fc9709a3 | 2824 | else |
AnnaBridge | 189:f392fc9709a3 | 2825 | { |
AnnaBridge | 189:f392fc9709a3 | 2826 | *hirda->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask); |
AnnaBridge | 189:f392fc9709a3 | 2827 | hirda->pRxBuffPtr++; |
AnnaBridge | 189:f392fc9709a3 | 2828 | } |
AnnaBridge | 189:f392fc9709a3 | 2829 | |
AnnaBridge | 189:f392fc9709a3 | 2830 | hirda->RxXferCount--; |
AnnaBridge | 189:f392fc9709a3 | 2831 | if (hirda->RxXferCount == 0U) |
AnnaBridge | 189:f392fc9709a3 | 2832 | { |
AnnaBridge | 189:f392fc9709a3 | 2833 | /* Disable the IRDA Parity Error Interrupt and RXNE interrupt */ |
AnnaBridge | 189:f392fc9709a3 | 2834 | CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); |
AnnaBridge | 189:f392fc9709a3 | 2835 | |
AnnaBridge | 189:f392fc9709a3 | 2836 | /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */ |
AnnaBridge | 189:f392fc9709a3 | 2837 | CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); |
AnnaBridge | 189:f392fc9709a3 | 2838 | |
AnnaBridge | 189:f392fc9709a3 | 2839 | /* Rx process is completed, restore hirda->RxState to Ready */ |
AnnaBridge | 189:f392fc9709a3 | 2840 | hirda->RxState = HAL_IRDA_STATE_READY; |
AnnaBridge | 189:f392fc9709a3 | 2841 | |
AnnaBridge | 189:f392fc9709a3 | 2842 | #if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1) |
AnnaBridge | 189:f392fc9709a3 | 2843 | /* Call registered Rx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2844 | hirda->RxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2845 | #else |
AnnaBridge | 189:f392fc9709a3 | 2846 | /* Call legacy weak Rx complete callback */ |
AnnaBridge | 189:f392fc9709a3 | 2847 | HAL_IRDA_RxCpltCallback(hirda); |
AnnaBridge | 189:f392fc9709a3 | 2848 | #endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */ |
AnnaBridge | 189:f392fc9709a3 | 2849 | } |
AnnaBridge | 189:f392fc9709a3 | 2850 | } |
AnnaBridge | 189:f392fc9709a3 | 2851 | else |
AnnaBridge | 189:f392fc9709a3 | 2852 | { |
AnnaBridge | 189:f392fc9709a3 | 2853 | /* Clear RXNE interrupt flag */ |
AnnaBridge | 189:f392fc9709a3 | 2854 | __HAL_IRDA_SEND_REQ(hirda, IRDA_RXDATA_FLUSH_REQUEST); |
AnnaBridge | 189:f392fc9709a3 | 2855 | } |
AnnaBridge | 189:f392fc9709a3 | 2856 | } |
AnnaBridge | 189:f392fc9709a3 | 2857 | |
AnnaBridge | 189:f392fc9709a3 | 2858 | /** |
AnnaBridge | 189:f392fc9709a3 | 2859 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2860 | */ |
AnnaBridge | 189:f392fc9709a3 | 2861 | |
AnnaBridge | 189:f392fc9709a3 | 2862 | #endif /* HAL_IRDA_MODULE_ENABLED */ |
AnnaBridge | 189:f392fc9709a3 | 2863 | /** |
AnnaBridge | 189:f392fc9709a3 | 2864 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2865 | */ |
AnnaBridge | 189:f392fc9709a3 | 2866 | |
AnnaBridge | 189:f392fc9709a3 | 2867 | /** |
AnnaBridge | 189:f392fc9709a3 | 2868 | * @} |
AnnaBridge | 189:f392fc9709a3 | 2869 | */ |
AnnaBridge | 189:f392fc9709a3 | 2870 | |
AnnaBridge | 189:f392fc9709a3 | 2871 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |