Subversion Repositories AFRtranscoder

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_irda.h
4
  * @author  MCD Application Team
5
  * @brief   Header file of IRDA HAL module.
6
  ******************************************************************************
7
  * @attention
8
  *
9
  * Copyright (c) 2016 STMicroelectronics.
10
  * All rights reserved.
11
  *
12
  * This software is licensed under terms that can be found in the LICENSE file
13
  * in the root directory of this software component.
14
  * If no LICENSE file comes with this software, it is provided AS-IS.
15
  *
16
  ******************************************************************************
17
  */
18
 
19
/* Define to prevent recursive inclusion -------------------------------------*/
20
#ifndef __STM32F1xx_HAL_IRDA_H
21
#define __STM32F1xx_HAL_IRDA_H
22
 
23
#ifdef __cplusplus
24
extern "C" {
25
#endif
26
 
27
/* Includes ------------------------------------------------------------------*/
28
#include "stm32f1xx_hal_def.h"
29
 
30
/** @addtogroup STM32F1xx_HAL_Driver
31
  * @{
32
  */
33
 
34
/** @addtogroup IRDA
35
  * @{
36
  */
37
 
38
/* Exported types ------------------------------------------------------------*/
39
/** @defgroup IRDA_Exported_Types IRDA Exported Types
40
  * @{
41
  */
42
/**
43
  * @brief IRDA Init Structure definition
44
  */
45
typedef struct
46
{
47
  uint32_t BaudRate;                  /*!< This member configures the IRDA communication baud rate.
48
                                           The baud rate is computed using the following formula:
49
                                           - IntegerDivider = ((PCLKx) / (16 * (hirda->Init.BaudRate)))
50
                                           - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
51
 
52
  uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
53
                                           This parameter can be a value of @ref IRDA_Word_Length */
54
 
55
  uint32_t Parity;                    /*!< Specifies the parity mode.
56
                                           This parameter can be a value of @ref IRDA_Parity
57
                                           @note When parity is enabled, the computed parity is inserted
58
                                                 at the MSB position of the transmitted data (9th bit when
59
                                                 the word length is set to 9 data bits; 8th bit when the
60
                                                 word length is set to 8 data bits). */
61
 
62
  uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
63
                                           This parameter can be a value of @ref IRDA_Mode */
64
 
65
  uint8_t  Prescaler;                 /*!< Specifies the Prescaler value to be programmed
66
                                           in the IrDA low-power Baud Register, for defining pulse width on which
67
                                           burst acceptance/rejection will be decided. This value is used as divisor
68
                                           of system clock to achieve required pulse width. */
69
 
70
  uint32_t IrDAMode;                  /*!< Specifies the IrDA mode
71
                                           This parameter can be a value of @ref IRDA_Low_Power */
72
} IRDA_InitTypeDef;
73
 
74
/**
75
  * @brief HAL IRDA State structures definition
76
  * @note  HAL IRDA State value is a combination of 2 different substates: gState and RxState.
77
  *        - gState contains IRDA state information related to global Handle management
78
  *          and also information related to Tx operations.
79
  *          gState value coding follow below described bitmap :
80
  *          b7-b6  Error information
81
  *             00 : No Error
82
  *             01 : (Not Used)
83
  *             10 : Timeout
84
  *             11 : Error
85
  *          b5     IP initialisation status
86
  *             0  : Reset (IP not initialized)
87
  *             1  : Init done (IP initialized. HAL IRDA Init function already called)
88
  *          b4-b3  (not used)
89
  *             xx : Should be set to 00
90
  *          b2     Intrinsic process state
91
  *             0  : Ready
92
  *             1  : Busy (IP busy with some configuration or internal operations)
93
  *          b1     (not used)
94
  *             x  : Should be set to 0
95
  *          b0     Tx state
96
  *             0  : Ready (no Tx operation ongoing)
97
  *             1  : Busy (Tx operation ongoing)
98
  *        - RxState contains information related to Rx operations.
99
  *          RxState value coding follow below described bitmap :
100
  *          b7-b6  (not used)
101
  *             xx : Should be set to 00
102
  *          b5     IP initialisation status
103
  *             0  : Reset (IP not initialized)
104
  *             1  : Init done (IP initialized)
105
  *          b4-b2  (not used)
106
  *            xxx : Should be set to 000
107
  *          b1     Rx state
108
  *             0  : Ready (no Rx operation ongoing)
109
  *             1  : Busy (Rx operation ongoing)
110
  *          b0     (not used)
111
  *             x  : Should be set to 0.
112
  */
113
typedef enum
114
{
115
  HAL_IRDA_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet Initialized
116
                                                   Value is allowed for gState and RxState */
117
  HAL_IRDA_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use
118
                                                   Value is allowed for gState and RxState */
119
  HAL_IRDA_STATE_BUSY              = 0x24U,    /*!< An internal process is ongoing
120
                                                   Value is allowed for gState only */
121
  HAL_IRDA_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoing
122
                                                   Value is allowed for gState only */
123
  HAL_IRDA_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing
124
                                                   Value is allowed for RxState only */
125
  HAL_IRDA_STATE_BUSY_TX_RX        = 0x23U,    /*!< Data Transmission and Reception process is ongoing
126
                                                   Not to be used for neither gState nor RxState.
127
                                                   Value is result of combination (Or) between gState and RxState values */
128
  HAL_IRDA_STATE_TIMEOUT           = 0xA0U,    /*!< Timeout state
129
                                                   Value is allowed for gState only */
130
  HAL_IRDA_STATE_ERROR             = 0xE0U     /*!< Error
131
                                                   Value is allowed for gState only */
132
} HAL_IRDA_StateTypeDef;
133
 
134
/**
135
  * @brief IRDA handle Structure definition
136
  */
137
#if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
138
typedef struct __IRDA_HandleTypeDef
139
#else
140
typedef struct
141
#endif  /* USE_HAL_IRDA_REGISTER_CALLBACKS */
142
{
143
  USART_TypeDef               *Instance;        /*!<  USART registers base address       */
144
 
145
  IRDA_InitTypeDef            Init;             /*!<  IRDA communication parameters      */
146
 
147
  const uint8_t               *pTxBuffPtr;      /*!<  Pointer to IRDA Tx transfer Buffer */
148
 
149
  uint16_t                    TxXferSize;       /*!<  IRDA Tx Transfer size              */
150
 
151
  __IO uint16_t               TxXferCount;      /*!<  IRDA Tx Transfer Counter           */
152
 
153
  uint8_t                     *pRxBuffPtr;      /*!<  Pointer to IRDA Rx transfer Buffer */
154
 
155
  uint16_t                    RxXferSize;       /*!<  IRDA Rx Transfer size              */
156
 
157
  __IO uint16_t               RxXferCount;      /*!<  IRDA Rx Transfer Counter           */
158
 
159
  DMA_HandleTypeDef           *hdmatx;          /*!<  IRDA Tx DMA Handle parameters      */
160
 
161
  DMA_HandleTypeDef           *hdmarx;          /*!<  IRDA Rx DMA Handle parameters      */
162
 
163
  HAL_LockTypeDef             Lock;             /*!<  Locking object                     */
164
 
165
  __IO HAL_IRDA_StateTypeDef  gState;           /*!<  IRDA state information related to global Handle management
166
                                                   and also related to Tx operations.
167
                                                   This parameter can be a value of @ref HAL_IRDA_StateTypeDef */
168
 
169
  __IO HAL_IRDA_StateTypeDef  RxState;          /*!<  IRDA state information related to Rx operations.
170
                                                   This parameter can be a value of @ref HAL_IRDA_StateTypeDef */
171
 
172
  __IO uint32_t               ErrorCode;        /*!< IRDA Error code                    */
173
 
174
#if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
175
  void (* TxHalfCpltCallback)(struct __IRDA_HandleTypeDef *hirda);        /*!< IRDA Tx Half Complete Callback        */
176
 
177
  void (* TxCpltCallback)(struct __IRDA_HandleTypeDef *hirda);            /*!< IRDA Tx Complete Callback             */
178
 
179
  void (* RxHalfCpltCallback)(struct __IRDA_HandleTypeDef *hirda);        /*!< IRDA Rx Half Complete Callback        */
180
 
181
  void (* RxCpltCallback)(struct __IRDA_HandleTypeDef *hirda);            /*!< IRDA Rx Complete Callback             */
182
 
183
  void (* ErrorCallback)(struct __IRDA_HandleTypeDef *hirda);             /*!< IRDA Error Callback                   */
184
 
185
  void (* AbortCpltCallback)(struct __IRDA_HandleTypeDef *hirda);         /*!< IRDA Abort Complete Callback          */
186
 
187
  void (* AbortTransmitCpltCallback)(struct __IRDA_HandleTypeDef *hirda); /*!< IRDA Abort Transmit Complete Callback */
188
 
189
  void (* AbortReceiveCpltCallback)(struct __IRDA_HandleTypeDef *hirda);  /*!< IRDA Abort Receive Complete Callback  */
190
 
191
 
192
  void (* MspInitCallback)(struct __IRDA_HandleTypeDef *hirda);           /*!< IRDA Msp Init callback                */
193
 
194
  void (* MspDeInitCallback)(struct __IRDA_HandleTypeDef *hirda);         /*!< IRDA Msp DeInit callback              */
195
#endif  /* USE_HAL_IRDA_REGISTER_CALLBACKS */
196
 
197
} IRDA_HandleTypeDef;
198
 
199
#if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
200
/**
201
  * @brief  HAL IRDA Callback ID enumeration definition
202
  */
203
typedef enum
204
{
205
  HAL_IRDA_TX_HALFCOMPLETE_CB_ID         = 0x00U,    /*!< IRDA Tx Half Complete Callback ID        */
206
  HAL_IRDA_TX_COMPLETE_CB_ID             = 0x01U,    /*!< IRDA Tx Complete Callback ID             */
207
  HAL_IRDA_RX_HALFCOMPLETE_CB_ID         = 0x02U,    /*!< IRDA Rx Half Complete Callback ID        */
208
  HAL_IRDA_RX_COMPLETE_CB_ID             = 0x03U,    /*!< IRDA Rx Complete Callback ID             */
209
  HAL_IRDA_ERROR_CB_ID                   = 0x04U,    /*!< IRDA Error Callback ID                   */
210
  HAL_IRDA_ABORT_COMPLETE_CB_ID          = 0x05U,    /*!< IRDA Abort Complete Callback ID          */
211
  HAL_IRDA_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U,    /*!< IRDA Abort Transmit Complete Callback ID */
212
  HAL_IRDA_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x07U,    /*!< IRDA Abort Receive Complete Callback ID  */
213
 
214
  HAL_IRDA_MSPINIT_CB_ID                 = 0x08U,    /*!< IRDA MspInit callback ID                 */
215
  HAL_IRDA_MSPDEINIT_CB_ID               = 0x09U     /*!< IRDA MspDeInit callback ID               */
216
 
217
} HAL_IRDA_CallbackIDTypeDef;
218
 
219
/**
220
  * @brief  HAL IRDA Callback pointer definition
221
  */
222
typedef  void (*pIRDA_CallbackTypeDef)(IRDA_HandleTypeDef *hirda);  /*!< pointer to an IRDA callback function */
223
 
224
#endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */
225
 
226
/**
227
  * @}
228
  */
229
 
230
/* Exported constants --------------------------------------------------------*/
231
/** @defgroup IRDA_Exported_Constants IRDA Exported constants
232
  * @{
233
  */
234
/** @defgroup IRDA_Error_Code IRDA Error Code
235
  * @{
236
  */
237
#define HAL_IRDA_ERROR_NONE        0x00000000U   /*!< No error            */
238
#define HAL_IRDA_ERROR_PE          0x00000001U   /*!< Parity error        */
239
#define HAL_IRDA_ERROR_NE          0x00000002U   /*!< Noise error         */
240
#define HAL_IRDA_ERROR_FE          0x00000004U   /*!< Frame error         */
241
#define HAL_IRDA_ERROR_ORE         0x00000008U   /*!< Overrun error       */
242
#define HAL_IRDA_ERROR_DMA         0x00000010U   /*!< DMA transfer error  */
243
#if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
244
#define HAL_IRDA_ERROR_INVALID_CALLBACK   ((uint32_t)0x00000020U)   /*!< Invalid Callback error  */
245
#endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */
246
/**
247
  * @}
248
  */
249
 
250
/** @defgroup IRDA_Word_Length IRDA Word Length
251
  * @{
252
  */
253
#define IRDA_WORDLENGTH_8B         0x00000000U
254
#define IRDA_WORDLENGTH_9B         ((uint32_t)USART_CR1_M)
255
/**
256
  * @}
257
  */
258
 
259
/** @defgroup IRDA_Parity  IRDA Parity
260
  * @{
261
  */
262
#define IRDA_PARITY_NONE           0x00000000U
263
#define IRDA_PARITY_EVEN           ((uint32_t)USART_CR1_PCE)
264
#define IRDA_PARITY_ODD            ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
265
/**
266
  * @}
267
  */
268
 
269
/** @defgroup IRDA_Mode IRDA Transfer Mode
270
  * @{
271
  */
272
#define IRDA_MODE_RX               ((uint32_t)USART_CR1_RE)
273
#define IRDA_MODE_TX               ((uint32_t)USART_CR1_TE)
274
#define IRDA_MODE_TX_RX            ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
275
/**
276
  * @}
277
  */
278
 
279
/** @defgroup IRDA_Low_Power IRDA Low Power
280
  * @{
281
  */
282
#define IRDA_POWERMODE_LOWPOWER    ((uint32_t)USART_CR3_IRLP)
283
#define IRDA_POWERMODE_NORMAL      0x00000000U
284
/**
285
  * @}
286
  */
287
 
288
/** @defgroup IRDA_Flags IRDA Flags
289
  *        Elements values convention: 0xXXXX
290
  *           - 0xXXXX  : Flag mask in the SR register
291
  * @{
292
  */
293
#define IRDA_FLAG_TXE              ((uint32_t)USART_SR_TXE)
294
#define IRDA_FLAG_TC               ((uint32_t)USART_SR_TC)
295
#define IRDA_FLAG_RXNE             ((uint32_t)USART_SR_RXNE)
296
#define IRDA_FLAG_IDLE             ((uint32_t)USART_SR_IDLE)
297
#define IRDA_FLAG_ORE              ((uint32_t)USART_SR_ORE)
298
#define IRDA_FLAG_NE               ((uint32_t)USART_SR_NE)
299
#define IRDA_FLAG_FE               ((uint32_t)USART_SR_FE)
300
#define IRDA_FLAG_PE               ((uint32_t)USART_SR_PE)
301
/**
302
  * @}
303
  */
304
 
305
/** @defgroup IRDA_Interrupt_definition IRDA Interrupt Definitions
306
  *        Elements values convention: 0xY000XXXX
307
  *           - XXXX  : Interrupt mask in the XX register
308
  *           - Y  : Interrupt source register (2bits)
309
  *                 - 01: CR1 register
310
  *                 - 10: CR2 register
311
  *                 - 11: CR3 register
312
  * @{
313
  */
314
#define IRDA_IT_PE                 ((uint32_t)(IRDA_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
315
#define IRDA_IT_TXE                ((uint32_t)(IRDA_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
316
#define IRDA_IT_TC                 ((uint32_t)(IRDA_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
317
#define IRDA_IT_RXNE               ((uint32_t)(IRDA_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
318
#define IRDA_IT_IDLE               ((uint32_t)(IRDA_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
319
 
320
#define IRDA_IT_LBD                ((uint32_t)(IRDA_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))
321
 
322
#define IRDA_IT_CTS                ((uint32_t)(IRDA_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))
323
#define IRDA_IT_ERR                ((uint32_t)(IRDA_CR3_REG_INDEX << 28U | USART_CR3_EIE))
324
/**
325
  * @}
326
  */
327
 
328
/**
329
  * @}
330
  */
331
 
332
/* Exported macro ------------------------------------------------------------*/
333
/** @defgroup IRDA_Exported_Macros IRDA Exported Macros
334
  * @{
335
  */
336
 
337
/** @brief Reset IRDA handle gstate & RxState
338
  * @param  __HANDLE__ specifies the IRDA Handle.
339
  *         IRDA Handle selects the USARTx or UARTy peripheral
340
  *         (USART,UART availability and x,y values depending on device).
341
  * @retval None
342
  */
343
#if USE_HAL_IRDA_REGISTER_CALLBACKS == 1
344
#define __HAL_IRDA_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
345
                                                       (__HANDLE__)->gState = HAL_IRDA_STATE_RESET;      \
346
                                                       (__HANDLE__)->RxState = HAL_IRDA_STATE_RESET;     \
347
                                                       (__HANDLE__)->MspInitCallback = NULL;             \
348
                                                       (__HANDLE__)->MspDeInitCallback = NULL;           \
349
                                                     } while(0U)
