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:
Wed Jun 11 09:45:09 2014 +0100
Revision:
226:b062af740e40
Parent:
106:ced8cbb51063
Child:
369:2e96f1b71984
Synchronized with git revision 42deb9ac55f9bdf9835e9c41dc757117d344ffda

Full URL: https://github.com/mbedmicro/mbed/commit/42deb9ac55f9bdf9835e9c41dc757117d344ffda/

[NUCLEO_F401RE] Remove call to Systick + bug fixes

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 226:b062af740e40 5 * @version V1.1.0RC2
mbed_official 226:b062af740e40 6 * @date 14-May-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 87:085cde657901 151 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma);
mbed_official 87:085cde657901 152 static void IRDA_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 87:085cde657901 153 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Timeout);
mbed_official 87:085cde657901 154
mbed_official 87:085cde657901 155 /* Private functions ---------------------------------------------------------*/
mbed_official 87:085cde657901 156
mbed_official 87:085cde657901 157 /** @defgroup IRDA_Private_Functions
mbed_official 87:085cde657901 158 * @{
mbed_official 87:085cde657901 159 */
mbed_official 87:085cde657901 160
mbed_official 87:085cde657901 161 /** @defgroup IRDA_Group1 IrDA Initialization and de-initialization functions
mbed_official 87:085cde657901 162 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 163 *
mbed_official 87:085cde657901 164 @verbatim
mbed_official 87:085cde657901 165
mbed_official 87:085cde657901 166 ===============================================================================
mbed_official 87:085cde657901 167 ##### Initialization and Configuration functions #####
mbed_official 87:085cde657901 168 ===============================================================================
mbed_official 87:085cde657901 169 [..]
mbed_official 87:085cde657901 170 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
mbed_official 87:085cde657901 171 in IrDA mode.
mbed_official 87:085cde657901 172 (+) For the asynchronous mode only these parameters can be configured:
mbed_official 87:085cde657901 173 (++) BaudRate
mbed_official 87:085cde657901 174 (++) WordLength
mbed_official 87:085cde657901 175 (++) Parity: If the parity is enabled, then the MSB bit of the data written
mbed_official 87:085cde657901 176 in the data register is transmitted but is changed by the parity bit.
mbed_official 87:085cde657901 177 Depending on the frame length defined by the M bit (8-bits or 9-bits),
mbed_official 226:b062af740e40 178 please refer to Reference manual for possible IRDA frame formats.
mbed_official 87:085cde657901 179 (++) Prescaler: A pulse of width less than two and greater than one PSC period(s) may or may
mbed_official 87:085cde657901 180 not be rejected. The receiver set up time should be managed by software. The IrDA physical layer
mbed_official 87:085cde657901 181 specification specifies a minimum of 10 ms delay between transmission and
mbed_official 87:085cde657901 182 reception (IrDA is a half duplex protocol).
mbed_official 87:085cde657901 183 (++) Mode: Receiver/transmitter modes
mbed_official 87:085cde657901 184 (++) IrDAMode: the IrDA can operate in the Normal mode or in the Low power mode.
mbed_official 87:085cde657901 185 [..]
mbed_official 87:085cde657901 186 The HAL_IRDA_Init() API follows IRDA configuration procedures (details for the procedures
mbed_official 87:085cde657901 187 are available in reference manual).
mbed_official 87:085cde657901 188
mbed_official 87:085cde657901 189 @endverbatim
mbed_official 87:085cde657901 190 * @{
mbed_official 87:085cde657901 191 */
mbed_official 87:085cde657901 192
mbed_official 87:085cde657901 193 /**
mbed_official 87:085cde657901 194 * @brief Initializes the IRDA mode according to the specified
mbed_official 87:085cde657901 195 * parameters in the IRDA_InitTypeDef and create the associated handle.
mbed_official 226:b062af740e40 196 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 197 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 198 * @retval HAL status
mbed_official 87:085cde657901 199 */
mbed_official 87:085cde657901 200 HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 201 {
mbed_official 87:085cde657901 202 /* Check the IRDA handle allocation */
mbed_official 87:085cde657901 203 if(hirda == NULL)
mbed_official 87:085cde657901 204 {
mbed_official 87:085cde657901 205 return HAL_ERROR;
mbed_official 87:085cde657901 206 }
mbed_official 87:085cde657901 207
mbed_official 87:085cde657901 208 /* Check the IRDA instance parameters */
mbed_official 87:085cde657901 209 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 87:085cde657901 210 /* Check the IRDA mode parameter in the IRDA handle */
mbed_official 87:085cde657901 211 assert_param(IS_IRDA_POWERMODE(hirda->Init.IrDAMode));
mbed_official 87:085cde657901 212
mbed_official 87:085cde657901 213 if(hirda->State == HAL_IRDA_STATE_RESET)
mbed_official 87:085cde657901 214 {
mbed_official 87:085cde657901 215 /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
mbed_official 87:085cde657901 216 HAL_IRDA_MspInit(hirda);
mbed_official 87:085cde657901 217 }
mbed_official 87:085cde657901 218
mbed_official 87:085cde657901 219 hirda->State = HAL_IRDA_STATE_BUSY;
mbed_official 87:085cde657901 220
mbed_official 87:085cde657901 221 /* Disable the IRDA peripheral */
mbed_official 87:085cde657901 222 __IRDA_DISABLE(hirda);
mbed_official 87:085cde657901 223
mbed_official 87:085cde657901 224 /* Set the IRDA communication parameters */
mbed_official 87:085cde657901 225 IRDA_SetConfig(hirda);
mbed_official 87:085cde657901 226
mbed_official 87:085cde657901 227 /* In IrDA mode, the following bits must be kept cleared:
mbed_official 87:085cde657901 228 - LINEN, STOP and CLKEN bits in the USART_CR2 register,
mbed_official 87:085cde657901 229 - SCEN and HDSEL bits in the USART_CR3 register.*/
mbed_official 87:085cde657901 230 hirda->Instance->CR2 &= ~(USART_CR2_LINEN | USART_CR2_STOP | USART_CR2_CLKEN);
mbed_official 87:085cde657901 231 hirda->Instance->CR3 &= ~(USART_CR3_SCEN | USART_CR3_HDSEL);
mbed_official 87:085cde657901 232
mbed_official 87:085cde657901 233 /* Enable the IRDA peripheral */
mbed_official 87:085cde657901 234 __IRDA_ENABLE(hirda);
mbed_official 87:085cde657901 235
mbed_official 87:085cde657901 236 /* Set the prescaler */
mbed_official 87:085cde657901 237 MODIFY_REG(hirda->Instance->GTPR, USART_GTPR_PSC, hirda->Init.Prescaler);
mbed_official 87:085cde657901 238
mbed_official 87:085cde657901 239 /* Configure the IrDA mode */
mbed_official 87:085cde657901 240 MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.IrDAMode);
mbed_official 87:085cde657901 241
mbed_official 87:085cde657901 242 /* Enable the IrDA mode by setting the IREN bit in the CR3 register */
mbed_official 87:085cde657901 243 hirda->Instance->CR3 |= USART_CR3_IREN;
mbed_official 87:085cde657901 244
mbed_official 87:085cde657901 245 /* Initialize the IRDA state*/
mbed_official 87:085cde657901 246 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 247 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 248
mbed_official 87:085cde657901 249 return HAL_OK;
mbed_official 87:085cde657901 250 }
mbed_official 87:085cde657901 251
mbed_official 87:085cde657901 252 /**
mbed_official 87:085cde657901 253 * @brief DeInitializes the IRDA peripheral
mbed_official 226:b062af740e40 254 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 255 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 256 * @retval HAL status
mbed_official 87:085cde657901 257 */
mbed_official 87:085cde657901 258 HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 259 {
mbed_official 87:085cde657901 260 /* Check the IRDA handle allocation */
mbed_official 87:085cde657901 261 if(hirda == NULL)
mbed_official 87:085cde657901 262 {
mbed_official 87:085cde657901 263 return HAL_ERROR;
mbed_official 87:085cde657901 264 }
mbed_official 87:085cde657901 265
mbed_official 87:085cde657901 266 /* Check the parameters */
mbed_official 87:085cde657901 267 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 87:085cde657901 268
mbed_official 87:085cde657901 269 hirda->State = HAL_IRDA_STATE_BUSY;
mbed_official 87:085cde657901 270
mbed_official 87:085cde657901 271 /* DeInit the low level hardware */
mbed_official 87:085cde657901 272 HAL_IRDA_MspDeInit(hirda);
mbed_official 87:085cde657901 273
mbed_official 106:ced8cbb51063 274 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 106:ced8cbb51063 275
mbed_official 87:085cde657901 276 hirda->State = HAL_IRDA_STATE_RESET;
mbed_official 106:ced8cbb51063 277
mbed_official 106:ced8cbb51063 278 /* Release Lock */
mbed_official 106:ced8cbb51063 279 __HAL_UNLOCK(hirda);
mbed_official 106:ced8cbb51063 280
mbed_official 87:085cde657901 281 return HAL_OK;
mbed_official 87:085cde657901 282 }
mbed_official 87:085cde657901 283
mbed_official 87:085cde657901 284 /**
mbed_official 87:085cde657901 285 * @brief IRDA MSP Init.
mbed_official 226:b062af740e40 286 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 287 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 288 * @retval None
mbed_official 87:085cde657901 289 */
mbed_official 87:085cde657901 290 __weak void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 291 {
mbed_official 87:085cde657901 292 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 293 the HAL_IRDA_MspInit could be implenetd in the user file
mbed_official 87:085cde657901 294 */
mbed_official 87:085cde657901 295 }
mbed_official 87:085cde657901 296
mbed_official 87:085cde657901 297 /**
mbed_official 87:085cde657901 298 * @brief IRDA MSP DeInit.
mbed_official 226:b062af740e40 299 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 300 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 301 * @retval None
mbed_official 87:085cde657901 302 */
mbed_official 87:085cde657901 303 __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 304 {
mbed_official 87:085cde657901 305 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 306 the HAL_IRDA_MspDeInit could be implenetd in the user file
mbed_official 87:085cde657901 307 */
mbed_official 87:085cde657901 308 }
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 /** @defgroup IRDA_Group2 IO operation functions
mbed_official 87:085cde657901 315 * @brief IRDA Transmit/Receive functions
mbed_official 87:085cde657901 316 *
mbed_official 87:085cde657901 317 @verbatim
mbed_official 87:085cde657901 318 ===============================================================================
mbed_official 87:085cde657901 319 ##### IO operation functions #####
mbed_official 87:085cde657901 320 ===============================================================================
mbed_official 87:085cde657901 321 This subsection provides a set of functions allowing to manage the IRDA data transfers.
mbed_official 87:085cde657901 322 [..]
mbed_official 87:085cde657901 323 IrDA is a half duplex communication protocol. If the Transmitter is busy, any data
mbed_official 87:085cde657901 324 on the IrDA receive line will be ignored by the IrDA decoder and if the Receiver
mbed_official 87:085cde657901 325 is busy, data on the TX from the USART to IrDA will not be encoded by IrDA.
mbed_official 87:085cde657901 326 While receiving data, transmission should be avoided as the data to be transmitted
mbed_official 87:085cde657901 327 could be corrupted.
mbed_official 87:085cde657901 328
mbed_official 226:b062af740e40 329 (#) There are two modes of transfer:
mbed_official 87:085cde657901 330 (++) Blocking mode: The communication is performed in polling mode.
mbed_official 87:085cde657901 331 The HAL status of all data processing is returned by the same function
mbed_official 87:085cde657901 332 after finishing transfer.
mbed_official 87:085cde657901 333 (++) No-Blocking mode: The communication is performed using Interrupts
mbed_official 226:b062af740e40 334 or DMA, These APIs return the HAL status.
mbed_official 87:085cde657901 335 The end of the data processing will be indicated through the
mbed_official 87:085cde657901 336 dedicated IRDA IRQ when using Interrupt mode or the DMA IRQ when
mbed_official 87:085cde657901 337 using DMA mode.
mbed_official 87:085cde657901 338 The HAL_IRDA_TxCpltCallback(), HAL_IRDA_RxCpltCallback() user callbacks
mbed_official 87:085cde657901 339 will be executed respectivelly at the end of the transmit or Receive process
mbed_official 226:b062af740e40 340 The HAL_IRDA_ErrorCallback() user callback will be executed when a communication error is detected
mbed_official 87:085cde657901 341
mbed_official 87:085cde657901 342 (#) Blocking mode API's are :
mbed_official 87:085cde657901 343 (++) HAL_IRDA_Transmit()
mbed_official 87:085cde657901 344 (++) HAL_IRDA_Receive()
mbed_official 87:085cde657901 345
mbed_official 226:b062af740e40 346 (#) Non Blocking mode APIs with Interrupt are :
mbed_official 87:085cde657901 347 (++) HAL_IRDA_Transmit_IT()
mbed_official 87:085cde657901 348 (++) HAL_IRDA_Receive_IT()
mbed_official 87:085cde657901 349 (++) HAL_IRDA_IRQHandler()
mbed_official 87:085cde657901 350
mbed_official 226:b062af740e40 351 (#) Non Blocking mode functions with DMA are :
mbed_official 87:085cde657901 352 (++) HAL_IRDA_Transmit_DMA()
mbed_official 87:085cde657901 353 (++) HAL_IRDA_Receive_DMA()
mbed_official 87:085cde657901 354
mbed_official 226:b062af740e40 355 (#) A set of Transfer Complete Callbacks are provided in non Blocking mode:
mbed_official 87:085cde657901 356 (++) HAL_IRDA_TxCpltCallback()
mbed_official 87:085cde657901 357 (++) HAL_IRDA_RxCpltCallback()
mbed_official 87:085cde657901 358 (++) HAL_IRDA_ErrorCallback()
mbed_official 87:085cde657901 359
mbed_official 87:085cde657901 360 @endverbatim
mbed_official 87:085cde657901 361 * @{
mbed_official 87:085cde657901 362 */
mbed_official 87:085cde657901 363
mbed_official 87:085cde657901 364 /**
mbed_official 87:085cde657901 365 * @brief Sends an amount of data in blocking mode.
mbed_official 226:b062af740e40 366 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 367 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 368 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 369 * @param Size: Amount of data to be sent
mbed_official 87:085cde657901 370 * @param Timeout: Specify timeout value
mbed_official 87:085cde657901 371 * @retval HAL status
mbed_official 87:085cde657901 372 */
mbed_official 87:085cde657901 373 HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 87:085cde657901 374 {
mbed_official 87:085cde657901 375 uint16_t* tmp;
mbed_official 87:085cde657901 376 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 377
mbed_official 87:085cde657901 378 tmp1 = hirda->State;
mbed_official 87:085cde657901 379 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 87:085cde657901 380 {
mbed_official 87:085cde657901 381 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 382 {
mbed_official 87:085cde657901 383 return HAL_ERROR;
mbed_official 87:085cde657901 384 }
mbed_official 87:085cde657901 385
mbed_official 87:085cde657901 386 /* Process Locked */
mbed_official 87:085cde657901 387 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 388
mbed_official 87:085cde657901 389 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 390 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 87:085cde657901 391 {
mbed_official 87:085cde657901 392 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 393 }
mbed_official 87:085cde657901 394 else
mbed_official 87:085cde657901 395 {
mbed_official 87:085cde657901 396 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 397 }
mbed_official 87:085cde657901 398
mbed_official 87:085cde657901 399 hirda->TxXferSize = Size;
mbed_official 87:085cde657901 400 hirda->TxXferCount = Size;
mbed_official 87:085cde657901 401 while(hirda->TxXferCount > 0)
mbed_official 87:085cde657901 402 {
mbed_official 87:085cde657901 403 hirda->TxXferCount--;
mbed_official 87:085cde657901 404 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 87:085cde657901 405 {
mbed_official 87:085cde657901 406 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 87:085cde657901 407 {
mbed_official 87:085cde657901 408 return HAL_TIMEOUT;
mbed_official 87:085cde657901 409 }
mbed_official 87:085cde657901 410 tmp = (uint16_t*) pData;
mbed_official 87:085cde657901 411 hirda->Instance->DR = (*tmp & (uint16_t)0x01FF);
mbed_official 87:085cde657901 412 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 413 {
mbed_official 87:085cde657901 414 pData +=2;
mbed_official 87:085cde657901 415 }
mbed_official 87:085cde657901 416 else
mbed_official 87:085cde657901 417 {
mbed_official 87:085cde657901 418 pData +=1;
mbed_official 87:085cde657901 419 }
mbed_official 87:085cde657901 420 }
mbed_official 87:085cde657901 421 else
mbed_official 87:085cde657901 422 {
mbed_official 87:085cde657901 423 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 87:085cde657901 424 {
mbed_official 87:085cde657901 425 return HAL_TIMEOUT;
mbed_official 87:085cde657901 426 }
mbed_official 87:085cde657901 427 hirda->Instance->DR = (*pData++ & (uint8_t)0xFF);
mbed_official 87:085cde657901 428 }
mbed_official 87:085cde657901 429 }
mbed_official 87:085cde657901 430
mbed_official 87:085cde657901 431 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TC, RESET, Timeout) != HAL_OK)
mbed_official 87:085cde657901 432 {
mbed_official 87:085cde657901 433 return HAL_TIMEOUT;
mbed_official 87:085cde657901 434 }
mbed_official 87:085cde657901 435
mbed_official 87:085cde657901 436 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 87:085cde657901 437 {
mbed_official 87:085cde657901 438 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 87:085cde657901 439 }
mbed_official 87:085cde657901 440 else
mbed_official 87:085cde657901 441 {
mbed_official 87:085cde657901 442 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 443 }
mbed_official 87:085cde657901 444
mbed_official 87:085cde657901 445 /* Process Unlocked */
mbed_official 87:085cde657901 446 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 447
mbed_official 87:085cde657901 448 return HAL_OK;
mbed_official 87:085cde657901 449 }
mbed_official 87:085cde657901 450 else
mbed_official 87:085cde657901 451 {
mbed_official 87:085cde657901 452 return HAL_BUSY;
mbed_official 87:085cde657901 453 }
mbed_official 87:085cde657901 454 }
mbed_official 87:085cde657901 455
mbed_official 87:085cde657901 456 /**
mbed_official 87:085cde657901 457 * @brief Receive an amount of data in blocking mode.
mbed_official 226:b062af740e40 458 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 459 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 460 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 461 * @param Size: Amount of data to be received
mbed_official 87:085cde657901 462 * @param Timeout: Specify timeout value
mbed_official 87:085cde657901 463 * @retval HAL status
mbed_official 87:085cde657901 464 */
mbed_official 87:085cde657901 465 HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 87:085cde657901 466 {
mbed_official 87:085cde657901 467 uint16_t* tmp;
mbed_official 87:085cde657901 468 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 469
mbed_official 87:085cde657901 470 tmp1 = hirda->State;
mbed_official 87:085cde657901 471 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 87:085cde657901 472 {
mbed_official 87:085cde657901 473 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 474 {
mbed_official 87:085cde657901 475 return HAL_ERROR;
mbed_official 87:085cde657901 476 }
mbed_official 87:085cde657901 477
mbed_official 87:085cde657901 478 /* Process Locked */
mbed_official 87:085cde657901 479 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 480
mbed_official 87:085cde657901 481 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 482 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 87:085cde657901 483 {
mbed_official 87:085cde657901 484 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 485 }
mbed_official 87:085cde657901 486 else
mbed_official 87:085cde657901 487 {
mbed_official 87:085cde657901 488 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 87:085cde657901 489 }
mbed_official 87:085cde657901 490 hirda->RxXferSize = Size;
mbed_official 87:085cde657901 491 hirda->RxXferCount = Size;
mbed_official 87:085cde657901 492 /* Check the remain data to be received */
mbed_official 87:085cde657901 493 while(hirda->RxXferCount > 0)
mbed_official 87:085cde657901 494 {
mbed_official 87:085cde657901 495 hirda->RxXferCount--;
mbed_official 87:085cde657901 496 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 87:085cde657901 497 {
mbed_official 87:085cde657901 498 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 87:085cde657901 499 {
mbed_official 87:085cde657901 500 return HAL_TIMEOUT;
mbed_official 87:085cde657901 501 }
mbed_official 87:085cde657901 502 tmp = (uint16_t*) pData ;
mbed_official 87:085cde657901 503 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 504 {
mbed_official 87:085cde657901 505 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x01FF);
mbed_official 87:085cde657901 506 pData +=2;
mbed_official 87:085cde657901 507 }
mbed_official 87:085cde657901 508 else
mbed_official 87:085cde657901 509 {
mbed_official 87:085cde657901 510 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x00FF);
mbed_official 87:085cde657901 511 pData +=1;
mbed_official 87:085cde657901 512 }
mbed_official 87:085cde657901 513 }
mbed_official 87:085cde657901 514 else
mbed_official 87:085cde657901 515 {
mbed_official 87:085cde657901 516 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 87:085cde657901 517 {
mbed_official 87:085cde657901 518 return HAL_TIMEOUT;
mbed_official 87:085cde657901 519 }
mbed_official 87:085cde657901 520 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 521 {
mbed_official 87:085cde657901 522 *pData++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x00FF);
mbed_official 87:085cde657901 523 }
mbed_official 87:085cde657901 524 else
mbed_official 87:085cde657901 525 {
mbed_official 87:085cde657901 526 *pData++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x007F);
mbed_official 87:085cde657901 527 }
mbed_official 87:085cde657901 528 }
mbed_official 87:085cde657901 529 }
mbed_official 87:085cde657901 530 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 87:085cde657901 531 {
mbed_official 87:085cde657901 532 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 533 }
mbed_official 87:085cde657901 534 else
mbed_official 87:085cde657901 535 {
mbed_official 87:085cde657901 536 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 537 }
mbed_official 87:085cde657901 538
mbed_official 87:085cde657901 539 /* Process Unlocked */
mbed_official 87:085cde657901 540 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 541
mbed_official 87:085cde657901 542 return HAL_OK;
mbed_official 87:085cde657901 543 }
mbed_official 87:085cde657901 544 else
mbed_official 87:085cde657901 545 {
mbed_official 87:085cde657901 546 return HAL_BUSY;
mbed_official 87:085cde657901 547 }
mbed_official 87:085cde657901 548 }
mbed_official 87:085cde657901 549
mbed_official 87:085cde657901 550 /**
mbed_official 87:085cde657901 551 * @brief Send an amount of data in non blocking mode.
mbed_official 226:b062af740e40 552 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 553 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 554 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 555 * @param Size: Amount of data to be sent
mbed_official 87:085cde657901 556 * @retval HAL status
mbed_official 87:085cde657901 557 */
mbed_official 87:085cde657901 558 HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 87:085cde657901 559 {
mbed_official 87:085cde657901 560 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 561
mbed_official 87:085cde657901 562 tmp1 = hirda->State;
mbed_official 87:085cde657901 563 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 87:085cde657901 564 {
mbed_official 87:085cde657901 565 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 566 {
mbed_official 87:085cde657901 567 return HAL_ERROR;
mbed_official 87:085cde657901 568 }
mbed_official 87:085cde657901 569 /* Process Locked */
mbed_official 87:085cde657901 570 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 571
mbed_official 87:085cde657901 572 hirda->pTxBuffPtr = pData;
mbed_official 87:085cde657901 573 hirda->TxXferSize = Size;
mbed_official 87:085cde657901 574 hirda->TxXferCount = Size;
mbed_official 87:085cde657901 575 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 576 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 87:085cde657901 577 {
mbed_official 87:085cde657901 578 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 579 }
mbed_official 87:085cde657901 580 else
mbed_official 87:085cde657901 581 {
mbed_official 87:085cde657901 582 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 583 }
mbed_official 87:085cde657901 584
mbed_official 87:085cde657901 585 /* Enable the IRDA Parity Error Interrupt */
mbed_official 87:085cde657901 586 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 587
mbed_official 87:085cde657901 588 /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 87:085cde657901 589 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 590
mbed_official 87:085cde657901 591 /* Process Unlocked */
mbed_official 87:085cde657901 592 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 593
mbed_official 87:085cde657901 594 /* Enable the IRDA Transmit Complete Interrupt */
mbed_official 87:085cde657901 595 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_TC);
mbed_official 87:085cde657901 596
mbed_official 87:085cde657901 597 return HAL_OK;
mbed_official 87:085cde657901 598 }
mbed_official 87:085cde657901 599 else
mbed_official 87:085cde657901 600 {
mbed_official 87:085cde657901 601 return HAL_BUSY;
mbed_official 87:085cde657901 602 }
mbed_official 87:085cde657901 603 }
mbed_official 87:085cde657901 604
mbed_official 87:085cde657901 605 /**
mbed_official 87:085cde657901 606 * @brief Receives an amount of data in non blocking mode.
mbed_official 226:b062af740e40 607 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 608 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 609 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 610 * @param Size: Amount of data to be received
mbed_official 87:085cde657901 611 * @retval HAL status
mbed_official 87:085cde657901 612 */
mbed_official 87:085cde657901 613 HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 87:085cde657901 614 {
mbed_official 87:085cde657901 615 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 616
mbed_official 87:085cde657901 617 tmp1 = hirda->State;
mbed_official 87:085cde657901 618 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 87:085cde657901 619 {
mbed_official 87:085cde657901 620 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 621 {
mbed_official 87:085cde657901 622 return HAL_ERROR;
mbed_official 87:085cde657901 623 }
mbed_official 87:085cde657901 624
mbed_official 87:085cde657901 625 /* Process Locked */
mbed_official 87:085cde657901 626 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 627
mbed_official 87:085cde657901 628 hirda->pRxBuffPtr = pData;
mbed_official 87:085cde657901 629 hirda->RxXferSize = Size;
mbed_official 87:085cde657901 630 hirda->RxXferCount = Size;
mbed_official 87:085cde657901 631 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 632 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 87:085cde657901 633 {
mbed_official 87:085cde657901 634 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 635 }
mbed_official 87:085cde657901 636 else
mbed_official 87:085cde657901 637 {
mbed_official 87:085cde657901 638 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 87:085cde657901 639 }
mbed_official 87:085cde657901 640
mbed_official 87:085cde657901 641 /* Enable the IRDA Data Register not empty Interrupt */
mbed_official 87:085cde657901 642 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 643
mbed_official 87:085cde657901 644 /* Enable the IRDA Parity Error Interrupt */
mbed_official 87:085cde657901 645 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 646
mbed_official 87:085cde657901 647 /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 87:085cde657901 648 __HAL_IRDA_ENABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 649
mbed_official 87:085cde657901 650 /* Process Unlocked */
mbed_official 87:085cde657901 651 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 652
mbed_official 87:085cde657901 653 return HAL_OK;
mbed_official 87:085cde657901 654 }
mbed_official 87:085cde657901 655 else
mbed_official 87:085cde657901 656 {
mbed_official 87:085cde657901 657 return HAL_BUSY;
mbed_official 87:085cde657901 658 }
mbed_official 87:085cde657901 659 }
mbed_official 87:085cde657901 660
mbed_official 87:085cde657901 661 /**
mbed_official 87:085cde657901 662 * @brief Sends an amount of data in non blocking mode.
mbed_official 226:b062af740e40 663 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 664 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 665 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 666 * @param Size: Amount of data to be sent
mbed_official 87:085cde657901 667 * @retval HAL status
mbed_official 87:085cde657901 668 */
mbed_official 87:085cde657901 669 HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 87:085cde657901 670 {
mbed_official 87:085cde657901 671 uint32_t *tmp;
mbed_official 87:085cde657901 672 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 673
mbed_official 87:085cde657901 674 tmp1 = hirda->State;
mbed_official 87:085cde657901 675 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_RX))
mbed_official 87:085cde657901 676 {
mbed_official 87:085cde657901 677 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 678 {
mbed_official 87:085cde657901 679 return HAL_ERROR;
mbed_official 87:085cde657901 680 }
mbed_official 87:085cde657901 681
mbed_official 87:085cde657901 682 /* Process Locked */
mbed_official 87:085cde657901 683 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 684
mbed_official 87:085cde657901 685 hirda->pTxBuffPtr = pData;
mbed_official 87:085cde657901 686 hirda->TxXferSize = Size;
mbed_official 87:085cde657901 687 hirda->TxXferCount = Size;
mbed_official 87:085cde657901 688 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 689
mbed_official 87:085cde657901 690 if(hirda->State == HAL_IRDA_STATE_BUSY_RX)
mbed_official 87:085cde657901 691 {
mbed_official 87:085cde657901 692 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 693 }
mbed_official 87:085cde657901 694 else
mbed_official 87:085cde657901 695 {
mbed_official 87:085cde657901 696 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 697 }
mbed_official 87:085cde657901 698
mbed_official 87:085cde657901 699 /* Set the IRDA DMA transfert complete callback */
mbed_official 87:085cde657901 700 hirda->hdmatx->XferCpltCallback = IRDA_DMATransmitCplt;
mbed_official 87:085cde657901 701
mbed_official 87:085cde657901 702 /* Set the DMA error callback */
mbed_official 87:085cde657901 703 hirda->hdmatx->XferErrorCallback = IRDA_DMAError;
mbed_official 87:085cde657901 704
mbed_official 87:085cde657901 705 /* Enable the IRDA transmit DMA Stream */
mbed_official 87:085cde657901 706 tmp = (uint32_t*)&pData;
mbed_official 87:085cde657901 707 HAL_DMA_Start_IT(hirda->hdmatx, *(uint32_t*)tmp, (uint32_t)&hirda->Instance->DR, Size);
mbed_official 87:085cde657901 708
mbed_official 87:085cde657901 709 /* Enable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 87:085cde657901 710 in the USART CR3 register */
mbed_official 87:085cde657901 711 hirda->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 87:085cde657901 712
mbed_official 87:085cde657901 713 /* Process Unlocked */
mbed_official 87:085cde657901 714 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 715
mbed_official 87:085cde657901 716 return HAL_OK;
mbed_official 87:085cde657901 717 }
mbed_official 87:085cde657901 718 else
mbed_official 87:085cde657901 719 {
mbed_official 87:085cde657901 720 return HAL_BUSY;
mbed_official 87:085cde657901 721 }
mbed_official 87:085cde657901 722 }
mbed_official 87:085cde657901 723
mbed_official 87:085cde657901 724 /**
mbed_official 87:085cde657901 725 * @brief Receives an amount of data in non blocking mode.
mbed_official 226:b062af740e40 726 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 727 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 728 * @param pData: Pointer to data buffer
mbed_official 87:085cde657901 729 * @param Size: Amount of data to be received
mbed_official 87:085cde657901 730 * @note When the IRDA parity is enabled (PCE = 1) the data received contain the parity bit.
mbed_official 87:085cde657901 731 * @retval HAL status
mbed_official 87:085cde657901 732 */
mbed_official 87:085cde657901 733 HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
mbed_official 87:085cde657901 734 {
mbed_official 87:085cde657901 735 uint32_t *tmp;
mbed_official 87:085cde657901 736 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 737
mbed_official 87:085cde657901 738 tmp1 = hirda->State;
mbed_official 87:085cde657901 739 if((tmp1 == HAL_IRDA_STATE_READY) || (tmp1 == HAL_IRDA_STATE_BUSY_TX))
mbed_official 87:085cde657901 740 {
mbed_official 87:085cde657901 741 if((pData == NULL) || (Size == 0))
mbed_official 87:085cde657901 742 {
mbed_official 87:085cde657901 743 return HAL_ERROR;
mbed_official 87:085cde657901 744 }
mbed_official 87:085cde657901 745
mbed_official 87:085cde657901 746 /* Process Locked */
mbed_official 87:085cde657901 747 __HAL_LOCK(hirda);
mbed_official 87:085cde657901 748
mbed_official 87:085cde657901 749 hirda->pRxBuffPtr = pData;
mbed_official 87:085cde657901 750 hirda->RxXferSize = Size;
mbed_official 87:085cde657901 751 hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
mbed_official 87:085cde657901 752 if(hirda->State == HAL_IRDA_STATE_BUSY_TX)
mbed_official 87:085cde657901 753 {
mbed_official 87:085cde657901 754 hirda->State = HAL_IRDA_STATE_BUSY_TX_RX;
mbed_official 87:085cde657901 755 }
mbed_official 87:085cde657901 756 else
mbed_official 87:085cde657901 757 {
mbed_official 87:085cde657901 758 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 87:085cde657901 759 }
mbed_official 87:085cde657901 760
mbed_official 87:085cde657901 761 /* Set the IRDA DMA transfert complete callback */
mbed_official 87:085cde657901 762 hirda->hdmarx->XferCpltCallback = IRDA_DMAReceiveCplt;
mbed_official 87:085cde657901 763
mbed_official 87:085cde657901 764 /* Set the DMA error callback */
mbed_official 87:085cde657901 765 hirda->hdmarx->XferErrorCallback = IRDA_DMAError;
mbed_official 87:085cde657901 766
mbed_official 87:085cde657901 767 /* Enable the DMA Stream */
mbed_official 87:085cde657901 768 tmp = (uint32_t*)&pData;
mbed_official 87:085cde657901 769 HAL_DMA_Start_IT(hirda->hdmarx, (uint32_t)&hirda->Instance->DR, *(uint32_t*)tmp, Size);
mbed_official 87:085cde657901 770
mbed_official 87:085cde657901 771 /* Enable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 87:085cde657901 772 in the USART CR3 register */
mbed_official 87:085cde657901 773 hirda->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 87:085cde657901 774
mbed_official 87:085cde657901 775 /* Process Unlocked */
mbed_official 87:085cde657901 776 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 777
mbed_official 87:085cde657901 778 return HAL_OK;
mbed_official 87:085cde657901 779 }
mbed_official 87:085cde657901 780 else
mbed_official 87:085cde657901 781 {
mbed_official 87:085cde657901 782 return HAL_BUSY;
mbed_official 87:085cde657901 783 }
mbed_official 87:085cde657901 784 }
mbed_official 87:085cde657901 785
mbed_official 87:085cde657901 786 /**
mbed_official 87:085cde657901 787 * @brief This function handles IRDA interrupt request.
mbed_official 226:b062af740e40 788 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 789 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 790 * @retval None
mbed_official 87:085cde657901 791 */
mbed_official 87:085cde657901 792 void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 793 {
mbed_official 87:085cde657901 794 uint32_t tmp1 = 0, tmp2 =0;
mbed_official 87:085cde657901 795
mbed_official 87:085cde657901 796 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_PE);
mbed_official 87:085cde657901 797 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_PE);
mbed_official 226:b062af740e40 798 /* IRDA parity error interrupt occurred -------------------------------------*/
mbed_official 87:085cde657901 799 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 87:085cde657901 800 {
mbed_official 87:085cde657901 801 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_FLAG_PE);
mbed_official 87:085cde657901 802 hirda->ErrorCode |= HAL_IRDA_ERROR_PE;
mbed_official 87:085cde657901 803 }
mbed_official 87:085cde657901 804
mbed_official 87:085cde657901 805 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_FE);
mbed_official 87:085cde657901 806 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 226:b062af740e40 807 /* IRDA frame error interrupt occurred --------------------------------------*/
mbed_official 87:085cde657901 808 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 87:085cde657901 809 {
mbed_official 87:085cde657901 810 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_FLAG_FE);
mbed_official 87:085cde657901 811 hirda->ErrorCode |= HAL_IRDA_ERROR_FE;
mbed_official 87:085cde657901 812 }
mbed_official 87:085cde657901 813
mbed_official 87:085cde657901 814 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_NE);
mbed_official 87:085cde657901 815 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 226:b062af740e40 816 /* IRDA noise error interrupt occurred --------------------------------------*/
mbed_official 87:085cde657901 817 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 87:085cde657901 818 {
mbed_official 87:085cde657901 819 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_FLAG_NE);
mbed_official 87:085cde657901 820 hirda->ErrorCode |= HAL_IRDA_ERROR_NE;
mbed_official 87:085cde657901 821 }
mbed_official 87:085cde657901 822
mbed_official 87:085cde657901 823 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_ORE);
mbed_official 87:085cde657901 824 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_ERR);
mbed_official 226:b062af740e40 825 /* IRDA Over-Run interrupt occurred -----------------------------------------*/
mbed_official 87:085cde657901 826 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 87:085cde657901 827 {
mbed_official 87:085cde657901 828 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_FLAG_ORE);
mbed_official 87:085cde657901 829 hirda->ErrorCode |= HAL_IRDA_ERROR_ORE;
mbed_official 87:085cde657901 830 }
mbed_official 87:085cde657901 831
mbed_official 87:085cde657901 832 /* Call the Error call Back in case of Errors */
mbed_official 87:085cde657901 833 if(hirda->ErrorCode != HAL_IRDA_ERROR_NONE)
mbed_official 87:085cde657901 834 {
mbed_official 87:085cde657901 835 /* Set the IRDA state ready to be able to start again the process */
mbed_official 87:085cde657901 836 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 837 HAL_IRDA_ErrorCallback(hirda);
mbed_official 87:085cde657901 838 }
mbed_official 87:085cde657901 839
mbed_official 87:085cde657901 840 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_RXNE);
mbed_official 87:085cde657901 841 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 842 /* IRDA in mode Receiver ---------------------------------------------------*/
mbed_official 87:085cde657901 843 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 87:085cde657901 844 {
mbed_official 87:085cde657901 845 IRDA_Receive_IT(hirda);
mbed_official 87:085cde657901 846 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 847 }
mbed_official 87:085cde657901 848
mbed_official 87:085cde657901 849 tmp1 = __HAL_IRDA_GET_FLAG(hirda, IRDA_FLAG_TC);
mbed_official 87:085cde657901 850 tmp2 = __HAL_IRDA_GET_IT_SOURCE(hirda, IRDA_IT_TC);
mbed_official 87:085cde657901 851 /* IRDA in mode Transmitter ------------------------------------------------*/
mbed_official 87:085cde657901 852 if((tmp1 != RESET) &&(tmp2 != RESET))
mbed_official 87:085cde657901 853 {
mbed_official 87:085cde657901 854 IRDA_Transmit_IT(hirda);
mbed_official 87:085cde657901 855 __HAL_IRDA_CLEAR_FLAG(hirda, IRDA_IT_TC);
mbed_official 87:085cde657901 856 }
mbed_official 87:085cde657901 857 }
mbed_official 87:085cde657901 858
mbed_official 87:085cde657901 859 /**
mbed_official 87:085cde657901 860 * @brief Tx Transfer complete callbacks.
mbed_official 226:b062af740e40 861 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 862 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 863 * @retval None
mbed_official 87:085cde657901 864 */
mbed_official 87:085cde657901 865 __weak void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 866 {
mbed_official 87:085cde657901 867 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 868 the HAL_IRDA_TxCpltCallback could be implemented in the user file
mbed_official 87:085cde657901 869 */
mbed_official 87:085cde657901 870 }
mbed_official 87:085cde657901 871
mbed_official 87:085cde657901 872 /**
mbed_official 87:085cde657901 873 * @brief Rx Transfer complete callbacks.
mbed_official 226:b062af740e40 874 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 875 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 876 * @retval None
mbed_official 87:085cde657901 877 */
mbed_official 87:085cde657901 878 __weak void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 879 {
mbed_official 87:085cde657901 880 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 881 the HAL_IRDA_TxCpltCallback could be implemented in the user file
mbed_official 87:085cde657901 882 */
mbed_official 87:085cde657901 883 }
mbed_official 87:085cde657901 884
mbed_official 87:085cde657901 885 /**
mbed_official 87:085cde657901 886 * @brief IRDA error callbacks.
mbed_official 226:b062af740e40 887 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 888 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 889 * @retval None
mbed_official 87:085cde657901 890 */
mbed_official 87:085cde657901 891 __weak void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 892 {
mbed_official 87:085cde657901 893 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 894 the HAL_IRDA_ErrorCallback could be implemented in the user file
mbed_official 87:085cde657901 895 */
mbed_official 87:085cde657901 896 }
mbed_official 87:085cde657901 897
mbed_official 87:085cde657901 898 /**
mbed_official 87:085cde657901 899 * @}
mbed_official 87:085cde657901 900 */
mbed_official 87:085cde657901 901
mbed_official 87:085cde657901 902 /** @defgroup IRDA_Group3 Peripheral State and Errors functions
mbed_official 87:085cde657901 903 * @brief IRDA State and Errors functions
mbed_official 87:085cde657901 904 *
mbed_official 87:085cde657901 905 @verbatim
mbed_official 87:085cde657901 906 ==============================================================================
mbed_official 87:085cde657901 907 ##### Peripheral State and Errors functions #####
mbed_official 87:085cde657901 908 ==============================================================================
mbed_official 87:085cde657901 909 [..]
mbed_official 87:085cde657901 910 This subsection provides a set of functions allowing to return the State of IrDA
mbed_official 226:b062af740e40 911 communication process and also return Peripheral Errors occurred during communication process
mbed_official 87:085cde657901 912 (+) HAL_IRDA_GetState() API can be helpful to check in run-time the state of the IrDA peripheral.
mbed_official 226:b062af740e40 913 (+) HAL_IRDA_GetError() check in run-time errors that could be occurred during communication.
mbed_official 87:085cde657901 914
mbed_official 87:085cde657901 915 @endverbatim
mbed_official 87:085cde657901 916 * @{
mbed_official 87:085cde657901 917 */
mbed_official 87:085cde657901 918
mbed_official 87:085cde657901 919 /**
mbed_official 87:085cde657901 920 * @brief Returns the IRDA state.
mbed_official 226:b062af740e40 921 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 922 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 923 * @retval HAL state
mbed_official 87:085cde657901 924 */
mbed_official 87:085cde657901 925 HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 926 {
mbed_official 87:085cde657901 927 return hirda->State;
mbed_official 87:085cde657901 928 }
mbed_official 87:085cde657901 929
mbed_official 87:085cde657901 930 /**
mbed_official 87:085cde657901 931 * @brief Return the IARDA error code
mbed_official 87:085cde657901 932 * @param hirda : pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 87:085cde657901 933 * the configuration information for the specified IRDA.
mbed_official 87:085cde657901 934 * @retval IRDA Error Code
mbed_official 87:085cde657901 935 */
mbed_official 87:085cde657901 936 uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 937 {
mbed_official 87:085cde657901 938 return hirda->ErrorCode;
mbed_official 87:085cde657901 939 }
mbed_official 87:085cde657901 940
mbed_official 87:085cde657901 941 /**
mbed_official 87:085cde657901 942 * @}
mbed_official 87:085cde657901 943 */
mbed_official 87:085cde657901 944
mbed_official 87:085cde657901 945 /**
mbed_official 87:085cde657901 946 * @brief DMA IRDA transmit process complete callback.
mbed_official 87:085cde657901 947 * @param hdma : DMA handle
mbed_official 87:085cde657901 948 * @retval None
mbed_official 87:085cde657901 949 */
mbed_official 106:ced8cbb51063 950 static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma)
mbed_official 87:085cde657901 951 {
mbed_official 87:085cde657901 952 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 106:ced8cbb51063 953
mbed_official 87:085cde657901 954 hirda->TxXferCount = 0;
mbed_official 106:ced8cbb51063 955
mbed_official 226:b062af740e40 956 /* Disable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 226:b062af740e40 957 in the IRDA CR3 register */
mbed_official 226:b062af740e40 958 hirda->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_DMAT);
mbed_official 226:b062af740e40 959
mbed_official 106:ced8cbb51063 960 /* Wait for IRDA TC Flag */
mbed_official 106:ced8cbb51063 961 if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TC, RESET, IRDA_TIMEOUT_VALUE) != HAL_OK)
mbed_official 87:085cde657901 962 {
mbed_official 226:b062af740e40 963 /* Timeout occurred */
mbed_official 106:ced8cbb51063 964 hirda->State = HAL_IRDA_STATE_TIMEOUT;
mbed_official 106:ced8cbb51063 965 HAL_IRDA_ErrorCallback(hirda);
mbed_official 87:085cde657901 966 }
mbed_official 87:085cde657901 967 else
mbed_official 87:085cde657901 968 {
mbed_official 106:ced8cbb51063 969 /* No Timeout */
mbed_official 106:ced8cbb51063 970 /* Check if a receive process is ongoing or not */
mbed_official 106:ced8cbb51063 971 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 106:ced8cbb51063 972 {
mbed_official 106:ced8cbb51063 973 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 106:ced8cbb51063 974 }
mbed_official 106:ced8cbb51063 975 else
mbed_official 106:ced8cbb51063 976 {
mbed_official 106:ced8cbb51063 977 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 106:ced8cbb51063 978 }
mbed_official 106:ced8cbb51063 979 HAL_IRDA_TxCpltCallback(hirda);
mbed_official 87:085cde657901 980 }
mbed_official 87:085cde657901 981 }
mbed_official 87:085cde657901 982
mbed_official 87:085cde657901 983 /**
mbed_official 87:085cde657901 984 * @brief DMA IRDA receive process complete callback.
mbed_official 87:085cde657901 985 * @param hdma: DMA handle
mbed_official 87:085cde657901 986 * @retval None
mbed_official 87:085cde657901 987 */
mbed_official 87:085cde657901 988 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
mbed_official 87:085cde657901 989 {
mbed_official 87:085cde657901 990 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 87:085cde657901 991
mbed_official 87:085cde657901 992 hirda->RxXferCount = 0;
mbed_official 226:b062af740e40 993
mbed_official 226:b062af740e40 994 /* Disable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 226:b062af740e40 995 in the IRDA CR3 register */
mbed_official 226:b062af740e40 996 hirda->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_DMAR);
mbed_official 226:b062af740e40 997
mbed_official 87:085cde657901 998 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 87:085cde657901 999 {
mbed_official 87:085cde657901 1000 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 1001 }
mbed_official 87:085cde657901 1002 else
mbed_official 87:085cde657901 1003 {
mbed_official 87:085cde657901 1004 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1005 }
mbed_official 87:085cde657901 1006
mbed_official 87:085cde657901 1007 HAL_IRDA_RxCpltCallback(hirda);
mbed_official 87:085cde657901 1008 }
mbed_official 87:085cde657901 1009
mbed_official 87:085cde657901 1010 /**
mbed_official 87:085cde657901 1011 * @brief DMA IRDA communication error callback.
mbed_official 87:085cde657901 1012 * @param hdma: DMA handle
mbed_official 87:085cde657901 1013 * @retval None
mbed_official 87:085cde657901 1014 */
mbed_official 87:085cde657901 1015 static void IRDA_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 87:085cde657901 1016 {
mbed_official 87:085cde657901 1017 IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 87:085cde657901 1018
mbed_official 87:085cde657901 1019 hirda->RxXferCount = 0;
mbed_official 87:085cde657901 1020 hirda->TxXferCount = 0;
mbed_official 87:085cde657901 1021 hirda->ErrorCode |= HAL_IRDA_ERROR_DMA;
mbed_official 87:085cde657901 1022 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1023
mbed_official 87:085cde657901 1024 HAL_IRDA_ErrorCallback(hirda);
mbed_official 87:085cde657901 1025 }
mbed_official 87:085cde657901 1026
mbed_official 87:085cde657901 1027 /**
mbed_official 87:085cde657901 1028 * @brief This function handles IRDA Communication Timeout.
mbed_official 226:b062af740e40 1029 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 1030 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 1031 * @param Flag: specifies the IRDA flag to check.
mbed_official 87:085cde657901 1032 * @param Status: The new Flag status (SET or RESET).
mbed_official 87:085cde657901 1033 * @param Timeout: Timeout duration
mbed_official 87:085cde657901 1034 * @retval HAL status
mbed_official 87:085cde657901 1035 */
mbed_official 87:085cde657901 1036 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
mbed_official 87:085cde657901 1037 {
mbed_official 87:085cde657901 1038 uint32_t timeout = 0;
mbed_official 87:085cde657901 1039
mbed_official 87:085cde657901 1040 timeout = HAL_GetTick() + Timeout;
mbed_official 87:085cde657901 1041
mbed_official 87:085cde657901 1042 /* Wait until flag is set */
mbed_official 87:085cde657901 1043 if(Status == RESET)
mbed_official 87:085cde657901 1044 {
mbed_official 87:085cde657901 1045 while(__HAL_IRDA_GET_FLAG(hirda, Flag) == RESET)
mbed_official 87:085cde657901 1046 {
mbed_official 87:085cde657901 1047 /* Check for the Timeout */
mbed_official 87:085cde657901 1048 if(Timeout != HAL_MAX_DELAY)
mbed_official 87:085cde657901 1049 {
mbed_official 87:085cde657901 1050 if(HAL_GetTick() >= timeout)
mbed_official 87:085cde657901 1051 {
mbed_official 87:085cde657901 1052 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 87:085cde657901 1053 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 87:085cde657901 1054 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 1055 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 1056 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 1057
mbed_official 87:085cde657901 1058 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1059
mbed_official 87:085cde657901 1060 /* Process Unlocked */
mbed_official 87:085cde657901 1061 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 1062
mbed_official 87:085cde657901 1063 return HAL_TIMEOUT;
mbed_official 87:085cde657901 1064 }
mbed_official 87:085cde657901 1065 }
mbed_official 87:085cde657901 1066 }
mbed_official 87:085cde657901 1067 }
mbed_official 87:085cde657901 1068 else
mbed_official 87:085cde657901 1069 {
mbed_official 87:085cde657901 1070 while(__HAL_IRDA_GET_FLAG(hirda, Flag) != RESET)
mbed_official 87:085cde657901 1071 {
mbed_official 87:085cde657901 1072 /* Check for the Timeout */
mbed_official 87:085cde657901 1073 if(Timeout != HAL_MAX_DELAY)
mbed_official 87:085cde657901 1074 {
mbed_official 87:085cde657901 1075 if(HAL_GetTick() >= timeout)
mbed_official 87:085cde657901 1076 {
mbed_official 87:085cde657901 1077 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 87:085cde657901 1078 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TXE);
mbed_official 87:085cde657901 1079 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 1080 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 1081 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 1082
mbed_official 87:085cde657901 1083 hirda->State= HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1084
mbed_official 87:085cde657901 1085 /* Process Unlocked */
mbed_official 87:085cde657901 1086 __HAL_UNLOCK(hirda);
mbed_official 87:085cde657901 1087
mbed_official 87:085cde657901 1088 return HAL_TIMEOUT;
mbed_official 87:085cde657901 1089 }
mbed_official 87:085cde657901 1090 }
mbed_official 87:085cde657901 1091 }
mbed_official 87:085cde657901 1092 }
mbed_official 87:085cde657901 1093 return HAL_OK;
mbed_official 87:085cde657901 1094 }
mbed_official 87:085cde657901 1095
mbed_official 87:085cde657901 1096 /**
mbed_official 87:085cde657901 1097 * @brief Send an amount of data in non blocking mode.
mbed_official 226:b062af740e40 1098 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 1099 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 1100 * @retval HAL status
mbed_official 87:085cde657901 1101 */
mbed_official 87:085cde657901 1102 static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 1103 {
mbed_official 87:085cde657901 1104 uint16_t* tmp;
mbed_official 87:085cde657901 1105 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 1106
mbed_official 87:085cde657901 1107 tmp1 = hirda->State;
mbed_official 87:085cde657901 1108 if((tmp1 == HAL_IRDA_STATE_BUSY_TX) || (tmp1 == HAL_IRDA_STATE_BUSY_TX_RX))
mbed_official 87:085cde657901 1109 {
mbed_official 87:085cde657901 1110 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 87:085cde657901 1111 {
mbed_official 87:085cde657901 1112 tmp = (uint16_t*) hirda->pTxBuffPtr;
mbed_official 87:085cde657901 1113 hirda->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF);
mbed_official 87:085cde657901 1114 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 1115 {
mbed_official 87:085cde657901 1116 hirda->pTxBuffPtr += 2;
mbed_official 87:085cde657901 1117 }
mbed_official 87:085cde657901 1118 else
mbed_official 87:085cde657901 1119 {
mbed_official 87:085cde657901 1120 hirda->pTxBuffPtr += 1;
mbed_official 87:085cde657901 1121 }
mbed_official 87:085cde657901 1122 }
mbed_official 87:085cde657901 1123 else
mbed_official 87:085cde657901 1124 {
mbed_official 87:085cde657901 1125 hirda->Instance->DR = (uint8_t)(*hirda->pTxBuffPtr++ & (uint8_t)0x00FF);
mbed_official 87:085cde657901 1126 }
mbed_official 87:085cde657901 1127
mbed_official 87:085cde657901 1128 if(--hirda->TxXferCount == 0)
mbed_official 87:085cde657901 1129 {
mbed_official 87:085cde657901 1130 /* Disable the IRDA Transmit Complete Interrupt */
mbed_official 87:085cde657901 1131 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_TC);
mbed_official 87:085cde657901 1132
mbed_official 87:085cde657901 1133 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 87:085cde657901 1134 {
mbed_official 87:085cde657901 1135 hirda->State = HAL_IRDA_STATE_BUSY_RX;
mbed_official 87:085cde657901 1136 }
mbed_official 87:085cde657901 1137 else
mbed_official 87:085cde657901 1138 {
mbed_official 87:085cde657901 1139 /* Disable the IRDA Parity Error Interrupt */
mbed_official 87:085cde657901 1140 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 1141
mbed_official 87:085cde657901 1142 /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 87:085cde657901 1143 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 1144
mbed_official 87:085cde657901 1145 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1146 }
mbed_official 226:b062af740e40 1147
mbed_official 87:085cde657901 1148 HAL_IRDA_TxCpltCallback(hirda);
mbed_official 87:085cde657901 1149
mbed_official 87:085cde657901 1150 return HAL_OK;
mbed_official 87:085cde657901 1151 }
mbed_official 226:b062af740e40 1152
mbed_official 87:085cde657901 1153 return HAL_OK;
mbed_official 87:085cde657901 1154 }
mbed_official 87:085cde657901 1155 else
mbed_official 87:085cde657901 1156 {
mbed_official 87:085cde657901 1157 return HAL_BUSY;
mbed_official 87:085cde657901 1158 }
mbed_official 87:085cde657901 1159 }
mbed_official 87:085cde657901 1160
mbed_official 87:085cde657901 1161 /**
mbed_official 87:085cde657901 1162 * @brief Receives an amount of data in non blocking mode.
mbed_official 226:b062af740e40 1163 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 1164 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 1165 * @retval HAL status
mbed_official 87:085cde657901 1166 */
mbed_official 87:085cde657901 1167 static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 1168 {
mbed_official 87:085cde657901 1169 uint16_t* tmp;
mbed_official 87:085cde657901 1170 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 1171
mbed_official 87:085cde657901 1172 tmp1 = hirda->State;
mbed_official 87:085cde657901 1173 if((tmp1 == HAL_IRDA_STATE_BUSY_RX) || (tmp1 == HAL_IRDA_STATE_BUSY_TX_RX))
mbed_official 87:085cde657901 1174 {
mbed_official 87:085cde657901 1175 if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
mbed_official 87:085cde657901 1176 {
mbed_official 87:085cde657901 1177 tmp = (uint16_t*) hirda->pRxBuffPtr;
mbed_official 87:085cde657901 1178 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 1179 {
mbed_official 87:085cde657901 1180 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x01FF);
mbed_official 87:085cde657901 1181 hirda->pRxBuffPtr += 2;
mbed_official 87:085cde657901 1182 }
mbed_official 87:085cde657901 1183 else
mbed_official 87:085cde657901 1184 {
mbed_official 87:085cde657901 1185 *tmp = (uint16_t)(hirda->Instance->DR & (uint16_t)0x00FF);
mbed_official 87:085cde657901 1186 hirda->pRxBuffPtr += 1;
mbed_official 87:085cde657901 1187 }
mbed_official 87:085cde657901 1188 }
mbed_official 87:085cde657901 1189 else
mbed_official 87:085cde657901 1190 {
mbed_official 87:085cde657901 1191 if(hirda->Init.Parity == IRDA_PARITY_NONE)
mbed_official 87:085cde657901 1192 {
mbed_official 87:085cde657901 1193 *hirda->pRxBuffPtr++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x00FF);
mbed_official 87:085cde657901 1194 }
mbed_official 87:085cde657901 1195 else
mbed_official 87:085cde657901 1196 {
mbed_official 87:085cde657901 1197 *hirda->pRxBuffPtr++ = (uint8_t)(hirda->Instance->DR & (uint8_t)0x007F);
mbed_official 87:085cde657901 1198 }
mbed_official 87:085cde657901 1199 }
mbed_official 87:085cde657901 1200
mbed_official 87:085cde657901 1201 if(--hirda->RxXferCount == 0)
mbed_official 87:085cde657901 1202 {
mbed_official 87:085cde657901 1203 while(HAL_IS_BIT_SET(hirda->Instance->SR, IRDA_FLAG_RXNE))
mbed_official 87:085cde657901 1204 {
mbed_official 87:085cde657901 1205 }
mbed_official 87:085cde657901 1206 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_RXNE);
mbed_official 87:085cde657901 1207
mbed_official 87:085cde657901 1208 if(hirda->State == HAL_IRDA_STATE_BUSY_TX_RX)
mbed_official 87:085cde657901 1209 {
mbed_official 87:085cde657901 1210 hirda->State = HAL_IRDA_STATE_BUSY_TX;
mbed_official 87:085cde657901 1211 }
mbed_official 87:085cde657901 1212 else
mbed_official 87:085cde657901 1213 {
mbed_official 87:085cde657901 1214 /* Disable the IRDA Parity Error Interrupt */
mbed_official 87:085cde657901 1215 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_PE);
mbed_official 87:085cde657901 1216
mbed_official 87:085cde657901 1217 /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 87:085cde657901 1218 __HAL_IRDA_DISABLE_IT(hirda, IRDA_IT_ERR);
mbed_official 87:085cde657901 1219
mbed_official 87:085cde657901 1220 hirda->State = HAL_IRDA_STATE_READY;
mbed_official 87:085cde657901 1221 }
mbed_official 87:085cde657901 1222 HAL_IRDA_RxCpltCallback(hirda);
mbed_official 87:085cde657901 1223
mbed_official 87:085cde657901 1224 return HAL_OK;
mbed_official 87:085cde657901 1225 }
mbed_official 87:085cde657901 1226 return HAL_OK;
mbed_official 87:085cde657901 1227 }
mbed_official 87:085cde657901 1228 else
mbed_official 87:085cde657901 1229 {
mbed_official 87:085cde657901 1230 return HAL_BUSY;
mbed_official 87:085cde657901 1231 }
mbed_official 87:085cde657901 1232 }
mbed_official 87:085cde657901 1233
mbed_official 87:085cde657901 1234 /**
mbed_official 87:085cde657901 1235 * @brief Configures the IRDA peripheral.
mbed_official 226:b062af740e40 1236 * @param hirda: pointer to a IRDA_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 1237 * the configuration information for the specified IRDA module.
mbed_official 87:085cde657901 1238 * @retval None
mbed_official 87:085cde657901 1239 */
mbed_official 87:085cde657901 1240 static void IRDA_SetConfig(IRDA_HandleTypeDef *hirda)
mbed_official 87:085cde657901 1241 {
mbed_official 87:085cde657901 1242 uint32_t tmpreg = 0x00;
mbed_official 87:085cde657901 1243
mbed_official 87:085cde657901 1244 /* Check the parameters */
mbed_official 87:085cde657901 1245 assert_param(IS_IRDA_INSTANCE(hirda->Instance));
mbed_official 87:085cde657901 1246 assert_param(IS_IRDA_BAUDRATE(hirda->Init.BaudRate));
mbed_official 87:085cde657901 1247 assert_param(IS_IRDA_WORD_LENGTH(hirda->Init.WordLength));
mbed_official 87:085cde657901 1248 assert_param(IS_IRDA_PARITY(hirda->Init.Parity));
mbed_official 87:085cde657901 1249 assert_param(IS_IRDA_MODE(hirda->Init.Mode));
mbed_official 87:085cde657901 1250
mbed_official 87:085cde657901 1251 /*-------------------------- IRDA CR2 Configuration ------------------------*/
mbed_official 87:085cde657901 1252 /* Clear STOP[13:12] bits */
mbed_official 87:085cde657901 1253 hirda->Instance->CR2 &= (uint32_t)~((uint32_t)USART_CR2_STOP);
mbed_official 87:085cde657901 1254
mbed_official 87:085cde657901 1255 /*-------------------------- USART CR1 Configuration -----------------------*/
mbed_official 87:085cde657901 1256 tmpreg = hirda->Instance->CR1;
mbed_official 87:085cde657901 1257
mbed_official 87:085cde657901 1258 /* Clear M, PCE, PS, TE and RE bits */
mbed_official 87:085cde657901 1259 tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | \
mbed_official 87:085cde657901 1260 USART_CR1_RE));
mbed_official 87:085cde657901 1261
mbed_official 87:085cde657901 1262 /* Configure the USART Word Length, Parity and mode:
mbed_official 87:085cde657901 1263 Set the M bits according to hirda->Init.WordLength value
mbed_official 87:085cde657901 1264 Set PCE and PS bits according to hirda->Init.Parity value
mbed_official 87:085cde657901 1265 Set TE and RE bits according to hirda->Init.Mode value */
mbed_official 87:085cde657901 1266 tmpreg |= (uint32_t)hirda->Init.WordLength | hirda->Init.Parity | hirda->Init.Mode;
mbed_official 87:085cde657901 1267
mbed_official 87:085cde657901 1268 /* Write to USART CR1 */
mbed_official 87:085cde657901 1269 hirda->Instance->CR1 = (uint32_t)tmpreg;
mbed_official 87:085cde657901 1270
mbed_official 87:085cde657901 1271 /*-------------------------- USART CR3 Configuration -----------------------*/
mbed_official 87:085cde657901 1272 /* Clear CTSE and RTSE bits */
mbed_official 87:085cde657901 1273 hirda->Instance->CR3 &= (uint32_t)~((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE));
mbed_official 87:085cde657901 1274
mbed_official 87:085cde657901 1275 /*-------------------------- USART BRR Configuration -----------------------*/
mbed_official 87:085cde657901 1276 if((hirda->Instance == USART1) || (hirda->Instance == USART6))
mbed_official 87:085cde657901 1277 {
mbed_official 87:085cde657901 1278 hirda->Instance->BRR = __IRDA_BRR(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate);
mbed_official 87:085cde657901 1279 }
mbed_official 87:085cde657901 1280 else
mbed_official 87:085cde657901 1281 {
mbed_official 87:085cde657901 1282 hirda->Instance->BRR = __IRDA_BRR(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate);
mbed_official 87:085cde657901 1283 }
mbed_official 87:085cde657901 1284 }
mbed_official 87:085cde657901 1285 /**
mbed_official 87:085cde657901 1286 * @}
mbed_official 87:085cde657901 1287 */
mbed_official 87:085cde657901 1288
mbed_official 87:085cde657901 1289 /**
mbed_official 87:085cde657901 1290 * @}
mbed_official 87:085cde657901 1291 */
mbed_official 87:085cde657901 1292
mbed_official 87:085cde657901 1293 #endif /* HAL_IRDA_MODULE_ENABLED */
mbed_official 87:085cde657901 1294
mbed_official 87:085cde657901 1295 /**
mbed_official 87:085cde657901 1296 * @}
mbed_official 87:085cde657901 1297 */
mbed_official 87:085cde657901 1298
mbed_official 87:085cde657901 1299 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/