mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Jul 02 16:30:08 2015 +0100
Revision:
581:39197bcd20f2
Parent:
532:fe11edbda85c
Child:
613:bc40b8d2aec4
Synchronized with git revision ae2d3cdffe70184eb8736d94f76c45c93f4b7724

Full URL: https://github.com/mbedmicro/mbed/commit/ae2d3cdffe70184eb8736d94f76c45c93f4b7724/

Make it possible to build the core mbed library with yotta

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_irda.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 532:fe11edbda85c 5 * @version V1.3.0
mbed_official 532:fe11edbda85c 6 * @date 09-March-2015
mbed_official 235:685d5f11838f 7 * @brief IRDA HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides firmware functions to manage the following
mbed_official 235:685d5f11838f 9 * functionalities of the IrDA SIR ENDEC block (IrDA):
mbed_official 235:685d5f11838f 10 * + Initialization and de-initialization methods
mbed_official 235:685d5f11838f 11 * + IO operation methods
mbed_official 235:685d5f11838f 12 * + Peripheral Control methods
mbed_official 235:685d5f11838f 13 *
mbed_official 235:685d5f11838f 14 @verbatim
mbed_official 235:685d5f11838f 15 ==============================================================================
mbed_official 235:685d5f11838f 16 ##### How to use this driver #####
mbed_official 235:685d5f11838f 17 ==============================================================================
mbed_official 235:685d5f11838f 18 [..]
mbed_official 235:685d5f11838f 19 The IRDA HAL driver can be used as follows:
mbed_official 235:685d5f11838f 20
mbed_official 235:685d5f11838f 21 (#) Declare a IRDA_HandleTypeDef handle structure.
mbed_official 235:685d5f11838f 22 (#) Initialize the IRDA low level resources by implementing the HAL_IRDA_MspInit() API:
mbed_official 235:685d5f11838f 23 (##) Enable the USARTx interface clock.
mbed_official 235:685d5f11838f 24 (##) IRDA pins configuration:
mbed_official 235:685d5f11838f 25 (+++) Enable the clock for the IRDA GPIOs.
mbed_official 235:685d5f11838f 26 (+++) Configure these IRDA pins as alternate function pull-up.
mbed_official 235:685d5f11838f 27 (##) NVIC configuration if you need to use interrupt process (HAL_IRDA_Transmit_IT()
mbed_official 235:685d5f11838f 28 and HAL_IRDA_Receive_IT() APIs):
mbed_official 235:685d5f11838f 29 (+++) Configure the USARTx interrupt priority.
mbed_official 235:685d5f11838f 30 (+++) Enable the NVIC USART IRQ handle.
mbed_official 235:685d5f11838f 31 (##) DMA Configuration if you need to use DMA process (HAL_IRDA_Transmit_DMA()
mbed_official 235:685d5f11838f 32 and HAL_IRDA_Receive_DMA() APIs):
mbed_official 235:685d5f11838f 33 (+++) Declare a DMA handle structure for the Tx/Rx stream.
mbed_official 235:685d5f11838f 34 (+++) Enable the DMAx interface clock.
mbed_official 235:685d5f11838f 35 (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters.
mbed_official 235:685d5f11838f 36 (+++) Configure the DMA Tx/Rx Stream.
mbed_official 532:fe11edbda85c 37 (+++) Associate the initialized DMA handle to the IRDA DMA Tx/Rx handle.
mbed_official 235:685d5f11838f 38 (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx Stream.
mbed_official 235:685d5f11838f 39
mbed_official 235:685d5f11838f 40 (#) Program the Baud Rate, Word Length, Parity, IrDA Mode, Prescaler
mbed_official 235:685d5f11838f 41 and Mode(Receiver/Transmitter) in the hirda Init structure.
mbed_official 235:685d5f11838f 42
mbed_official 235:685d5f11838f 43 (#) Initialize the IRDA registers by calling the HAL_IRDA_Init() API:
mbed_official 235:685d5f11838f 44 (++) This API configures also the low level Hardware GPIO, CLOCK, CORTEX...etc)
mbed_official 532:fe11edbda85c 45 by calling the customized HAL_IRDA_MspInit() API.
mbed_official 235:685d5f11838f 46 -@@- The specific IRDA interrupts (Transmission complete interrupt,
mbed_official 235:685d5f11838f 47 RXNE interrupt and Error Interrupts) will be managed using the macros
mbed_official 235:685d5f11838f 48 __HAL_IRDA_ENABLE_IT() and __HAL_IRDA_DISABLE_IT() inside the transmit and receive process.
mbed_official 235:685d5f11838f 49
mbed_official 235:685d5f11838f 50 (#) Three operation modes are available within this driver :
mbed_official 235:685d5f11838f 51
mbed_official 235:685d5f11838f 52 *** Polling mode IO operation ***
mbed_official 235:685d5f11838f 53 =================================
mbed_official 235:685d5f11838f 54 [..]
mbed_official 235:685d5f11838f 55 (+) Send an amount of data in blocking mode using HAL_IRDA_Transmit()
mbed_official 235:685d5f11838f 56 (+) Receive an amount of data in blocking mode using HAL_IRDA_Receive()
mbed_official 235:685d5f11838f 57
mbed_official 235:685d5f11838f 58 *** Interrupt mode IO operation ***
mbed_official 235:685d5f11838f 59 ===================================
mbed_official 235:685d5f11838f 60 [..]
mbed_official 235:685d5f11838f 61 (+) Send an amount of data in non blocking mode using HAL_IRDA_Transmit_IT()
mbed_official 235:685d5f11838f 62 (+) At transmission end of transfer HAL_IRDA_TxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 63 add his own code by customization of function pointer HAL_IRDA_TxCpltCallback
mbed_official 235:685d5f11838f 64 (+) Receive an amount of data in non blocking mode using HAL_IRDA_Receive_IT()
mbed_official 235:685d5f11838f 65 (+) At reception end of transfer HAL_IRDA_RxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 66 add his own code by customization of function pointer HAL_IRDA_RxCpltCallback
mbed_official 235:685d5f11838f 67 (+) In case of transfer Error, HAL_IRDA_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 68 add his own code by customization of function pointer HAL_IRDA_ErrorCallback
mbed_official 235:685d5f11838f 69
mbed_official 235:685d5f11838f 70 *** DMA mode IO operation ***
mbed_official 235:685d5f11838f 71 =============================
mbed_official 235:685d5f11838f 72 [..]
mbed_official 235:685d5f11838f 73 (+) Send an amount of data in non blocking mode (DMA) using HAL_IRDA_Transmit_DMA()
mbed_official 235:685d5f11838f 74 (+) At transmission end of transfer HAL_IRDA_TxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 75 add his own code by customization of function pointer HAL_IRDA_TxCpltCallback
mbed_official 235:685d5f11838f 76 (+) Receive an amount of data in non blocking mode (DMA) using HAL_IRDA_Receive_DMA()
mbed_official 235:685d5f11838f 77 (+) At reception end of transfer HAL_IRDA_RxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 78 add his own code by customization of function pointer HAL_IRDA_RxCpltCallback
mbed_official 235:685d5f11838f 79 (+) In case of transfer Error, HAL_IRDA_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 80 add his own code by customization of function pointer HAL_IRDA_ErrorCallback
mbed_official 235:685d5f11838f 81
mbed_official 235:685d5f11838f 82 *** IRDA HAL driver macros list ***
mbed_official 235:685d5f11838f 83 ===================================
mbed_official 235:685d5f11838f 84 [..]
mbed_official 235:685d5f11838f 85 Below the list of most used macros in IRDA HAL driver.
mbed_official 235:685d5f11838f 86
mbed_official 235:685d5f11838f 87 (+) __HAL_IRDA_ENABLE: Enable the IRDA peripheral
mbed_official 235:685d5f11838f 88 (+) __HAL_IRDA_DISABLE: Disable the IRDA peripheral
mbed_official 235:685d5f11838f 89 (+) __HAL_IRDA_GET_FLAG : Checks whether the specified IRDA flag is set or not
mbed_official 235:685d5f11838f 90 (+) __HAL_IRDA_CLEAR_FLAG : Clears the specified IRDA pending flag
mbed_official 235:685d5f11838f 91 (+) __HAL_IRDA_ENABLE_IT: Enables the specified IRDA interrupt
mbed_official 235:685d5f11838f 92 (+) __HAL_IRDA_DISABLE_IT: Disables the specified IRDA interrupt
mbed_official 235:685d5f11838f 93
mbed_official 235:685d5f11838f 94 (@) You can refer to the IRDA HAL driver header file for more useful macros
mbed_official 235:685d5f11838f 95
mbed_official 235:685d5f11838f 96 @endverbatim
mbed_official 235:685d5f11838f 97 ******************************************************************************
mbed_official 235:685d5f11838f 98 * @attention
mbed_official 235:685d5f11838f 99 *
mbed_official 532:fe11edbda85c 100 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 101 *
mbed_official 235:685d5f11838f 102 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 103 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 104 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 105 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 106 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 107 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 108 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 109 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 110 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 111 * without specific prior written permission.
mbed_official 235:685d5f11838f 112 *
mbed_official 235:685d5f11838f 113 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 114 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 115 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 116 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 117 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 118 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 119 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 120 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 121 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 122 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 123 *
mbed_official 235:685d5f11838f 124 ******************************************************************************
mbed_official 235:685d5f11838f 125 */
mbed_official 235:685d5f11838f 126
mbed_official 235:685d5f11838f 127 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 128 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 129
mbed_official 235:685d5f11838f 130 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 131 * @{
mbed_official 235:685d5f11838f 132 */
mbed_official 235:685d5f11838f 133
mbed_official 532:fe11edbda85c 134 /** @defgroup IRDA IRDA
mbed_official 235:685d5f11838f 135 * @brief HAL IRDA module driver
mbed_official 235:685d5f11838f 136 * @{
mbed_official 235:685d5f11838f 137 */
mbed_official 235:685d5f11838f 138
mbed_official 235:685d5f11838f 139 #ifdef HAL_IRDA_MODULE_ENABLED
mbed_official 235:685d5f11838f 140
mbed_official 235:685d5f11838f 141 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 142 /* Private define ------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 143 /** @addtogroup IRDA_Private_Constants
mbed_official 532:fe11edbda85c 144 * @{
mbed_official 532:fe11edbda85c 145 */
mbed_official 235:685d5f11838f 146 #define IRDA_TIMEOUT_VALUE 22000
mbed_official 532:fe11edbda85c 147 /**
mbed_official 532:fe11edbda85c 148 * @}
mbed_official 532:fe11edbda85c 149 */
mbed_official 235:685d5f11838f 150 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 151 /* Private variables ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 152 /* Private function prototypes -----------------------------------------------*/
mbed_official 532:fe11edbda85c 153 /** @addtogroup IRDA_Private_Functions
mbed_official 532:fe11edbda85c 154 * @{
mbed_official 532:fe11edbda85c 155 */
mbed_official 235:685d5f11838f 156 static void IRDA_SetConfig (IRDA_HandleTypeDef *hirda);
mbed_official 235:685d5f11838f 157 static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda);
mbed_official 532:fe11edbda85c 158 static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda);
mbed_official 235:685d5f11838f 159 static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda);
mbed_official 235:685d5f11838f 160 static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 161 static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 162 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 163 static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 164 static void IRDA_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 165 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Timeout);
mbed_official 532:fe11edbda85c 166 /**
mbed_official 532:fe11edbda85c 167 * @}
mbed_official 532:fe11edbda85c 168 */
mbed_official 532:fe11edbda85c 169 /* Exported functions --------------------------------------------------------*/
mbed_official 532:fe11edbda85c 170 /** @defgroup IRDA_Exported_Functions IrDA Exported Functions
mbed_official 235:685d5f11838f 171 * @{
mbed_official 235:685d5f11838f 172 */
mbed_official 235:685d5f11838f 173
mbed_official 532:fe11edbda85c 174 /** @defgroup IRDA_Exported_Functions_Group1 IrDA Initialization and de-initialization functions
mbed_official 235:685d5f11838f 175 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 176 *
mbed_official 235:685d5f11838f 177 @verbatim
mbed_official 235:685d5f11838f 178
mbed_official 235:685d5f11838f 179 ===============================================================================
mbed_official 235:685d5f11838f 180 ##### Initialization and Configuration functions #####
mbed_official 235:685d5f11838f 181 ===============================================================================
mbed_official 235:685d5f11838f 182 [..]
mbed_official 235:685d5f11838f 183 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
mbed_official 235:685d5f11838f 184 in IrDA mode.
mbed_official 235:685d5f11838f 185 (+) For the asynchronous mode only these parameters can be configured:
mbed_official 235:685d5f11838f 186 (++) BaudRate
mbed_official 235:685d5f11838f 187 (++) WordLength
mbed_official 235:685d5f11838f 188 (++) Parity: If the parity is enabled, then the MSB bit of the data written
mbed_official 235:685d5f11838f 189 in the data register is transmitted but is changed by the parity bit.
mbed_official 235:685d5f11838f 190 Depending on the frame length defined by the M bit (8-bits or 9-bits),
mbed_official 235:685d5f11838f 191 please refer to Reference manual for possible IRDA frame formats.
mbed_official 235:685d5f11838f 192 (++) Prescaler: A pulse of width less than two and greater than one PSC period(s) may or may
mbed_official 235:685d5f11838f 193 not be rejected. The receiver set up time should be managed by software. The IrDA physical layer
mbed_official 235:685d5f11838f 194 specification specifies a minimum of 10 ms delay between transmission and
mbed_official 235:685d5f11838f 195 reception (IrDA is a half duplex protocol).
mbed_official 235:685d5f11838f 196 (++) Mode: Receiver/transmitter modes
mbed_official 235:685d5f11838f 197 (++) IrDAMode: the IrDA can operate in the Normal mode or in the Low power mode.
mbed_official 235:685d5f11838f 198 [..]
mbed_official 235:685d5f11838f 199 The HAL_IRDA_Init() API follows IRDA configuration procedures (details for the procedures
mbed_official 235:685d5f11838f 200 are available in reference manual).
mbed_official 235:685d5f11838f 201
mbed_official 235:685d5f11838f 202 @endverbatim
mbed_official 235:685d5f11838f 203 * @{
mbed_official 235:685d5f11838f 204 */
mbed_official 235:685d5f11838f 205
mbed_official 235:685d5f11838f 206 /**
mbed_official 235:685d5f11838f 207 * @brief Initializes the IRDA mode according to the specified
mbed_official 235:685d5f11838f 208 * parameters in the IRDA_InitTypeDef and create the associated handle.
mbed_official 235:685d5f11838f 209 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 210 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 211 * @retval HAL status
mbed_official 235:685d5f11838f 212 */
mbed_official 235:685d5f11838f 213 HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 214 {
mbed_official 235:685d5f11838f 215 /* Check the IRDA handle allocation */
mbed_official 352:95e80f5e68f6 216 if(hirda == HAL_NULL)
mbed_official 235:685d5f11838f 217 {
mbed_official 235:685d5f11838f 218 return HAL_ERROR;
mbed_official 235:685d5f11838f 219 }
mbed_official 235:685d5f11838f 220
mbed_official 235:685d5f11838f 221 /* Check the IRDA instance parameters */
mbed_official 235:685d5f11838f 222 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 235:685d5f11838f 223 /* Check the IRDA mode parameter in the IRDA handle */
mbed_official 235:685d5f11838f 224 assert_param(IS_IRDA_POWERMODE(hirda->Init.IrDAMode));
mbed_official 235:685d5f11838f 225
mbed_official 235:685d5f11838f 226 if(hirda->State == HAL_IRDA_STATE_RESET)
mbed_official 235:685d5f11838f 227 {
mbed_official 532:fe11edbda85c 228 /* Allocate lock resource and initialize it */
mbed_official 532:fe11edbda85c 229 hirda->Lock = HAL_UNLOCKED;
mbed_official 235:685d5f11838f 230 /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
mbed_official 235:685d5f11838f 231 HAL_IRDA_MspInit(hirda);
mbed_official 235:685d5f11838f 232 }
mbed_official 235:685d5f11838f 233
mbed_official 235:685d5f11838f 234 hirda->State = HAL_IRDA_STATE_BUSY;
mbed_official 235:685d5f11838f 235
mbed_official 235:685d5f11838f 236 /* Disable the IRDA peripheral */
mbed_official 532:fe11edbda85c 237 __HAL_IRDA_DISABLE(hirda);
mbed_official 235:685d5f11838f 238
mbed_official 235:685d5f11838f 239 /* Set the IRDA communication parameters */
mbed_official 235:685d5f11838f 240 IRDA_SetConfig(hirda);
mbed_official 235:685d5f11838f 241
mbed_official 235:685d5f11838f 242 /* In IrDA mode, the following bits must be kept cleared:
mbed_official 235:685d5f11838f 243 - LINEN, STOP and CLKEN bits in the USART_CR2 register,
mbed_official 235:685d5f11838f 244 - SCEN and HDSEL bits in the USART_CR3 register.*/
mbed_official 235:685d5f11838f 245 hirda->Instance->CR2 &= ~(USART_CR2_LINEN | USART_CR2_STOP | USART_CR2_CLKEN);
mbed_official 235:685d5f11838f 246 hirda->Instance->CR3 &= ~(USART_CR3_SCEN | USART_CR3_HDSEL);
mbed_official 235:685d5f11838f 247
mbed_official 235:685d5f11838f 248 /* Enable the IRDA peripheral */
mbed_official 532:fe11edbda85c 249 __HAL_IRDA_ENABLE(hirda);
mbed_official 235:685d5f11838f 250
mbed_official 235:685d5f11838f 251 /* Set the prescaler */
mbed_official 235:685d5f11838f 252 MODIFY_REG(hirda->Instance->GTPR, USART_GTPR_PSC, hirda->Init.Prescaler);
mbed_official 235:685d5f11838f 253
mbed_official 235:685d5f11838f 254 /* Configure the IrDA mode */
mbed_official 235:685d5f11838f 255 MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.IrDAMode);
mbed_official 235:685d5f11838f 256
mbed_official 235:685d5f11838f 257 /* Enable the IrDA mode by setting the IREN bit in the CR3 register */
mbed_official 235:685d5f11838f 258 hirda->Instance->CR3 |= USART_CR3_IREN;
mbed_official 235:685d5f11838f 259
mbed_official 235:685d5f11838f 260 /* Initialize the IRDA state*/
mbed_official 235:685d5f11838f 261 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 262 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 263
mbed_official 235:685d5f11838f 264 return HAL_OK;
mbed_official 235:685d5f11838f 265 }
mbed_official 235:685d5f11838f 266
mbed_official 235:685d5f11838f 267 /**
mbed_official 235:685d5f11838f 268 * @brief DeInitializes the IRDA peripheral
mbed_official 235:685d5f11838f 269 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 270 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 271 * @retval HAL status
mbed_official 235:685d5f11838f 272 */
mbed_official 235:685d5f11838f 273 HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 274 {
mbed_official 235:685d5f11838f 275 /* Check the IRDA handle allocation */
mbed_official 352:95e80f5e68f6 276 if(hirda == HAL_NULL)
mbed_official 235:685d5f11838f 277 {
mbed_official 235:685d5f11838f 278 return HAL_ERROR;
mbed_official 235:685d5f11838f 279 }
mbed_official 235:685d5f11838f 280
mbed_official 235:685d5f11838f 281 /* Check the parameters */
mbed_official 235:685d5f11838f 282 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 235:685d5f11838f 283
mbed_official 235:685d5f11838f 284 hirda->State = HAL_IRDA_STATE_BUSY;
mbed_official 235:685d5f11838f 285
mbed_official 532:fe11edbda85c 286 /* Disable the Peripheral */
mbed_official 532:fe11edbda85c 287 __HAL_IRDA_DISABLE(hirda);
mbed_official 532:fe11edbda85c 288
mbed_official 235:685d5f11838f 289 /* DeInit the low level hardware */
mbed_official 235:685d5f11838f 290 HAL_IRDA_MspDeInit(hirda);
mbed_official 235:685d5f11838f 291
mbed_official 235:685d5f11838f 292 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 293
mbed_official 235:685d5f11838f 294 hirda->State = HAL_IRDA_STATE_RESET;
mbed_official 235:685d5f11838f 295
mbed_official 235:685d5f11838f 296 /* Release Lock */
mbed_official 235:685d5f11838f 297 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 298
mbed_official 235:685d5f11838f 299 return HAL_OK;
mbed_official 235:685d5f11838f 300 }
mbed_official 235:685d5f11838f 301
mbed_official 235:685d5f11838f 302 /**
mbed_official 235:685d5f11838f 303 * @brief IRDA MSP Init.
mbed_official 235:685d5f11838f 304 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 305 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 306 * @retval None
mbed_official 235:685d5f11838f 307 */
mbed_official 235:685d5f11838f 308 __weak void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 309 {
mbed_official 235:685d5f11838f 310 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 311 the HAL_IRDA_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 312 */
mbed_official 235:685d5f11838f 313 }
mbed_official 235:685d5f11838f 314
mbed_official 235:685d5f11838f 315 /**
mbed_official 235:685d5f11838f 316 * @brief IRDA MSP DeInit.
mbed_official 235:685d5f11838f 317 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 318 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 319 * @retval None
mbed_official 235:685d5f11838f 320 */
mbed_official 235:685d5f11838f 321 __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 322 {
mbed_official 235:685d5f11838f 323 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 532:fe11edbda85c 324 the HAL_IRDA_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 325 */
mbed_official 235:685d5f11838f 326 }
mbed_official 235:685d5f11838f 327
mbed_official 235:685d5f11838f 328 /**
mbed_official 235:685d5f11838f 329 * @}
mbed_official 235:685d5f11838f 330 */
mbed_official 235:685d5f11838f 331
mbed_official 532:fe11edbda85c 332 /** @defgroup IRDA_Exported_Functions_Group2 IO operation functions
mbed_official 235:685d5f11838f 333 * @brief IRDA Transmit/Receive functions
mbed_official 235:685d5f11838f 334 *
mbed_official 235:685d5f11838f 335 @verbatim
mbed_official 235:685d5f11838f 336 ===============================================================================
mbed_official 235:685d5f11838f 337 ##### IO operation functions #####
mbed_official 235:685d5f11838f 338 ===============================================================================
mbed_official 235:685d5f11838f 339 This subsection provides a set of functions allowing to manage the IRDA data transfers.
mbed_official 235:685d5f11838f 340 [..]
mbed_official 235:685d5f11838f 341 IrDA is a half duplex communication protocol. If the Transmitter is busy, any data
mbed_official 235:685d5f11838f 342 on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver
mbed_official 235:685d5f11838f 343 is busy, data on the TX from the USART to IrDA will not be encoded by IrDA.
mbed_official 235:685d5f11838f 344 While receiving data, transmission should be avoided as the data to be transmitted
mbed_official 235:685d5f11838f 345 could be corrupted.
mbed_official 235:685d5f11838f 346
mbed_official 235:685d5f11838f 347 (#) There are two modes of transfer:
mbed_official 235:685d5f11838f 348 (++) Blocking mode: The communication is performed in polling mode.
mbed_official 235:685d5f11838f 349 The HAL status of all data processing is returned by the same function
mbed_official 235:685d5f11838f 350 after finishing transfer.
mbed_official 235:685d5f11838f 351 (++) No-Blocking mode: The communication is performed using Interrupts
mbed_official 235:685d5f11838f 352 or DMA, These APIs return the HAL status.
mbed_official 235:685d5f11838f 353 The end of the data processing will be indicated through the
mbed_official 235:685d5f11838f 354 dedicated IRDA IRQ when using Interrupt mode or the DMA IRQ when
mbed_official 235:685d5f11838f 355 using DMA mode.
mbed_official 235:685d5f11838f 356 The HAL_IRDA_TxCpltCallback(), HAL_IRDA_RxCpltCallback() user callbacks
mbed_official 532:fe11edbda85c 357 will be executed respectively at the end of the transmit or Receive process
mbed_official 235:685d5f11838f 358 The HAL_IRDA_ErrorCallback() user callback will be executed when a communication error is detected
mbed_official 235:685d5f11838f 359
mbed_official 235:685d5f11838f 360 (#) Blocking mode API's are :
mbed_official 235:685d5f11838f 361 (++) HAL_IRDA_Transmit()
mbed_official 235:685d5f11838f 362 (++) HAL_IRDA_Receive()
mbed_official 235:685d5f11838f 363
mbed_official 235:685d5f11838f 364 (#) Non Blocking mode APIs with Interrupt are :
mbed_official 235:685d5f11838f 365 (++) HAL_IRDA_Transmit_IT()
mbed_official 235:685d5f11838f 366 (++) HAL_IRDA_Receive_IT()
mbed_official 235:685d5f11838f 367 (++) HAL_IRDA_IRQHandler()
mbed_official 235:685d5f11838f 368
mbed_official 235:685d5f11838f 369 (#) Non Blocking mode functions with DMA are :
mbed_official 235:685d5f11838f 370 (++) HAL_IRDA_Transmit_DMA()
mbed_official 235:685d5f11838f 371 (++) HAL_IRDA_Receive_DMA()
mbed_official 235:685d5f11838f 372
mbed_official 235:685d5f11838f 373 (#) A set of Transfer Complete Callbacks are provided in non Blocking mode:
mbed_official 235:685d5f11838f 374 (++) HAL_IRDA_TxCpltCallback()
mbed_official 235:685d5f11838f 375 (++) HAL_IRDA_RxCpltCallback()
mbed_official 235:685d5f11838f 376 (++) HAL_IRDA_ErrorCallback()
mbed_official 235:685d5f11838f 377
mbed_official 235:685d5f11838f 378 @endverbatim
mbed_official 235:685d5f11838f 379 * @{
mbed_official 235:685d5f11838f 380 */
mbed_official 235:685d5f11838f 381
mbed_official 235:685d5f11838f 382 /**
mbed_official 235:685d5f11838f 383 * @brief Sends an amount of data in blocking mode.
mbed_official 235:685d5f11838f 384 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 385 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 386 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 387 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 388 * @param Timeout: Specify timeout value
mbed_official 235:685d5f11838f 389 * @retval HAL status
mbed_official 235:685d5f11838f 390 */
mbed_official 235:685d5f11838f 391 HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 235:685d5f11838f 392 {
mbed_official 235:685d5f11838f 393 uint16_t* tmp;
mbed_official 235:685d5f11838f 394 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 395
mbed_official 235:685d5f11838f 396 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 397 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 398 {
mbed_official 352:95e80f5e68f6 399 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 400 {
mbed_official 235:685d5f11838f 401 return HAL_ERROR;
mbed_official 235:685d5f11838f 402 }
mbed_official 235:685d5f11838f 403
mbed_official 235:685d5f11838f 404 /* Process Locked */
mbed_official 235:685d5f11838f 405 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 406
mbed_official 235:685d5f11838f 407 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 408 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 409 {
mbed_official 235:685d5f11838f 410 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 411 }
mbed_official 235:685d5f11838f 412 else
mbed_official 235:685d5f11838f 413 {
mbed_official 235:685d5f11838f 414 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 415 }
mbed_official 235:685d5f11838f 416
mbed_official 235:685d5f11838f 417 hirda->TxXferSize = Size;
mbed_official 235:685d5f11838f 418 hirda->TxXferCount = Size;
mbed_official 235:685d5f11838f 419 while(hirda->TxXferCount > 0)
mbed_official 235:685d5f11838f 420 {
mbed_official 235:685d5f11838f 421 hirda->TxXferCount--;
mbed_official 235:685d5f11838f 422 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 423 {
mbed_official 235:685d5f11838f 424 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 425 {
mbed_official 235:685d5f11838f 426 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 427 }
mbed_official 235:685d5f11838f 428 tmp = (uint16_t*) pData;
mbed_official 235:685d5f11838f 429 hirda->Instance->DR = (*tmp & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 430 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 431 {
mbed_official 235:685d5f11838f 432 pData +=2;
mbed_official 235:685d5f11838f 433 }
mbed_official 235:685d5f11838f 434 else
mbed_official 235:685d5f11838f 435 {
mbed_official 235:685d5f11838f 436 pData +=1;
mbed_official 235:685d5f11838f 437 }
mbed_official 235:685d5f11838f 438 }
mbed_official 235:685d5f11838f 439 else
mbed_official 235:685d5f11838f 440 {
mbed_official 235:685d5f11838f 441 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 442 {
mbed_official 235:685d5f11838f 443 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 444 }
mbed_official 235:685d5f11838f 445 hirda->Instance->DR = (*pData++ & (uint8_t)0xFF);
mbed_official 235:685d5f11838f 446 }
mbed_official 235:685d5f11838f 447 }
mbed_official 235:685d5f11838f 448
mbed_official 235:685d5f11838f 449 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TC, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 450 {
mbed_official 235:685d5f11838f 451 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 452 }
mbed_official 235:685d5f11838f 453
mbed_official 235:685d5f11838f 454 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 455 {
mbed_official 235:685d5f11838f 456 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 457 }
mbed_official 235:685d5f11838f 458 else
mbed_official 235:685d5f11838f 459 {
mbed_official 235:685d5f11838f 460 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 461 }
mbed_official 235:685d5f11838f 462
mbed_official 235:685d5f11838f 463 /* Process Unlocked */
mbed_official 235:685d5f11838f 464 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 465
mbed_official 235:685d5f11838f 466 return HAL_OK;
mbed_official 235:685d5f11838f 467 }
mbed_official 235:685d5f11838f 468 else
mbed_official 235:685d5f11838f 469 {
mbed_official 235:685d5f11838f 470 return HAL_BUSY;
mbed_official 235:685d5f11838f 471 }
mbed_official 235:685d5f11838f 472 }
mbed_official 235:685d5f11838f 473
mbed_official 235:685d5f11838f 474 /**
mbed_official 235:685d5f11838f 475 * @brief Receive an amount of data in blocking mode.
mbed_official 235:685d5f11838f 476 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 477 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 478 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 479 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 480 * @param Timeout: Specify timeout value
mbed_official 235:685d5f11838f 481 * @retval HAL status
mbed_official 235:685d5f11838f 482 */
mbed_official 235:685d5f11838f 483 HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 235:685d5f11838f 484 {
mbed_official 235:685d5f11838f 485 uint16_t* tmp;
mbed_official 235:685d5f11838f 486 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 487
mbed_official 235:685d5f11838f 488 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 489 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 490 {
mbed_official 352:95e80f5e68f6 491 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 492 {
mbed_official 235:685d5f11838f 493 return HAL_ERROR;
mbed_official 235:685d5f11838f 494 }
mbed_official 235:685d5f11838f 495
mbed_official 235:685d5f11838f 496 /* Process Locked */
mbed_official 235:685d5f11838f 497 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 498
mbed_official 235:685d5f11838f 499 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 500 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 501 {
mbed_official 235:685d5f11838f 502 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 503 }
mbed_official 235:685d5f11838f 504 else
mbed_official 235:685d5f11838f 505 {
mbed_official 235:685d5f11838f 506 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 507 }
mbed_official 235:685d5f11838f 508 hirda->RxXferSize = Size;
mbed_official 235:685d5f11838f 509 hirda->RxXferCount = Size;
mbed_official 235:685d5f11838f 510 /* Check the remain data to be received */
mbed_official 235:685d5f11838f 511 while(hirda->RxXferCount > 0)
mbed_official 235:685d5f11838f 512 {
mbed_official 235:685d5f11838f 513 hirda->RxXferCount--;
mbed_official 235:685d5f11838f 514 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 515 {
mbed_official 235:685d5f11838f 516 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 517 {
mbed_official 235:685d5f11838f 518 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 519 }
mbed_official 235:685d5f11838f 520 tmp = (uint16_t*) pData ;
mbed_official 235:685d5f11838f 521 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 522 {
mbed_official 235:685d5f11838f 523 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 524 pData +=2;
mbed_official 235:685d5f11838f 525 }
mbed_official 235:685d5f11838f 526 else
mbed_official 235:685d5f11838f 527 {
mbed_official 235:685d5f11838f 528 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x00FF);
mbed_official 235:685d5f11838f 529 pData +=1;
mbed_official 235:685d5f11838f 530 }
mbed_official 235:685d5f11838f 531 }
mbed_official 235:685d5f11838f 532 else
mbed_official 235:685d5f11838f 533 {
mbed_official 235:685d5f11838f 534 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 535 {
mbed_official 235:685d5f11838f 536 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 537 }
mbed_official 235:685d5f11838f 538 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 539 {
mbed_official 235:685d5f11838f 540 *pData++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 541 }
mbed_official 235:685d5f11838f 542 else
mbed_official 235:685d5f11838f 543 {
mbed_official 235:685d5f11838f 544 *pData++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x007F);
mbed_official 235:685d5f11838f 545 }
mbed_official 235:685d5f11838f 546 }
mbed_official 235:685d5f11838f 547 }
mbed_official 235:685d5f11838f 548 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 549 {
mbed_official 235:685d5f11838f 550 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 551 }
mbed_official 235:685d5f11838f 552 else
mbed_official 235:685d5f11838f 553 {
mbed_official 235:685d5f11838f 554 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 555 }
mbed_official 235:685d5f11838f 556
mbed_official 235:685d5f11838f 557 /* Process Unlocked */
mbed_official 235:685d5f11838f 558 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 559
mbed_official 235:685d5f11838f 560 return HAL_OK;
mbed_official 235:685d5f11838f 561 }
mbed_official 235:685d5f11838f 562 else
mbed_official 235:685d5f11838f 563 {
mbed_official 235:685d5f11838f 564 return HAL_BUSY;
mbed_official 235:685d5f11838f 565 }
mbed_official 235:685d5f11838f 566 }
mbed_official 235:685d5f11838f 567
mbed_official 235:685d5f11838f 568 /**
mbed_official 235:685d5f11838f 569 * @brief Send an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 570 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 571 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 572 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 573 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 574 * @retval HAL status
mbed_official 235:685d5f11838f 575 */
mbed_official 235:685d5f11838f 576 HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 577 {
mbed_official 235:685d5f11838f 578 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 579
mbed_official 235:685d5f11838f 580 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 581 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 582 {
mbed_official 352:95e80f5e68f6 583 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 584 {
mbed_official 235:685d5f11838f 585 return HAL_ERROR;
mbed_official 235:685d5f11838f 586 }
mbed_official 235:685d5f11838f 587 /* Process Locked */
mbed_official 235:685d5f11838f 588 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 589
mbed_official 235:685d5f11838f 590 hirda->pTxBuffPtr = pData;
mbed_official 235:685d5f11838f 591 hirda->TxXferSize = Size;
mbed_official 235:685d5f11838f 592 hirda->TxXferCount = Size;
mbed_official 235:685d5f11838f 593 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 594 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 595 {
mbed_official 235:685d5f11838f 596 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 597 }
mbed_official 235:685d5f11838f 598 else
mbed_official 235:685d5f11838f 599 {
mbed_official 235:685d5f11838f 600 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 601 }
mbed_official 235:685d5f11838f 602
mbed_official 532:fe11edbda85c 603 /* Process Unlocked */
mbed_official 532:fe11edbda85c 604 __HAL_UNLOCK(hirda);
mbed_official 532:fe11edbda85c 605
mbed_official 235:685d5f11838f 606 /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 607 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 532:fe11edbda85c 608
mbed_official 235:685d5f11838f 609 /* Enable the IRDA Transmit Data Register Empty Interrupt */
mbed_official 235:685d5f11838f 610 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 235:685d5f11838f 611
mbed_official 235:685d5f11838f 612 return HAL_OK;
mbed_official 235:685d5f11838f 613 }
mbed_official 235:685d5f11838f 614 else
mbed_official 235:685d5f11838f 615 {
mbed_official 235:685d5f11838f 616 return HAL_BUSY;
mbed_official 235:685d5f11838f 617 }
mbed_official 235:685d5f11838f 618 }
mbed_official 235:685d5f11838f 619
mbed_official 235:685d5f11838f 620 /**
mbed_official 235:685d5f11838f 621 * @brief Receives an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 622 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 623 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 624 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 625 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 626 * @retval HAL status
mbed_official 235:685d5f11838f 627 */
mbed_official 235:685d5f11838f 628 HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 629 {
mbed_official 235:685d5f11838f 630 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 631
mbed_official 235:685d5f11838f 632 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 633 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 634 {
mbed_official 352:95e80f5e68f6 635 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 636 {
mbed_official 235:685d5f11838f 637 return HAL_ERROR;
mbed_official 235:685d5f11838f 638 }
mbed_official 235:685d5f11838f 639
mbed_official 235:685d5f11838f 640 /* Process Locked */
mbed_official 235:685d5f11838f 641 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 642
mbed_official 235:685d5f11838f 643 hirda->pRxBuffPtr = pData;
mbed_official 235:685d5f11838f 644 hirda->RxXferSize = Size;
mbed_official 235:685d5f11838f 645 hirda->RxXferCount = Size;
mbed_official 235:685d5f11838f 646 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 647 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 648 {
mbed_official 235:685d5f11838f 649 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 650 }
mbed_official 235:685d5f11838f 651 else
mbed_official 235:685d5f11838f 652 {
mbed_official 235:685d5f11838f 653 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 654 }
mbed_official 235:685d5f11838f 655
mbed_official 532:fe11edbda85c 656 /* Process Unlocked */
mbed_official 532:fe11edbda85c 657 __HAL_UNLOCK(hirda);
mbed_official 532:fe11edbda85c 658
mbed_official 235:685d5f11838f 659 /* Enable the IRDA Data Register not empty Interrupt */
mbed_official 235:685d5f11838f 660 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 532:fe11edbda85c 661
mbed_official 235:685d5f11838f 662 /* Enable the IRDA Parity Error Interrupt */
mbed_official 235:685d5f11838f 663 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_PE);
mbed_official 532:fe11edbda85c 664
mbed_official 235:685d5f11838f 665 /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 666 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 667
mbed_official 235:685d5f11838f 668 return HAL_OK;
mbed_official 235:685d5f11838f 669 }
mbed_official 235:685d5f11838f 670 else
mbed_official 235:685d5f11838f 671 {
mbed_official 235:685d5f11838f 672 return HAL_BUSY;
mbed_official 235:685d5f11838f 673 }
mbed_official 235:685d5f11838f 674 }
mbed_official 235:685d5f11838f 675
mbed_official 235:685d5f11838f 676 /**
mbed_official 235:685d5f11838f 677 * @brief Sends an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 678 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 679 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 680 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 681 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 682 * @retval HAL status
mbed_official 235:685d5f11838f 683 */
mbed_official 235:685d5f11838f 684 HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 685 {
mbed_official 235:685d5f11838f 686 uint32_t *tmp;
mbed_official 235:685d5f11838f 687 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 688
mbed_official 235:685d5f11838f 689 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 690 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 691 {
mbed_official 352:95e80f5e68f6 692 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 693 {
mbed_official 235:685d5f11838f 694 return HAL_ERROR;
mbed_official 235:685d5f11838f 695 }
mbed_official 235:685d5f11838f 696
mbed_official 235:685d5f11838f 697 /* Process Locked */
mbed_official 235:685d5f11838f 698 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 699
mbed_official 235:685d5f11838f 700 hirda->pTxBuffPtr = pData;
mbed_official 235:685d5f11838f 701 hirda->TxXferSize = Size;
mbed_official 235:685d5f11838f 702 hirda->TxXferCount = Size;
mbed_official 235:685d5f11838f 703 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 704
mbed_official 235:685d5f11838f 705 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 706 {
mbed_official 235:685d5f11838f 707 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 708 }
mbed_official 235:685d5f11838f 709 else
mbed_official 235:685d5f11838f 710 {
mbed_official 235:685d5f11838f 711 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 712 }
mbed_official 235:685d5f11838f 713
mbed_official 532:fe11edbda85c 714 /* Set the IRDA DMA transfer complete callback */
mbed_official 235:685d5f11838f 715 hirda->hdmatx->XferCpltCallback = IRDA_DMATransmitCplt;
mbed_official 235:685d5f11838f 716
mbed_official 532:fe11edbda85c 717 /* Set the IRDA DMA half transfer complete callback */
mbed_official 235:685d5f11838f 718 hirda->hdmatx->XferHalfCpltCallback = IRDA_DMATransmitHalfCplt;
mbed_official 235:685d5f11838f 719
mbed_official 235:685d5f11838f 720 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 721 hirda->hdmatx->XferErrorCallback = IRDA_DMAError;
mbed_official 235:685d5f11838f 722
mbed_official 235:685d5f11838f 723 /* Enable the IRDA transmit DMA Stream */
mbed_official 235:685d5f11838f 724 tmp = (uint32_t*)&pData;
mbed_official 235:685d5f11838f 725 HAL_DMA_Start_IT(hirda->hdmatx, *(uint32_t*)tmp, (uint32_t)&hirda->Instance->DR, Size);
mbed_official 235:685d5f11838f 726
mbed_official 532:fe11edbda85c 727 /* Clear the TC flag in the SR register by writing 0 to it */
mbed_official 532:fe11edbda85c 728 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_FLAG_TC);
mbed_official 532:fe11edbda85c 729
mbed_official 235:685d5f11838f 730 /* Enable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 235:685d5f11838f 731 in the USART CR3 register */
mbed_official 235:685d5f11838f 732 hirda->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 733
mbed_official 235:685d5f11838f 734 /* Process Unlocked */
mbed_official 235:685d5f11838f 735 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 736
mbed_official 235:685d5f11838f 737 return HAL_OK;
mbed_official 235:685d5f11838f 738 }
mbed_official 235:685d5f11838f 739 else
mbed_official 235:685d5f11838f 740 {
mbed_official 235:685d5f11838f 741 return HAL_BUSY;
mbed_official 235:685d5f11838f 742 }
mbed_official 235:685d5f11838f 743 }
mbed_official 235:685d5f11838f 744
mbed_official 235:685d5f11838f 745 /**
mbed_official 235:685d5f11838f 746 * @brief Receives an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 747 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 748 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 749 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 750 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 751 * @note When the IRDA parity is enabled (PCE = 1) the data received contain the parity bit.
mbed_official 235:685d5f11838f 752 * @retval HAL status
mbed_official 235:685d5f11838f 753 */
mbed_official 235:685d5f11838f 754 HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 755 {
mbed_official 235:685d5f11838f 756 uint32_t *tmp;
mbed_official 235:685d5f11838f 757 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 758
mbed_official 235:685d5f11838f 759 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 760 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 761 {
mbed_official 352:95e80f5e68f6 762 if((pData == HAL_NULL) || (Size == 0))
mbed_official 235:685d5f11838f 763 {
mbed_official 235:685d5f11838f 764 return HAL_ERROR;
mbed_official 235:685d5f11838f 765 }
mbed_official 235:685d5f11838f 766
mbed_official 235:685d5f11838f 767 /* Process Locked */
mbed_official 235:685d5f11838f 768 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 769
mbed_official 235:685d5f11838f 770 hirda->pRxBuffPtr = pData;
mbed_official 235:685d5f11838f 771 hirda->RxXferSize = Size;
mbed_official 235:685d5f11838f 772 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 235:685d5f11838f 773 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 774 {
mbed_official 235:685d5f11838f 775 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 776 }
mbed_official 235:685d5f11838f 777 else
mbed_official 235:685d5f11838f 778 {
mbed_official 235:685d5f11838f 779 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 780 }
mbed_official 235:685d5f11838f 781
mbed_official 532:fe11edbda85c 782 /* Set the IRDA DMA transfer complete callback */
mbed_official 235:685d5f11838f 783 hirda->hdmarx->XferCpltCallback = IRDA_DMAReceiveCplt;
mbed_official 235:685d5f11838f 784
mbed_official 532:fe11edbda85c 785 /* Set the IRDA DMA half transfer complete callback */
mbed_official 235:685d5f11838f 786 hirda->hdmarx->XferHalfCpltCallback = IRDA_DMAReceiveHalfCplt;
mbed_official 235:685d5f11838f 787
mbed_official 235:685d5f11838f 788 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 789 hirda->hdmarx->XferErrorCallback = IRDA_DMAError;
mbed_official 235:685d5f11838f 790
mbed_official 235:685d5f11838f 791 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 792 tmp = (uint32_t*)&pData;
mbed_official 235:685d5f11838f 793 HAL_DMA_Start_IT(hirda->hdmarx, (uint32_t)&hirda->Instance->DR, *(uint32_t*)tmp, Size);
mbed_official 235:685d5f11838f 794
mbed_official 235:685d5f11838f 795 /* Enable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 235:685d5f11838f 796 in the USART CR3 register */
mbed_official 235:685d5f11838f 797 hirda->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 798
mbed_official 235:685d5f11838f 799 /* Process Unlocked */
mbed_official 235:685d5f11838f 800 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 801
mbed_official 235:685d5f11838f 802 return HAL_OK;
mbed_official 235:685d5f11838f 803 }
mbed_official 235:685d5f11838f 804 else
mbed_official 235:685d5f11838f 805 {
mbed_official 235:685d5f11838f 806 return HAL_BUSY;
mbed_official 235:685d5f11838f 807 }
mbed_official 235:685d5f11838f 808 }
mbed_official 235:685d5f11838f 809
mbed_official 235:685d5f11838f 810 /**
mbed_official 235:685d5f11838f 811 * @brief Pauses the DMA Transfer.
mbed_official 235:685d5f11838f 812 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 813 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 814 * @retval HAL status
mbed_official 235:685d5f11838f 815 */
mbed_official 235:685d5f11838f 816 HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 817 {
mbed_official 235:685d5f11838f 818 /* Process Locked */
mbed_official 235:685d5f11838f 819 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 820
mbed_official 235:685d5f11838f 821 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 822 {
mbed_official 235:685d5f11838f 823 /* Disable the UART DMA Tx request */
mbed_official 235:685d5f11838f 824 hirda->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAT);
mbed_official 235:685d5f11838f 825 }
mbed_official 235:685d5f11838f 826 else if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 827 {
mbed_official 235:685d5f11838f 828 /* Disable the UART DMA Rx request */
mbed_official 235:685d5f11838f 829 hirda->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAR);
mbed_official 235:685d5f11838f 830 }
mbed_official 235:685d5f11838f 831 else if (hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 832 {
mbed_official 235:685d5f11838f 833 /* Disable the UART DMA Tx & Rx requests */
mbed_official 235:685d5f11838f 834 hirda->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAT);
mbed_official 235:685d5f11838f 835 hirda->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAR);
mbed_official 235:685d5f11838f 836 }
mbed_official 532:fe11edbda85c 837 else
mbed_official 532:fe11edbda85c 838 {
mbed_official 532:fe11edbda85c 839 /* Process Unlocked */
mbed_official 532:fe11edbda85c 840 __HAL_UNLOCK(hirda);
mbed_official 532:fe11edbda85c 841
mbed_official 532:fe11edbda85c 842 return HAL_ERROR;
mbed_official 532:fe11edbda85c 843 }
mbed_official 235:685d5f11838f 844
mbed_official 235:685d5f11838f 845 /* Process Unlocked */
mbed_official 235:685d5f11838f 846 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 847
mbed_official 235:685d5f11838f 848 return HAL_OK;
mbed_official 235:685d5f11838f 849 }
mbed_official 235:685d5f11838f 850
mbed_official 235:685d5f11838f 851 /**
mbed_official 235:685d5f11838f 852 * @brief Resumes the DMA Transfer.
mbed_official 235:685d5f11838f 853 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 854 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 855 * @retval HAL status
mbed_official 235:685d5f11838f 856 */
mbed_official 235:685d5f11838f 857 HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 858 {
mbed_official 235:685d5f11838f 859 /* Process Locked */
mbed_official 235:685d5f11838f 860 __HAL_LOCK(hirda);
mbed_official 235:685d5f11838f 861
mbed_official 235:685d5f11838f 862 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 863 {
mbed_official 235:685d5f11838f 864 /* Enable the UART DMA Tx request */
mbed_official 235:685d5f11838f 865 hirda->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 866 }
mbed_official 235:685d5f11838f 867 else if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 868 {
mbed_official 532:fe11edbda85c 869 /* Clear the Overrun flag before resuming the Rx transfer */
mbed_official 235:685d5f11838f 870 __HAL_IRDA_CLEAR_OREFLAG(hirda);
mbed_official 235:685d5f11838f 871 /* Enable the UART DMA Rx request */
mbed_official 235:685d5f11838f 872 hirda->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 873 }
mbed_official 235:685d5f11838f 874 else if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 875 {
mbed_official 532:fe11edbda85c 876 /* Clear the Overrun flag before resuming the Rx transfer */
mbed_official 235:685d5f11838f 877 __HAL_IRDA_CLEAR_OREFLAG(hirda);
mbed_official 235:685d5f11838f 878 /* Enable the UART DMA Tx & Rx request */
mbed_official 235:685d5f11838f 879 hirda->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 880 hirda->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 881 }
mbed_official 532:fe11edbda85c 882 else
mbed_official 532:fe11edbda85c 883 {
mbed_official 532:fe11edbda85c 884 /* Process Unlocked */
mbed_official 532:fe11edbda85c 885 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 886
mbed_official 532:fe11edbda85c 887 return HAL_ERROR;
mbed_official 532:fe11edbda85c 888 }
mbed_official 532:fe11edbda85c 889
mbed_official 235:685d5f11838f 890 /* Process Unlocked */
mbed_official 235:685d5f11838f 891 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 892
mbed_official 235:685d5f11838f 893 return HAL_OK;
mbed_official 235:685d5f11838f 894 }
mbed_official 235:685d5f11838f 895
mbed_official 235:685d5f11838f 896 /**
mbed_official 235:685d5f11838f 897 * @brief Stops the DMA Transfer.
mbed_official 235:685d5f11838f 898 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 899 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 900 * @retval HAL status
mbed_official 235:685d5f11838f 901 */
mbed_official 235:685d5f11838f 902 HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 903 {
mbed_official 235:685d5f11838f 904 /* The Lock is not implemented on this API to allow the user application
mbed_official 235:685d5f11838f 905 to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback():
mbed_official 235:685d5f11838f 906 when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated
mbed_official 235:685d5f11838f 907 and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback()
mbed_official 235:685d5f11838f 908 */
mbed_official 235:685d5f11838f 909
mbed_official 235:685d5f11838f 910 /* Disable the UART Tx/Rx DMA requests */
mbed_official 235:685d5f11838f 911 hirda->Instance->CR3 &= ~USART_CR3_DMAT;
mbed_official 235:685d5f11838f 912 hirda->Instance->CR3 &= ~USART_CR3_DMAR;
mbed_official 235:685d5f11838f 913
mbed_official 235:685d5f11838f 914 /* Abort the UART DMA tx Stream */
mbed_official 352:95e80f5e68f6 915 if(hirda->hdmatx != HAL_NULL)
mbed_official 235:685d5f11838f 916 {
mbed_official 235:685d5f11838f 917 HAL_DMA_Abort(hirda->hdmatx);
mbed_official 235:685d5f11838f 918 }
mbed_official 235:685d5f11838f 919 /* Abort the UART DMA rx Stream */
mbed_official 352:95e80f5e68f6 920 if(hirda->hdmarx != HAL_NULL)
mbed_official 235:685d5f11838f 921 {
mbed_official 235:685d5f11838f 922 HAL_DMA_Abort(hirda->hdmarx);
mbed_official 235:685d5f11838f 923 }
mbed_official 235:685d5f11838f 924
mbed_official 235:685d5f11838f 925 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 926
mbed_official 235:685d5f11838f 927 return HAL_OK;
mbed_official 235:685d5f11838f 928 }
mbed_official 235:685d5f11838f 929
mbed_official 235:685d5f11838f 930 /**
mbed_official 235:685d5f11838f 931 * @brief This function handles IRDA interrupt request.
mbed_official 235:685d5f11838f 932 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 933 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 934 * @retval None
mbed_official 235:685d5f11838f 935 */
mbed_official 235:685d5f11838f 936 void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 937 {
mbed_official 235:685d5f11838f 938 uint32_t tmp1 = 0, tmp2 =0;
mbed_official 235:685d5f11838f 939
mbed_official 235:685d5f11838f 940 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_PE);
mbed_official 235:685d5f11838f 941 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_PE);
mbed_official 235:685d5f11838f 942 /* IRDA parity error interrupt occurred -------------------------------------*/
mbed_official 235:685d5f11838f 943 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 944 {
mbed_official 235:685d5f11838f 945 __HAL_IRDA_CLEAR_PEFLAG(hirda);
mbed_official 235:685d5f11838f 946 hirda->ErrorCode |= HAL_IRDA_ERROR_PE;
mbed_official 235:685d5f11838f 947 }
mbed_official 235:685d5f11838f 948
mbed_official 235:685d5f11838f 949 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_FE);
mbed_official 235:685d5f11838f 950 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 951 /* IRDA frame error interrupt occurred --------------------------------------*/
mbed_official 235:685d5f11838f 952 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 953 {
mbed_official 235:685d5f11838f 954 __HAL_IRDA_CLEAR_FEFLAG(hirda);
mbed_official 235:685d5f11838f 955 hirda->ErrorCode |= HAL_IRDA_ERROR_FE;
mbed_official 235:685d5f11838f 956 }
mbed_official 235:685d5f11838f 957
mbed_official 235:685d5f11838f 958 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_NE);
mbed_official 235:685d5f11838f 959 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 960 /* IRDA noise error interrupt occurred --------------------------------------*/
mbed_official 235:685d5f11838f 961 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 962 {
mbed_official 235:685d5f11838f 963 __HAL_IRDA_CLEAR_NEFLAG(hirda);
mbed_official 235:685d5f11838f 964 hirda->ErrorCode |= HAL_IRDA_ERROR_NE;
mbed_official 235:685d5f11838f 965 }
mbed_official 235:685d5f11838f 966
mbed_official 235:685d5f11838f 967 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_ORE);
mbed_official 235:685d5f11838f 968 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 969 /* IRDA Over-Run interrupt occurred -----------------------------------------*/
mbed_official 235:685d5f11838f 970 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 971 {
mbed_official 235:685d5f11838f 972 __HAL_IRDA_CLEAR_OREFLAG(hirda);
mbed_official 235:685d5f11838f 973 hirda->ErrorCode |= HAL_IRDA_ERROR_ORE;
mbed_official 235:685d5f11838f 974 }
mbed_official 235:685d5f11838f 975
mbed_official 235:685d5f11838f 976 /* Call the Error call Back in case of Errors */
mbed_official 235:685d5f11838f 977 if(hirda->ErrorCode != HAL_IRDA_ERROR_NONE)
mbed_official 235:685d5f11838f 978 {
mbed_official 235:685d5f11838f 979 /* Set the IRDA state ready to be able to start again the process */
mbed_official 235:685d5f11838f 980 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 981 HAL_IRDA_ErrorCallback(hirda);
mbed_official 235:685d5f11838f 982 }
mbed_official 235:685d5f11838f 983
mbed_official 235:685d5f11838f 984 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_RXNE);
mbed_official 235:685d5f11838f 985 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_RXNE);
mbed_official 235:685d5f11838f 986 /* IRDA in mode Receiver ---------------------------------------------------*/
mbed_official 235:685d5f11838f 987 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 988 {
mbed_official 235:685d5f11838f 989 IRDA_Receive_IT(hirda);
mbed_official 235:685d5f11838f 990 }
mbed_official 235:685d5f11838f 991
mbed_official 235:685d5f11838f 992 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_TXE);
mbed_official 235:685d5f11838f 993 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_TXE);
mbed_official 235:685d5f11838f 994 /* IRDA in mode Transmitter ------------------------------------------------*/
mbed_official 235:685d5f11838f 995 if((tmp1 != RESET) &&(tmp2 != RESET))
mbed_official 235:685d5f11838f 996 {
mbed_official 235:685d5f11838f 997 IRDA_Transmit_IT(hirda);
mbed_official 235:685d5f11838f 998 }
mbed_official 532:fe11edbda85c 999
mbed_official 532:fe11edbda85c 1000 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_TC);
mbed_official 532:fe11edbda85c 1001 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_TC);
mbed_official 532:fe11edbda85c 1002 /* IRDA in mode Transmitter (transmission end) -----------------------------*/
mbed_official 532:fe11edbda85c 1003 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 532:fe11edbda85c 1004 {
mbed_official 532:fe11edbda85c 1005 IRDA_EndTransmit_IT(hirda);
mbed_official 532:fe11edbda85c 1006 }
mbed_official 235:685d5f11838f 1007 }
mbed_official 235:685d5f11838f 1008
mbed_official 235:685d5f11838f 1009 /**
mbed_official 235:685d5f11838f 1010 * @brief Tx Transfer complete callbacks.
mbed_official 235:685d5f11838f 1011 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1012 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1013 * @retval None
mbed_official 235:685d5f11838f 1014 */
mbed_official 235:685d5f11838f 1015 __weak void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1016 {
mbed_official 235:685d5f11838f 1017 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1018 the HAL_IRDA_TxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1019 */
mbed_official 235:685d5f11838f 1020 }
mbed_official 235:685d5f11838f 1021
mbed_official 235:685d5f11838f 1022 /**
mbed_official 235:685d5f11838f 1023 * @brief Tx Half Transfer completed callbacks.
mbed_official 235:685d5f11838f 1024 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1025 * the configuration information for the specified USART module.
mbed_official 235:685d5f11838f 1026 * @retval None
mbed_official 235:685d5f11838f 1027 */
mbed_official 235:685d5f11838f 1028 __weak void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1029 {
mbed_official 235:685d5f11838f 1030 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1031 the HAL_IRDA_TxHalfCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1032 */
mbed_official 235:685d5f11838f 1033 }
mbed_official 235:685d5f11838f 1034
mbed_official 235:685d5f11838f 1035 /**
mbed_official 235:685d5f11838f 1036 * @brief Rx Transfer complete callbacks.
mbed_official 235:685d5f11838f 1037 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1038 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1039 * @retval None
mbed_official 235:685d5f11838f 1040 */
mbed_official 235:685d5f11838f 1041 __weak void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1042 {
mbed_official 235:685d5f11838f 1043 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1044 the HAL_IRDA_RxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1045 */
mbed_official 235:685d5f11838f 1046 }
mbed_official 235:685d5f11838f 1047
mbed_official 235:685d5f11838f 1048 /**
mbed_official 235:685d5f11838f 1049 * @brief Rx Half Transfer complete callbacks.
mbed_official 235:685d5f11838f 1050 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1051 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1052 * @retval None
mbed_official 235:685d5f11838f 1053 */
mbed_official 235:685d5f11838f 1054 __weak void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1055 {
mbed_official 235:685d5f11838f 1056 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1057 the HAL_IRDA_RxHalfCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1058 */
mbed_official 235:685d5f11838f 1059 }
mbed_official 235:685d5f11838f 1060
mbed_official 235:685d5f11838f 1061 /**
mbed_official 235:685d5f11838f 1062 * @brief IRDA error callbacks.
mbed_official 235:685d5f11838f 1063 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1064 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1065 * @retval None
mbed_official 235:685d5f11838f 1066 */
mbed_official 235:685d5f11838f 1067 __weak void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1068 {
mbed_official 235:685d5f11838f 1069 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1070 the HAL_IRDA_ErrorCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1071 */
mbed_official 235:685d5f11838f 1072 }
mbed_official 235:685d5f11838f 1073
mbed_official 235:685d5f11838f 1074 /**
mbed_official 235:685d5f11838f 1075 * @}
mbed_official 235:685d5f11838f 1076 */
mbed_official 235:685d5f11838f 1077
mbed_official 532:fe11edbda85c 1078 /** @defgroup IRDA_Exported_Functions_Group3 Peripheral State and Errors functions
mbed_official 235:685d5f11838f 1079 * @brief IRDA State and Errors functions
mbed_official 235:685d5f11838f 1080 *
mbed_official 235:685d5f11838f 1081 @verbatim
mbed_official 235:685d5f11838f 1082 ==============================================================================
mbed_official 235:685d5f11838f 1083 ##### Peripheral State and Errors functions #####
mbed_official 235:685d5f11838f 1084 ==============================================================================
mbed_official 235:685d5f11838f 1085 [..]
mbed_official 235:685d5f11838f 1086 This subsection provides a set of functions allowing to return the State of IrDA
mbed_official 235:685d5f11838f 1087 communication process and also return Peripheral Errors occurred during communication process
mbed_official 235:685d5f11838f 1088 (+) HAL_IRDA_GetState() API can be helpful to check in run-time the state of the IrDA peripheral.
mbed_official 235:685d5f11838f 1089 (+) HAL_IRDA_GetError() check in run-time errors that could be occurred during communication.
mbed_official 235:685d5f11838f 1090
mbed_official 235:685d5f11838f 1091 @endverbatim
mbed_official 235:685d5f11838f 1092 * @{
mbed_official 235:685d5f11838f 1093 */
mbed_official 235:685d5f11838f 1094
mbed_official 235:685d5f11838f 1095 /**
mbed_official 235:685d5f11838f 1096 * @brief Returns the IRDA state.
mbed_official 235:685d5f11838f 1097 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1098 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1099 * @retval HAL state
mbed_official 235:685d5f11838f 1100 */
mbed_official 235:685d5f11838f 1101 HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1102 {
mbed_official 235:685d5f11838f 1103 return hirda->State;
mbed_official 235:685d5f11838f 1104 }
mbed_official 235:685d5f11838f 1105
mbed_official 235:685d5f11838f 1106 /**
mbed_official 235:685d5f11838f 1107 * @brief Return the IARDA error code
mbed_official 235:685d5f11838f 1108 * @param hirda : pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1109 * the configuration information for the specified IRDA.
mbed_official 235:685d5f11838f 1110 * @retval IRDA Error Code
mbed_official 235:685d5f11838f 1111 */
mbed_official 235:685d5f11838f 1112 uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1113 {
mbed_official 235:685d5f11838f 1114 return hirda->ErrorCode;
mbed_official 235:685d5f11838f 1115 }
mbed_official 235:685d5f11838f 1116
mbed_official 235:685d5f11838f 1117 /**
mbed_official 235:685d5f11838f 1118 * @}
mbed_official 235:685d5f11838f 1119 */
mbed_official 235:685d5f11838f 1120
mbed_official 235:685d5f11838f 1121 /**
mbed_official 235:685d5f11838f 1122 * @brief DMA IRDA transmit process complete callback.
mbed_official 235:685d5f11838f 1123 * @param hdma : DMA handle
mbed_official 235:685d5f11838f 1124 * @retval None
mbed_official 235:685d5f11838f 1125 */
mbed_official 235:685d5f11838f 1126 static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1127 {
mbed_official 235:685d5f11838f 1128 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1129 /* DMA Normal mode */
mbed_official 235:685d5f11838f 1130 if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0)
mbed_official 235:685d5f11838f 1131 {
mbed_official 235:685d5f11838f 1132 hirda->TxXferCount = 0;
mbed_official 235:685d5f11838f 1133
mbed_official 235:685d5f11838f 1134 /* Disable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 235:685d5f11838f 1135 in the IRDA CR3 register */
mbed_official 235:685d5f11838f 1136 hirda->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_DMAT);
mbed_official 235:685d5f11838f 1137
mbed_official 532:fe11edbda85c 1138 /* Enable the IRDA Transmit Complete Interrupt */
mbed_official 532:fe11edbda85c 1139 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_TC);
mbed_official 235:685d5f11838f 1140 }
mbed_official 235:685d5f11838f 1141 /* DMA Circular mode */
mbed_official 235:685d5f11838f 1142 else
mbed_official 235:685d5f11838f 1143 {
mbed_official 235:685d5f11838f 1144 HAL_IRDA_TxCpltCallback(hirda);
mbed_official 235:685d5f11838f 1145 }
mbed_official 235:685d5f11838f 1146 }
mbed_official 235:685d5f11838f 1147
mbed_official 235:685d5f11838f 1148 /**
mbed_official 235:685d5f11838f 1149 * @brief DMA IRDA receive process half complete callback
mbed_official 235:685d5f11838f 1150 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1151 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1152 * @retval None
mbed_official 235:685d5f11838f 1153 */
mbed_official 235:685d5f11838f 1154 static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1155 {
mbed_official 235:685d5f11838f 1156 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1157
mbed_official 235:685d5f11838f 1158 HAL_IRDA_TxHalfCpltCallback(hirda);
mbed_official 235:685d5f11838f 1159 }
mbed_official 235:685d5f11838f 1160
mbed_official 235:685d5f11838f 1161 /**
mbed_official 235:685d5f11838f 1162 * @brief DMA IRDA receive process complete callback.
mbed_official 235:685d5f11838f 1163 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1164 * @retval None
mbed_official 235:685d5f11838f 1165 */
mbed_official 235:685d5f11838f 1166 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1167 {
mbed_official 235:685d5f11838f 1168 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1169 /* DMA Normal mode */
mbed_official 235:685d5f11838f 1170 if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0)
mbed_official 235:685d5f11838f 1171 {
mbed_official 235:685d5f11838f 1172 hirda->RxXferCount = 0;
mbed_official 235:685d5f11838f 1173
mbed_official 235:685d5f11838f 1174 /* Disable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 235:685d5f11838f 1175 in the IRDA CR3 register */
mbed_official 235:685d5f11838f 1176 hirda->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_DMAR);
mbed_official 235:685d5f11838f 1177
mbed_official 235:685d5f11838f 1178 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1179 {
mbed_official 235:685d5f11838f 1180 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 1181 }
mbed_official 235:685d5f11838f 1182 else
mbed_official 235:685d5f11838f 1183 {
mbed_official 235:685d5f11838f 1184 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 1185 }
mbed_official 235:685d5f11838f 1186 }
mbed_official 235:685d5f11838f 1187
mbed_official 235:685d5f11838f 1188 HAL_IRDA_RxCpltCallback(hirda);
mbed_official 235:685d5f11838f 1189 }
mbed_official 235:685d5f11838f 1190
mbed_official 235:685d5f11838f 1191 /**
mbed_official 235:685d5f11838f 1192 * @brief DMA IRDA receive process half complete callback
mbed_official 235:685d5f11838f 1193 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1194 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1195 * @retval None
mbed_official 235:685d5f11838f 1196 */
mbed_official 235:685d5f11838f 1197 static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1198 {
mbed_official 235:685d5f11838f 1199 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1200
mbed_official 235:685d5f11838f 1201 HAL_IRDA_RxHalfCpltCallback(hirda);
mbed_official 235:685d5f11838f 1202 }
mbed_official 235:685d5f11838f 1203
mbed_official 235:685d5f11838f 1204 /**
mbed_official 235:685d5f11838f 1205 * @brief DMA IRDA communication error callback.
mbed_official 235:685d5f11838f 1206 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1207 * @retval None
mbed_official 235:685d5f11838f 1208 */
mbed_official 235:685d5f11838f 1209 static void IRDA_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1210 {
mbed_official 235:685d5f11838f 1211 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1212
mbed_official 235:685d5f11838f 1213 hirda->RxXferCount = 0;
mbed_official 235:685d5f11838f 1214 hirda->TxXferCount = 0;
mbed_official 235:685d5f11838f 1215 hirda->ErrorCode |= HAL_IRDA_ERROR_DMA;
mbed_official 235:685d5f11838f 1216 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 1217
mbed_official 235:685d5f11838f 1218 HAL_IRDA_ErrorCallback(hirda);
mbed_official 235:685d5f11838f 1219 }
mbed_official 235:685d5f11838f 1220
mbed_official 235:685d5f11838f 1221 /**
mbed_official 235:685d5f11838f 1222 * @brief This function handles IRDA Communication Timeout.
mbed_official 235:685d5f11838f 1223 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1224 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1225 * @param Flag: specifies the IRDA flag to check.
mbed_official 235:685d5f11838f 1226 * @param Status: The new Flag status (SET or RESET).
mbed_official 235:685d5f11838f 1227 * @param Timeout: Timeout duration
mbed_official 235:685d5f11838f 1228 * @retval HAL status
mbed_official 235:685d5f11838f 1229 */
mbed_official 235:685d5f11838f 1230 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
mbed_official 235:685d5f11838f 1231 {
mbed_official 235:685d5f11838f 1232 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 1233
mbed_official 235:685d5f11838f 1234 /* Get tick */
mbed_official 235:685d5f11838f 1235 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1236
mbed_official 235:685d5f11838f 1237 /* Wait until flag is set */
mbed_official 235:685d5f11838f 1238 if(Status == RESET)
mbed_official 235:685d5f11838f 1239 {
mbed_official 235:685d5f11838f 1240 while(__HAL_IRDA_GET_FLAG(hirda, Flag) == RESET)
mbed_official 235:685d5f11838f 1241 {
mbed_official 235:685d5f11838f 1242 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1243 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1244 {
mbed_official 235:685d5f11838f 1245 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1246 {
mbed_official 235:685d5f11838f 1247 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 235:685d5f11838f 1248 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 235:685d5f11838f 1249 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 235:685d5f11838f 1250 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 235:685d5f11838f 1251 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 1252
mbed_official 235:685d5f11838f 1253 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 1254
mbed_official 235:685d5f11838f 1255 /* Process Unlocked */
mbed_official 235:685d5f11838f 1256 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 1257
mbed_official 235:685d5f11838f 1258 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1259 }
mbed_official 235:685d5f11838f 1260 }
mbed_official 235:685d5f11838f 1261 }
mbed_official 235:685d5f11838f 1262 }
mbed_official 235:685d5f11838f 1263 else
mbed_official 235:685d5f11838f 1264 {
mbed_official 235:685d5f11838f 1265 while(__HAL_IRDA_GET_FLAG(hirda, Flag) != RESET)
mbed_official 235:685d5f11838f 1266 {
mbed_official 235:685d5f11838f 1267 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1268 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1269 {
mbed_official 235:685d5f11838f 1270 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1271 {
mbed_official 235:685d5f11838f 1272 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 235:685d5f11838f 1273 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 235:685d5f11838f 1274 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 235:685d5f11838f 1275 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 235:685d5f11838f 1276 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 1277
mbed_official 235:685d5f11838f 1278 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 1279
mbed_official 235:685d5f11838f 1280 /* Process Unlocked */
mbed_official 235:685d5f11838f 1281 __HAL_UNLOCK(hirda);
mbed_official 235:685d5f11838f 1282
mbed_official 235:685d5f11838f 1283 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1284 }
mbed_official 235:685d5f11838f 1285 }
mbed_official 235:685d5f11838f 1286 }
mbed_official 235:685d5f11838f 1287 }
mbed_official 235:685d5f11838f 1288 return HAL_OK;
mbed_official 235:685d5f11838f 1289 }
mbed_official 235:685d5f11838f 1290
mbed_official 235:685d5f11838f 1291 /**
mbed_official 235:685d5f11838f 1292 * @brief Send an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 1293 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1294 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1295 * @retval HAL status
mbed_official 235:685d5f11838f 1296 */
mbed_official 235:685d5f11838f 1297 static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1298 {
mbed_official 235:685d5f11838f 1299 uint16_t* tmp;
mbed_official 235:685d5f11838f 1300 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 1301
mbed_official 235:685d5f11838f 1302 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 1303 if((tmp1 == HAL_IRDA_STATE_BUSY_TX) || (tmp1 == HAL_IRDA_STATE_BUSY_TX_RX))
mbed_official 235:685d5f11838f 1304 {
mbed_official 235:685d5f11838f 1305 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 1306 {
mbed_official 235:685d5f11838f 1307 tmp = (uint16_t*) hirda->pTxBuffPtr;
mbed_official 235:685d5f11838f 1308 hirda->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 1309 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 1310 {
mbed_official 235:685d5f11838f 1311 hirda->pTxBuffPtr += 2;
mbed_official 235:685d5f11838f 1312 }
mbed_official 235:685d5f11838f 1313 else
mbed_official 235:685d5f11838f 1314 {
mbed_official 235:685d5f11838f 1315 hirda->pTxBuffPtr += 1;
mbed_official 235:685d5f11838f 1316 }
mbed_official 235:685d5f11838f 1317 }
mbed_official 235:685d5f11838f 1318 else
mbed_official 235:685d5f11838f 1319 {
mbed_official 235:685d5f11838f 1320 hirda->Instance->DR = (uint8_t)(*hirda->pTxBuffPtr++ & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 1321 }
mbed_official 235:685d5f11838f 1322
mbed_official 235:685d5f11838f 1323 if(--hirda->TxXferCount == 0)
mbed_official 235:685d5f11838f 1324 {
mbed_official 235:685d5f11838f 1325 /* Disable the IRDA Transmit Data Register Empty Interrupt */
mbed_official 235:685d5f11838f 1326 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 235:685d5f11838f 1327
mbed_official 532:fe11edbda85c 1328 /* Enable the IRDA Transmit Complete Interrupt */
mbed_official 532:fe11edbda85c 1329 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_TC);
mbed_official 235:685d5f11838f 1330 }
mbed_official 235:685d5f11838f 1331
mbed_official 235:685d5f11838f 1332 return HAL_OK;
mbed_official 235:685d5f11838f 1333 }
mbed_official 235:685d5f11838f 1334 else
mbed_official 235:685d5f11838f 1335 {
mbed_official 532:fe11edbda85c 1336 return HAL_BUSY;
mbed_official 235:685d5f11838f 1337 }
mbed_official 235:685d5f11838f 1338 }
mbed_official 235:685d5f11838f 1339
mbed_official 235:685d5f11838f 1340 /**
mbed_official 532:fe11edbda85c 1341 * @brief Wraps up transmission in non blocking mode.
mbed_official 532:fe11edbda85c 1342 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 532:fe11edbda85c 1343 * the configuration information for the specified IRDA module.
mbed_official 532:fe11edbda85c 1344 * @retval HAL status
mbed_official 532:fe11edbda85c 1345 */
mbed_official 532:fe11edbda85c 1346 static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda)
mbed_official 532:fe11edbda85c 1347 {
mbed_official 532:fe11edbda85c 1348 /* Disable the IRDA Transmit Complete Interrupt */
mbed_official 532:fe11edbda85c 1349 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TC);
mbed_official 532:fe11edbda85c 1350
mbed_official 532:fe11edbda85c 1351 /* Check if a receive process is ongoing or not */
mbed_official 532:fe11edbda85c 1352 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 532:fe11edbda85c 1353 {
mbed_official 532:fe11edbda85c 1354 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 532:fe11edbda85c 1355 }
mbed_official 532:fe11edbda85c 1356 else
mbed_official 532:fe11edbda85c 1357 {
mbed_official 532:fe11edbda85c 1358 /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 532:fe11edbda85c 1359 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 532:fe11edbda85c 1360
mbed_official 532:fe11edbda85c 1361 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 532:fe11edbda85c 1362 }
mbed_official 532:fe11edbda85c 1363
mbed_official 532:fe11edbda85c 1364 HAL_IRDA_TxCpltCallback(hirda);
mbed_official 532:fe11edbda85c 1365
mbed_official 532:fe11edbda85c 1366 return HAL_OK;
mbed_official 532:fe11edbda85c 1367 }
mbed_official 532:fe11edbda85c 1368
mbed_official 532:fe11edbda85c 1369 /**
mbed_official 235:685d5f11838f 1370 * @brief Receives an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 1371 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1372 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1373 * @retval HAL status
mbed_official 235:685d5f11838f 1374 */
mbed_official 235:685d5f11838f 1375 static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1376 {
mbed_official 235:685d5f11838f 1377 uint16_t* tmp;
mbed_official 235:685d5f11838f 1378 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 1379
mbed_official 235:685d5f11838f 1380 tmp1 = hirda->State;
mbed_official 235:685d5f11838f 1381 if((tmp1 == HAL_IRDA_STATE_BUSY_RX) || (tmp1 == HAL_IRDA_STATE_BUSY_TX_RX))
mbed_official 235:685d5f11838f 1382 {
mbed_official 235:685d5f11838f 1383 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 1384 {
mbed_official 235:685d5f11838f 1385 tmp = (uint16_t*) hirda->pRxBuffPtr;
mbed_official 235:685d5f11838f 1386 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 1387 {
mbed_official 235:685d5f11838f 1388 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 1389 hirda->pRxBuffPtr += 2;
mbed_official 235:685d5f11838f 1390 }
mbed_official 235:685d5f11838f 1391 else
mbed_official 235:685d5f11838f 1392 {
mbed_official 235:685d5f11838f 1393 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x00FF);
mbed_official 235:685d5f11838f 1394 hirda->pRxBuffPtr += 1;
mbed_official 235:685d5f11838f 1395 }
mbed_official 235:685d5f11838f 1396 }
mbed_official 235:685d5f11838f 1397 else
mbed_official 235:685d5f11838f 1398 {
mbed_official 235:685d5f11838f 1399 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 235:685d5f11838f 1400 {
mbed_official 235:685d5f11838f 1401 *hirda->pRxBuffPtr++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 1402 }
mbed_official 235:685d5f11838f 1403 else
mbed_official 235:685d5f11838f 1404 {
mbed_official 235:685d5f11838f 1405 *hirda->pRxBuffPtr++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x007F);
mbed_official 235:685d5f11838f 1406 }
mbed_official 235:685d5f11838f 1407 }
mbed_official 235:685d5f11838f 1408
mbed_official 235:685d5f11838f 1409 if(--hirda->RxXferCount == 0)
mbed_official 235:685d5f11838f 1410 {
mbed_official 235:685d5f11838f 1411
mbed_official 235:685d5f11838f 1412 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 235:685d5f11838f 1413
mbed_official 235:685d5f11838f 1414 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1415 {
mbed_official 235:685d5f11838f 1416 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 1417 }
mbed_official 235:685d5f11838f 1418 else
mbed_official 235:685d5f11838f 1419 {
mbed_official 235:685d5f11838f 1420 /* Disable the IRDA Parity Error Interrupt */
mbed_official 235:685d5f11838f 1421 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 235:685d5f11838f 1422
mbed_official 235:685d5f11838f 1423 /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 1424 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 235:685d5f11838f 1425
mbed_official 235:685d5f11838f 1426 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 235:685d5f11838f 1427 }
mbed_official 235:685d5f11838f 1428 HAL_IRDA_RxCpltCallback(hirda);
mbed_official 235:685d5f11838f 1429
mbed_official 235:685d5f11838f 1430 return HAL_OK;
mbed_official 235:685d5f11838f 1431 }
mbed_official 235:685d5f11838f 1432 return HAL_OK;
mbed_official 235:685d5f11838f 1433 }
mbed_official 235:685d5f11838f 1434 else
mbed_official 235:685d5f11838f 1435 {
mbed_official 235:685d5f11838f 1436 return HAL_BUSY;
mbed_official 235:685d5f11838f 1437 }
mbed_official 235:685d5f11838f 1438 }
mbed_official 235:685d5f11838f 1439
mbed_official 235:685d5f11838f 1440 /**
mbed_official 235:685d5f11838f 1441 * @brief Configures the IRDA peripheral.
mbed_official 235:685d5f11838f 1442 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1443 * the configuration information for the specified IRDA module.
mbed_official 235:685d5f11838f 1444 * @retval None
mbed_official 235:685d5f11838f 1445 */
mbed_official 235:685d5f11838f 1446 static void IRDA_SetConfig(IRDA_HandleTypeDef *hirda)
mbed_official 235:685d5f11838f 1447 {
mbed_official 235:685d5f11838f 1448 uint32_t tmpreg = 0x00;
mbed_official 235:685d5f11838f 1449
mbed_official 235:685d5f11838f 1450 /* Check the parameters */
mbed_official 235:685d5f11838f 1451 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 235:685d5f11838f 1452 assert_param(IS_IRDA_BAUDRATE(hirda->Init.BaudRate));
mbed_official 235:685d5f11838f 1453 assert_param(IS_IRDA_WORD_LENGTH(hirda->Init.WordLength));
mbed_official 235:685d5f11838f 1454 assert_param(IS_IRDA_PARITY(hirda->Init.Parity));
mbed_official 235:685d5f11838f 1455 assert_param(IS_IRDA_MODE(hirda->Init.Mode));
mbed_official 235:685d5f11838f 1456
mbed_official 235:685d5f11838f 1457 /*-------------------------- IRDA CR2 Configuration ------------------------*/
mbed_official 235:685d5f11838f 1458 /* Clear STOP[13:12] bits */
mbed_official 235:685d5f11838f 1459 hirda->Instance->CR2 &= (uint32_t)~((uint32_t)USART_CR2_STOP);
mbed_official 235:685d5f11838f 1460
mbed_official 235:685d5f11838f 1461 /*-------------------------- USART CR1 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1462 tmpreg = hirda->Instance->CR1;
mbed_official 235:685d5f11838f 1463
mbed_official 235:685d5f11838f 1464 /* Clear M, PCE, PS, TE and RE bits */
mbed_official 235:685d5f11838f 1465 tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | \
mbed_official 235:685d5f11838f 1466 USART_CR1_RE));
mbed_official 235:685d5f11838f 1467
mbed_official 235:685d5f11838f 1468 /* Configure the USART Word Length, Parity and mode:
mbed_official 235:685d5f11838f 1469 Set the M bits according to hirda->Init.WordLength value
mbed_official 235:685d5f11838f 1470 Set PCE and PS bits according to hirda->Init.Parity value
mbed_official 235:685d5f11838f 1471 Set TE and RE bits according to hirda->Init.Mode value */
mbed_official 235:685d5f11838f 1472 tmpreg |= (uint32_t)hirda->Init.WordLength | hirda->Init.Parity | hirda->Init.Mode;
mbed_official 235:685d5f11838f 1473
mbed_official 235:685d5f11838f 1474 /* Write to USART CR1 */
mbed_official 235:685d5f11838f 1475 hirda->Instance->CR1 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1476
mbed_official 235:685d5f11838f 1477 /*-------------------------- USART CR3 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1478 /* Clear CTSE and RTSE bits */
mbed_official 235:685d5f11838f 1479 hirda->Instance->CR3 &= (uint32_t)~((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE));
mbed_official 235:685d5f11838f 1480
mbed_official 235:685d5f11838f 1481 /*-------------------------- USART BRR Configuration -----------------------*/
mbed_official 235:685d5f11838f 1482 if((hirda->Instance == USART1) || (hirda->Instance == USART6))
mbed_official 235:685d5f11838f 1483 {
mbed_official 532:fe11edbda85c 1484 hirda->Instance->BRR = IRDA_BRR(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate);
mbed_official 235:685d5f11838f 1485 }
mbed_official 235:685d5f11838f 1486 else
mbed_official 235:685d5f11838f 1487 {
mbed_official 532:fe11edbda85c 1488 hirda->Instance->BRR = IRDA_BRR(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate);
mbed_official 235:685d5f11838f 1489 }
mbed_official 235:685d5f11838f 1490 }
mbed_official 235:685d5f11838f 1491 /**
mbed_official 235:685d5f11838f 1492 * @}
mbed_official 235:685d5f11838f 1493 */
mbed_official 235:685d5f11838f 1494
mbed_official 532:fe11edbda85c 1495 #endif /* HAL_IRDA_MODULE_ENABLED */
mbed_official 532:fe11edbda85c 1496 /**
mbed_official 532:fe11edbda85c 1497 * @}
mbed_official 532:fe11edbda85c 1498 */
mbed_official 532:fe11edbda85c 1499
mbed_official 235:685d5f11838f 1500 /**
mbed_official 235:685d5f11838f 1501 * @}
mbed_official 235:685d5f11838f 1502 */
mbed_official 235:685d5f11838f 1503
mbed_official 235:685d5f11838f 1504 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/