350
#else
351
#define __HAL_IRDA_RESET_HANDLE_STATE(__HANDLE__)  do{                                                   \
352
                                                       (__HANDLE__)->gState = HAL_IRDA_STATE_RESET;      \
353
                                                       (__HANDLE__)->RxState = HAL_IRDA_STATE_RESET;     \
354
                                                     } while(0U)
355
#endif /*USE_HAL_IRDA_REGISTER_CALLBACKS  */
356
 
357
/** @brief  Flush the IRDA DR register
358
  * @param  __HANDLE__ specifies the IRDA Handle.
359
  *         IRDA Handle selects the USARTx or UARTy peripheral
360
  *         (USART,UART availability and x,y values depending on device).
361
  * @retval None
362
  */
363
#define __HAL_IRDA_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
364
 
365
/** @brief  Check whether the specified IRDA flag is set or not.
366
  * @param  __HANDLE__ specifies the IRDA Handle.
367
  *         IRDA Handle selects the USARTx or UARTy peripheral
368
  *         (USART,UART availability and x,y values depending on device).
369
  * @param  __FLAG__ specifies the flag to check.
370
  *        This parameter can be one of the following values:
371
  *            @arg IRDA_FLAG_TXE:  Transmit data register empty flag
372
  *            @arg IRDA_FLAG_TC:   Transmission Complete flag
373
  *            @arg IRDA_FLAG_RXNE: Receive data register not empty flag
374
  *            @arg IRDA_FLAG_IDLE: Idle Line detection flag
375
  *            @arg IRDA_FLAG_ORE:  OverRun Error flag
376
  *            @arg IRDA_FLAG_NE:   Noise Error flag
377
  *            @arg IRDA_FLAG_FE:   Framing Error flag
378
  *            @arg IRDA_FLAG_PE:   Parity Error flag
379
  * @retval The new state of __FLAG__ (TRUE or FALSE).
380
  */
