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:
Mon Oct 27 09:45:07 2014 +0000
Revision:
369:2e96f1b71984
Parent:
226:b062af740e40
Synchronized with git revision 2d1f64de28cfb25c0e602532e3ce5ad1d9accbed

Full URL: https://github.com/mbedmicro/mbed/commit/2d1f64de28cfb25c0e602532e3ce5ad1d9accbed/

CMSIS: NUCLEO_F401RE - Update STM32Cube driver

Who changed what in which revision?

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