381
#define __HAL_IRDA_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
382
 
383
/** @brief  Clear the specified IRDA pending flag.
384
  * @param  __HANDLE__ specifies the IRDA Handle.
385
  *         IRDA Handle selects the USARTx or UARTy peripheral
386
  *         (USART,UART availability and x,y values depending on device).
387
  * @param  __FLAG__ specifies the flag to check.
388
  *          This parameter can be any combination of the following values:
389
  *            @arg IRDA_FLAG_TC:   Transmission Complete flag.
390
  *            @arg IRDA_FLAG_RXNE: Receive data register not empty flag.
391
  *
392
  * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
393
  *          error) and IDLE (Idle line detected) flags are cleared by software
394
  *          sequence: a read operation to USART_SR register followed by a read
395
  *          operation to USART_DR register.
396
  * @note   RXNE flag can be also cleared by a read to the USART_DR register.
397
  * @note   TC flag can be also cleared by software sequence: a read operation to
398
  *          USART_SR register followed by a write operation to USART_DR register.
399
  * @note   TXE flag is cleared only by a write to the USART_DR register.
400
  * @retval None
401
  */
402
#define __HAL_IRDA_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
403
 
404
/** @brief  Clear the IRDA PE pending flag.
405
  * @param  __HANDLE__ specifies the IRDA Handle.
406
  *         IRDA Handle selects the USARTx or UARTy peripheral
407
  *         (USART,UART availability and x,y values depending on device).
408
  * @retval None
409
  */
410
#define __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__)     \
411
  do{                                           \
412
    __IO uint32_t tmpreg = 0x00U;               \
413
    tmpreg = (__HANDLE__)->Instance->SR;        \
414
    tmpreg = (__HANDLE__)->Instance->DR;        \
415
    UNUSED(tmpreg);                             \
416
  } while(0U)
417
 
418
/** @brief  Clear the IRDA FE pending flag.
419
  * @param  __HANDLE__ specifies the IRDA Handle.
420
  *         IRDA Handle selects the USARTx or UARTy peripheral
421
  *         (USART,UART availability and x,y values depending on device).
422
  * @retval None
423
  */
424
#define __HAL_IRDA_CLEAR_FEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__)
425
 
426
/** @brief  Clear the IRDA NE pending flag.
427
  * @param  __HANDLE__ specifies the IRDA Handle.
428
  *         IRDA Handle selects the USARTx or UARTy peripheral
429
  *         (USART,UART availability and x,y values depending on device).
430
  * @retval None
431
  */
432
#define __HAL_IRDA_CLEAR_NEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__)
433
 
434
/** @brief  Clear the IRDA ORE pending flag.
435
  * @param  __HANDLE__ specifies the IRDA Handle.
436
  *         IRDA Handle selects the USARTx or UARTy peripheral
437
  *         (USART,UART availability and x,y values depending on device).
438
  * @retval None
439
  */
440
#define __HAL_IRDA_CLEAR_OREFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__)
441
 
442
/** @brief  Clear the IRDA IDLE pending flag.
443
  * @param  __HANDLE__ specifies the IRDA Handle.
444
  *         IRDA Handle selects the USARTx or UARTy peripheral
445
  *         (USART,UART availability and x,y values depending on device).
446
  * @retval None
447
  */
448
#define __HAL_IRDA_CLEAR_IDLEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__)
449
 
450
/** @brief  Enable the specified IRDA interrupt.
451
  * @param  __HANDLE__ specifies the IRDA Handle.
452
  *         IRDA Handle selects the USARTx or UARTy peripheral
453
  *         (USART,UART availability and x,y values depending on device).
454
  * @param  __INTERRUPT__ specifies the IRDA interrupt source to enable.
455
  *          This parameter can be one of the following values:
456
  *            @arg IRDA_IT_TXE:  Transmit Data Register empty interrupt
457
  *            @arg IRDA_IT_TC:   Transmission complete interrupt
458
  *            @arg IRDA_IT_RXNE: Receive Data register not empty interrupt
459
  *            @arg IRDA_IT_IDLE: Idle line detection interrupt
460
  *            @arg IRDA_IT_PE:   Parity Error interrupt
461
  *            @arg IRDA_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
462
  * @retval None
463
  */
464
#define __HAL_IRDA_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28U) == IRDA_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & IRDA_IT_MASK)): \
465
                                                           (((__INTERRUPT__) >> 28U) == IRDA_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |=  ((__INTERRUPT__) & IRDA_IT_MASK)): \
466
                                                            ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & IRDA_IT_MASK)))
467
/** @brief  Disable the specified IRDA interrupt.
468
  * @param  __HANDLE__ specifies the IRDA Handle.
469
  *         IRDA Handle selects the USARTx or UARTy peripheral
470
  *         (USART,UART availability and x,y values depending on device).
471
  * @param  __INTERRUPT__ specifies the IRDA interrupt source to disable.
472
  *          This parameter can be one of the following values:
473
  *            @arg IRDA_IT_TXE:  Transmit Data Register empty interrupt
474
  *            @arg IRDA_IT_TC:   Transmission complete interrupt
475
  *            @arg IRDA_IT_RXNE: Receive Data register not empty interrupt
476
  *            @arg IRDA_IT_IDLE: Idle line detection interrupt
477
  *            @arg IRDA_IT_PE:   Parity Error interrupt
478
  *            @arg IRDA_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
479
  * @retval None
480
  */
481
#define __HAL_IRDA_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28U) == IRDA_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & IRDA_IT_MASK)): \
482
                                                           (((__INTERRUPT__) >> 28U) == IRDA_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & IRDA_IT_MASK)): \
483
                                                           ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & IRDA_IT_MASK)))
484
 
485
/** @brief  Check whether the specified IRDA interrupt has occurred or not.
486
  * @param  __HANDLE__ specifies the IRDA Handle.
487
  *         IRDA Handle selects the USARTx or UARTy peripheral
488
  *         (USART,UART availability and x,y values depending on device).
489
  * @param  __IT__ specifies the IRDA interrupt source to check.
490
  *          This parameter can be one of the following values:
491
  *            @arg IRDA_IT_TXE: Transmit Data Register empty interrupt
492
  *            @arg IRDA_IT_TC:  Transmission complete interrupt
493
  *            @arg IRDA_IT_RXNE: Receive Data register not empty interrupt
494
  *            @arg IRDA_IT_IDLE: Idle line detection interrupt
495
  *            @arg IRDA_IT_ERR: Error interrupt
496
  *            @arg IRDA_IT_PE: Parity Error interrupt
497
  * @retval The new state of __IT__ (TRUE or FALSE).
498
  */
499
#define __HAL_IRDA_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == IRDA_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == IRDA_CR2_REG_INDEX)? \
500
                                                      (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & IRDA_IT_MASK))
501
 
502
/** @brief  Enable UART/USART associated to IRDA Handle
503
  * @param  __HANDLE__ specifies the IRDA Handle.
504
  *         IRDA Handle selects the USARTx or UARTy peripheral
505
  *         (USART,UART availability and x,y values depending on device).
506
  * @retval None
507
  */
508
#define __HAL_IRDA_ENABLE(__HANDLE__)                   (SET_BIT((__HANDLE__)->Instance->CR1, USART_CR1_UE))
509
 
510
/** @brief  Disable UART/USART associated to IRDA Handle
511
  * @param  __HANDLE__ specifies the IRDA Handle.
512
  *         IRDA Handle selects the USARTx or UARTy peripheral
513
  *         (USART,UART availability and x,y values depending on device).
514
  * @retval None
515
  */
516
#define __HAL_IRDA_DISABLE(__HANDLE__)                  (CLEAR_BIT((__HANDLE__)->Instance->CR1, USART_CR1_UE))
517
 
518
/**
519
  * @}
520
  */
521
 
522
/* Exported functions --------------------------------------------------------*/
523
/** @addtogroup IRDA_Exported_Functions
524
  * @{
525
  */
526
 
527
/** @addtogroup IRDA_Exported_Functions_Group1
528
  * @{
529
  */
530
/* Initialization/de-initialization functions  **********************************/
531
HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda);
532
HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda);
533
void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda);
534
void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda);
535
 
536
#if (USE_HAL_IRDA_REGISTER_CALLBACKS == 1)
537
/* Callbacks Register/UnRegister functions  ***********************************/
538
HAL_StatusTypeDef HAL_IRDA_RegisterCallback(IRDA_HandleTypeDef *hirda, HAL_IRDA_CallbackIDTypeDef CallbackID, pIRDA_CallbackTypeDef pCallback);
539
HAL_StatusTypeDef HAL_IRDA_UnRegisterCallback(IRDA_HandleTypeDef *hirda, HAL_IRDA_CallbackIDTypeDef CallbackID);
540
#endif /* USE_HAL_IRDA_REGISTER_CALLBACKS */
541
 
542
/**
543
  * @}
544
  */
545
 
546
/** @addtogroup IRDA_Exported_Functions_Group2
547
  * @{
548
  */
549
/* IO operation functions *******************************************************/
550
HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
551
HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout);
552
HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size);
553
HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size);
554
HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size);
555
HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size);
556
HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda);
557
HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda);
558
HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda);
559
/* Transfer Abort functions */
560
HAL_StatusTypeDef HAL_IRDA_Abort(IRDA_HandleTypeDef *hirda);
561
HAL_StatusTypeDef HAL_IRDA_AbortTransmit(IRDA_HandleTypeDef *hirda);
562
HAL_StatusTypeDef HAL_IRDA_AbortReceive(IRDA_HandleTypeDef *hirda);
563
HAL_StatusTypeDef HAL_IRDA_Abort_IT(IRDA_HandleTypeDef *hirda);
564
HAL_StatusTypeDef HAL_IRDA_AbortTransmit_IT(IRDA_HandleTypeDef *hirda);
565
HAL_StatusTypeDef HAL_IRDA_AbortReceive_IT(IRDA_HandleTypeDef *hirda);
566
 
567
void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda);
568
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda);
569
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda);
570
void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda);
571
void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda);
572
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda);
573
void HAL_IRDA_AbortCpltCallback(IRDA_HandleTypeDef *hirda);
574
void HAL_IRDA_AbortTransmitCpltCallback(IRDA_HandleTypeDef *hirda);
575
void HAL_IRDA_AbortReceiveCpltCallback(IRDA_HandleTypeDef *hirda);
576
/**
577
  * @}
578
  */
579
 
580
/** @addtogroup IRDA_Exported_Functions_Group3
581
  * @{
582
  */
583
/* Peripheral State functions  **************************************************/
584
HAL_IRDA_StateTypeDef HAL_IRDA_GetState(const IRDA_HandleTypeDef *hirda);
585
uint32_t HAL_IRDA_GetError(const IRDA_HandleTypeDef *hirda);
586
/**
587
  * @}
588
  */
589
 
590
/**
591
  * @}
592
  */
593
 
594
/* Private types -------------------------------------------------------------*/
595
/* Private variables ---------------------------------------------------------*/
596
/* Private constants ---------------------------------------------------------*/
597
/** @defgroup IRDA_Private_Constants IRDA Private Constants
598
  * @{
599
  */
600
 
601
/** @brief IRDA interruptions flag mask
602
  *
603
  */
604
#define IRDA_IT_MASK  ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \
605
                                  USART_CR1_IDLEIE | USART_CR2_LBDIE | USART_CR3_CTSIE | USART_CR3_EIE )
606
 
607
#define IRDA_CR1_REG_INDEX         1U
608
#define IRDA_CR2_REG_INDEX         2U
609
#define IRDA_CR3_REG_INDEX         3U
610
/**
611
  * @}
612
  */
613
 
614
/* Private macros --------------------------------------------------------*/
615
/** @defgroup IRDA_Private_Macros   IRDA Private Macros
616
  * @{
617
  */
618
#define IS_IRDA_WORD_LENGTH(LENGTH)   (((LENGTH) == IRDA_WORDLENGTH_8B) || \
619
                                       ((LENGTH) == IRDA_WORDLENGTH_9B))
620
 
621
#define IS_IRDA_PARITY(PARITY)        (((PARITY) == IRDA_PARITY_NONE) || \
622
                                       ((PARITY) == IRDA_PARITY_EVEN) || \
623
                                       ((PARITY) == IRDA_PARITY_ODD))
624
 
625
#define IS_IRDA_MODE(MODE)            ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00000000U))
626
 
627
#define IS_IRDA_POWERMODE(MODE)       (((MODE) == IRDA_POWERMODE_LOWPOWER) || \
628
                                       ((MODE) == IRDA_POWERMODE_NORMAL))
629
 
630
#define IS_IRDA_BAUDRATE(BAUDRATE)    ((BAUDRATE) < 115201U)
631
 
632
#define IRDA_DIV(_PCLK_, _BAUD_)      (((_PCLK_)*25U)/(4U*(_BAUD_)))
633
 
634
#define IRDA_DIVMANT(_PCLK_, _BAUD_)  (IRDA_DIV((_PCLK_), (_BAUD_))/100U)
635
 
636
#define IRDA_DIVFRAQ(_PCLK_, _BAUD_)  ((((IRDA_DIV((_PCLK_), (_BAUD_)) - (IRDA_DIVMANT((_PCLK_), (_BAUD_)) * 100U)) * 16U) + 50U) / 100U)
637
 
638
/* UART BRR = mantissa + overflow + fraction
639
            = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */
640
#define IRDA_BRR(_PCLK_, _BAUD_)      (((IRDA_DIVMANT((_PCLK_), (_BAUD_)) << 4U) + \
641
                                        (IRDA_DIVFRAQ((_PCLK_), (_BAUD_)) & 0xF0U)) + \
642
                                        (IRDA_DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0FU))
643
 
644
/**
645
  * @}
646
  */
647
 
648
/* Private functions ---------------------------------------------------------*/
649
/** @defgroup IRDA_Private_Functions IRDA Private Functions
650
  * @{
651
  */
652
 
653
/**
654
  * @}
655
  */
656
 
657
/**
658
  * @}
659
  */
660
 
661
/**
662
  * @}
663
  */
664
 
665
#ifdef __cplusplus
666
}
667
#endif
668
 
669
#endif /* __STM32F1xx_HAL_IRDA_H */
670