TUKS MCU Introductory course / TUKS-COURSE-TIMER
Committer:
elmot
Date:
Fri Feb 24 21:13:56 2017 +0000
Revision:
1:d0dfbce63a89
Ready-to-copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elmot 1:d0dfbce63a89 1 /**
elmot 1:d0dfbce63a89 2 ******************************************************************************
elmot 1:d0dfbce63a89 3 * @file stm32l4xx_hal_sai.h
elmot 1:d0dfbce63a89 4 * @author MCD Application Team
elmot 1:d0dfbce63a89 5 * @version V1.5.1
elmot 1:d0dfbce63a89 6 * @date 31-May-2016
elmot 1:d0dfbce63a89 7 * @brief Header file of SAI HAL module.
elmot 1:d0dfbce63a89 8 ******************************************************************************
elmot 1:d0dfbce63a89 9 * @attention
elmot 1:d0dfbce63a89 10 *
elmot 1:d0dfbce63a89 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
elmot 1:d0dfbce63a89 12 *
elmot 1:d0dfbce63a89 13 * Redistribution and use in source and binary forms, with or without modification,
elmot 1:d0dfbce63a89 14 * are permitted provided that the following conditions are met:
elmot 1:d0dfbce63a89 15 * 1. Redistributions of source code must retain the above copyright notice,
elmot 1:d0dfbce63a89 16 * this list of conditions and the following disclaimer.
elmot 1:d0dfbce63a89 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
elmot 1:d0dfbce63a89 18 * this list of conditions and the following disclaimer in the documentation
elmot 1:d0dfbce63a89 19 * and/or other materials provided with the distribution.
elmot 1:d0dfbce63a89 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
elmot 1:d0dfbce63a89 21 * may be used to endorse or promote products derived from this software
elmot 1:d0dfbce63a89 22 * without specific prior written permission.
elmot 1:d0dfbce63a89 23 *
elmot 1:d0dfbce63a89 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
elmot 1:d0dfbce63a89 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
elmot 1:d0dfbce63a89 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
elmot 1:d0dfbce63a89 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
elmot 1:d0dfbce63a89 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
elmot 1:d0dfbce63a89 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
elmot 1:d0dfbce63a89 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
elmot 1:d0dfbce63a89 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
elmot 1:d0dfbce63a89 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
elmot 1:d0dfbce63a89 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
elmot 1:d0dfbce63a89 34 *
elmot 1:d0dfbce63a89 35 ******************************************************************************
elmot 1:d0dfbce63a89 36 */
elmot 1:d0dfbce63a89 37
elmot 1:d0dfbce63a89 38 /* Define to prevent recursive inclusion -------------------------------------*/
elmot 1:d0dfbce63a89 39 #ifndef __STM32L4xx_HAL_SAI_H
elmot 1:d0dfbce63a89 40 #define __STM32L4xx_HAL_SAI_H
elmot 1:d0dfbce63a89 41
elmot 1:d0dfbce63a89 42 #ifdef __cplusplus
elmot 1:d0dfbce63a89 43 extern "C" {
elmot 1:d0dfbce63a89 44 #endif
elmot 1:d0dfbce63a89 45
elmot 1:d0dfbce63a89 46 /* Includes ------------------------------------------------------------------*/
elmot 1:d0dfbce63a89 47 #include "stm32l4xx_hal_def.h"
elmot 1:d0dfbce63a89 48
elmot 1:d0dfbce63a89 49 /** @addtogroup STM32L4xx_HAL_Driver
elmot 1:d0dfbce63a89 50 * @{
elmot 1:d0dfbce63a89 51 */
elmot 1:d0dfbce63a89 52
elmot 1:d0dfbce63a89 53 /** @addtogroup SAI
elmot 1:d0dfbce63a89 54 * @{
elmot 1:d0dfbce63a89 55 */
elmot 1:d0dfbce63a89 56
elmot 1:d0dfbce63a89 57 /* Exported types ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 58 /** @defgroup SAI_Exported_Types SAI Exported Types
elmot 1:d0dfbce63a89 59 * @{
elmot 1:d0dfbce63a89 60 */
elmot 1:d0dfbce63a89 61
elmot 1:d0dfbce63a89 62 /**
elmot 1:d0dfbce63a89 63 * @brief HAL State structures definition
elmot 1:d0dfbce63a89 64 */
elmot 1:d0dfbce63a89 65 typedef enum
elmot 1:d0dfbce63a89 66 {
elmot 1:d0dfbce63a89 67 HAL_SAI_STATE_RESET = 0x00U, /*!< SAI not yet initialized or disabled */
elmot 1:d0dfbce63a89 68 HAL_SAI_STATE_READY = 0x01U, /*!< SAI initialized and ready for use */
elmot 1:d0dfbce63a89 69 HAL_SAI_STATE_BUSY = 0x02U, /*!< SAI internal process is ongoing */
elmot 1:d0dfbce63a89 70 HAL_SAI_STATE_BUSY_TX = 0x12U, /*!< Data transmission process is ongoing */
elmot 1:d0dfbce63a89 71 HAL_SAI_STATE_BUSY_RX = 0x22U, /*!< Data reception process is ongoing */
elmot 1:d0dfbce63a89 72 }HAL_SAI_StateTypeDef;
elmot 1:d0dfbce63a89 73
elmot 1:d0dfbce63a89 74 /**
elmot 1:d0dfbce63a89 75 * @brief SAI Callback prototype
elmot 1:d0dfbce63a89 76 */
elmot 1:d0dfbce63a89 77 typedef void (*SAIcallback)(void);
elmot 1:d0dfbce63a89 78
elmot 1:d0dfbce63a89 79 /** @defgroup SAI_Init_Structure_definition SAI Init Structure definition
elmot 1:d0dfbce63a89 80 * @brief SAI Init Structure definition
elmot 1:d0dfbce63a89 81 * @{
elmot 1:d0dfbce63a89 82 */
elmot 1:d0dfbce63a89 83 typedef struct
elmot 1:d0dfbce63a89 84 {
elmot 1:d0dfbce63a89 85 uint32_t AudioMode; /*!< Specifies the SAI Block audio Mode.
elmot 1:d0dfbce63a89 86 This parameter can be a value of @ref SAI_Block_Mode */
elmot 1:d0dfbce63a89 87
elmot 1:d0dfbce63a89 88 uint32_t Synchro; /*!< Specifies SAI Block synchronization
elmot 1:d0dfbce63a89 89 This parameter can be a value of @ref SAI_Block_Synchronization */
elmot 1:d0dfbce63a89 90
elmot 1:d0dfbce63a89 91 uint32_t SynchroExt; /*!< Specifies SAI external output synchronization, this setup is common
elmot 1:d0dfbce63a89 92 for BlockA and BlockB
elmot 1:d0dfbce63a89 93 This parameter can be a value of @ref SAI_Block_SyncExt
elmot 1:d0dfbce63a89 94 @note: If both audio blocks of same SAI are used, this parameter has
elmot 1:d0dfbce63a89 95 to be set to the same value for each audio block */
elmot 1:d0dfbce63a89 96
elmot 1:d0dfbce63a89 97 uint32_t OutputDrive; /*!< Specifies when SAI Block outputs are driven.
elmot 1:d0dfbce63a89 98 This parameter can be a value of @ref SAI_Block_Output_Drive
elmot 1:d0dfbce63a89 99 @note this value has to be set before enabling the audio block
elmot 1:d0dfbce63a89 100 but after the audio block configuration. */
elmot 1:d0dfbce63a89 101
elmot 1:d0dfbce63a89 102 uint32_t NoDivider; /*!< Specifies whether master clock will be divided or not.
elmot 1:d0dfbce63a89 103 This parameter can be a value of @ref SAI_Block_NoDivider
elmot 1:d0dfbce63a89 104 @note: If bit NODIV in the SAI_xCR1 register is cleared, the frame length
elmot 1:d0dfbce63a89 105 should be aligned to a number equal to a power of 2, from 8 to 256.
elmot 1:d0dfbce63a89 106 If bit NODIV in the SAI_xCR1 register is set, the frame length can
elmot 1:d0dfbce63a89 107 take any of the values without constraint since the input clock of
elmot 1:d0dfbce63a89 108 the audio block should be equal to the bit clock.
elmot 1:d0dfbce63a89 109 There is no MCLK_x clock which can be output. */
elmot 1:d0dfbce63a89 110
elmot 1:d0dfbce63a89 111 uint32_t FIFOThreshold; /*!< Specifies SAI Block FIFO threshold.
elmot 1:d0dfbce63a89 112 This parameter can be a value of @ref SAI_Block_Fifo_Threshold */
elmot 1:d0dfbce63a89 113
elmot 1:d0dfbce63a89 114 uint32_t AudioFrequency; /*!< Specifies the audio frequency sampling.
elmot 1:d0dfbce63a89 115 This parameter can be a value of @ref SAI_Audio_Frequency */
elmot 1:d0dfbce63a89 116
elmot 1:d0dfbce63a89 117 uint32_t Mckdiv; /*!< Specifies the master clock divider, the parameter will be used if for
elmot 1:d0dfbce63a89 118 AudioFrequency the user choice
elmot 1:d0dfbce63a89 119 This parameter must be a number between Min_Data = 0 and Max_Data = 15 */
elmot 1:d0dfbce63a89 120
elmot 1:d0dfbce63a89 121 uint32_t MonoStereoMode; /*!< Specifies if the mono or stereo mode is selected.
elmot 1:d0dfbce63a89 122 This parameter can be a value of @ref SAI_Mono_Stereo_Mode */
elmot 1:d0dfbce63a89 123
elmot 1:d0dfbce63a89 124 uint32_t CompandingMode; /*!< Specifies the companding mode type.
elmot 1:d0dfbce63a89 125 This parameter can be a value of @ref SAI_Block_Companding_Mode */
elmot 1:d0dfbce63a89 126
elmot 1:d0dfbce63a89 127 uint32_t TriState; /*!< Specifies the companding mode type.
elmot 1:d0dfbce63a89 128 This parameter can be a value of @ref SAI_TRIState_Management */
elmot 1:d0dfbce63a89 129
elmot 1:d0dfbce63a89 130 /* This part of the structure is automatically filled if your are using the high level initialisation
elmot 1:d0dfbce63a89 131 function HAL_SAI_InitProtocol */
elmot 1:d0dfbce63a89 132
elmot 1:d0dfbce63a89 133 uint32_t Protocol; /*!< Specifies the SAI Block protocol.
elmot 1:d0dfbce63a89 134 This parameter can be a value of @ref SAI_Block_Protocol */
elmot 1:d0dfbce63a89 135
elmot 1:d0dfbce63a89 136 uint32_t DataSize; /*!< Specifies the SAI Block data size.
elmot 1:d0dfbce63a89 137 This parameter can be a value of @ref SAI_Block_Data_Size */
elmot 1:d0dfbce63a89 138
elmot 1:d0dfbce63a89 139 uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit.
elmot 1:d0dfbce63a89 140 This parameter can be a value of @ref SAI_Block_MSB_LSB_transmission */
elmot 1:d0dfbce63a89 141
elmot 1:d0dfbce63a89 142 uint32_t ClockStrobing; /*!< Specifies the SAI Block clock strobing edge sensitivity.
elmot 1:d0dfbce63a89 143 This parameter can be a value of @ref SAI_Block_Clock_Strobing */
elmot 1:d0dfbce63a89 144 }SAI_InitTypeDef;
elmot 1:d0dfbce63a89 145 /**
elmot 1:d0dfbce63a89 146 * @}
elmot 1:d0dfbce63a89 147 */
elmot 1:d0dfbce63a89 148
elmot 1:d0dfbce63a89 149 /** @defgroup SAI_Frame_Structure_definition SAI Frame Structure definition
elmot 1:d0dfbce63a89 150 * @brief SAI Frame Init structure definition
elmot 1:d0dfbce63a89 151 * @{
elmot 1:d0dfbce63a89 152 */
elmot 1:d0dfbce63a89 153 typedef struct
elmot 1:d0dfbce63a89 154 {
elmot 1:d0dfbce63a89 155
elmot 1:d0dfbce63a89 156 uint32_t FrameLength; /*!< Specifies the Frame length, the number of SCK clocks for each audio frame.
elmot 1:d0dfbce63a89 157 This parameter must be a number between Min_Data = 8 and Max_Data = 256.
elmot 1:d0dfbce63a89 158 @note: If master clock MCLK_x pin is declared as an output, the frame length
elmot 1:d0dfbce63a89 159 should be aligned to a number equal to power of 2 in order to keep
elmot 1:d0dfbce63a89 160 in an audio frame, an integer number of MCLK pulses by bit Clock. */
elmot 1:d0dfbce63a89 161
elmot 1:d0dfbce63a89 162 uint32_t ActiveFrameLength; /*!< Specifies the Frame synchronization active level length.
elmot 1:d0dfbce63a89 163 This Parameter specifies the length in number of bit clock (SCK + 1)
elmot 1:d0dfbce63a89 164 of the active level of FS signal in audio frame.
elmot 1:d0dfbce63a89 165 This parameter must be a number between Min_Data = 1 and Max_Data = 128 */
elmot 1:d0dfbce63a89 166
elmot 1:d0dfbce63a89 167 uint32_t FSDefinition; /*!< Specifies the Frame synchronization definition.
elmot 1:d0dfbce63a89 168 This parameter can be a value of @ref SAI_Block_FS_Definition */
elmot 1:d0dfbce63a89 169
elmot 1:d0dfbce63a89 170 uint32_t FSPolarity; /*!< Specifies the Frame synchronization Polarity.
elmot 1:d0dfbce63a89 171 This parameter can be a value of @ref SAI_Block_FS_Polarity */
elmot 1:d0dfbce63a89 172
elmot 1:d0dfbce63a89 173 uint32_t FSOffset; /*!< Specifies the Frame synchronization Offset.
elmot 1:d0dfbce63a89 174 This parameter can be a value of @ref SAI_Block_FS_Offset */
elmot 1:d0dfbce63a89 175
elmot 1:d0dfbce63a89 176 }SAI_FrameInitTypeDef;
elmot 1:d0dfbce63a89 177 /**
elmot 1:d0dfbce63a89 178 * @}
elmot 1:d0dfbce63a89 179 */
elmot 1:d0dfbce63a89 180
elmot 1:d0dfbce63a89 181 /** @defgroup SAI_Slot_Structure_definition SAI Slot Structure definition
elmot 1:d0dfbce63a89 182 * @brief SAI Block Slot Init Structure definition
elmot 1:d0dfbce63a89 183 * @{
elmot 1:d0dfbce63a89 184 */
elmot 1:d0dfbce63a89 185 typedef struct
elmot 1:d0dfbce63a89 186 {
elmot 1:d0dfbce63a89 187 uint32_t FirstBitOffset; /*!< Specifies the position of first data transfer bit in the slot.
elmot 1:d0dfbce63a89 188 This parameter must be a number between Min_Data = 0 and Max_Data = 24 */
elmot 1:d0dfbce63a89 189
elmot 1:d0dfbce63a89 190 uint32_t SlotSize; /*!< Specifies the Slot Size.
elmot 1:d0dfbce63a89 191 This parameter can be a value of @ref SAI_Block_Slot_Size */
elmot 1:d0dfbce63a89 192
elmot 1:d0dfbce63a89 193 uint32_t SlotNumber; /*!< Specifies the number of slot in the audio frame.
elmot 1:d0dfbce63a89 194 This parameter must be a number between Min_Data = 1 and Max_Data = 16 */
elmot 1:d0dfbce63a89 195
elmot 1:d0dfbce63a89 196 uint32_t SlotActive; /*!< Specifies the slots in audio frame that will be activated.
elmot 1:d0dfbce63a89 197 This parameter can be a value of @ref SAI_Block_Slot_Active */
elmot 1:d0dfbce63a89 198 }SAI_SlotInitTypeDef;
elmot 1:d0dfbce63a89 199 /**
elmot 1:d0dfbce63a89 200 * @}
elmot 1:d0dfbce63a89 201 */
elmot 1:d0dfbce63a89 202
elmot 1:d0dfbce63a89 203 /** @defgroup SAI_Handle_Structure_definition SAI Handle Structure definition
elmot 1:d0dfbce63a89 204 * @brief SAI handle Structure definition
elmot 1:d0dfbce63a89 205 * @{
elmot 1:d0dfbce63a89 206 */
elmot 1:d0dfbce63a89 207 typedef struct __SAI_HandleTypeDef
elmot 1:d0dfbce63a89 208 {
elmot 1:d0dfbce63a89 209 SAI_Block_TypeDef *Instance; /*!< SAI Blockx registers base address */
elmot 1:d0dfbce63a89 210
elmot 1:d0dfbce63a89 211 SAI_InitTypeDef Init; /*!< SAI communication parameters */
elmot 1:d0dfbce63a89 212
elmot 1:d0dfbce63a89 213 SAI_FrameInitTypeDef FrameInit; /*!< SAI Frame configuration parameters */
elmot 1:d0dfbce63a89 214
elmot 1:d0dfbce63a89 215 SAI_SlotInitTypeDef SlotInit; /*!< SAI Slot configuration parameters */
elmot 1:d0dfbce63a89 216
elmot 1:d0dfbce63a89 217 uint8_t *pBuffPtr; /*!< Pointer to SAI transfer Buffer */
elmot 1:d0dfbce63a89 218
elmot 1:d0dfbce63a89 219 uint16_t XferSize; /*!< SAI transfer size */
elmot 1:d0dfbce63a89 220
elmot 1:d0dfbce63a89 221 uint16_t XferCount; /*!< SAI transfer counter */
elmot 1:d0dfbce63a89 222
elmot 1:d0dfbce63a89 223 DMA_HandleTypeDef *hdmatx; /*!< SAI Tx DMA handle parameters */
elmot 1:d0dfbce63a89 224
elmot 1:d0dfbce63a89 225 DMA_HandleTypeDef *hdmarx; /*!< SAI Rx DMA handle parameters */
elmot 1:d0dfbce63a89 226
elmot 1:d0dfbce63a89 227 SAIcallback mutecallback; /*!< SAI mute callback */
elmot 1:d0dfbce63a89 228
elmot 1:d0dfbce63a89 229 void (*InterruptServiceRoutine)(struct __SAI_HandleTypeDef *hsai); /* function pointer for IRQ handler */
elmot 1:d0dfbce63a89 230
elmot 1:d0dfbce63a89 231 HAL_LockTypeDef Lock; /*!< SAI locking object */
elmot 1:d0dfbce63a89 232
elmot 1:d0dfbce63a89 233 __IO HAL_SAI_StateTypeDef State; /*!< SAI communication state */
elmot 1:d0dfbce63a89 234
elmot 1:d0dfbce63a89 235 __IO uint32_t ErrorCode; /*!< SAI Error code */
elmot 1:d0dfbce63a89 236 }SAI_HandleTypeDef;
elmot 1:d0dfbce63a89 237 /**
elmot 1:d0dfbce63a89 238 * @}
elmot 1:d0dfbce63a89 239 */
elmot 1:d0dfbce63a89 240
elmot 1:d0dfbce63a89 241 /**
elmot 1:d0dfbce63a89 242 * @}
elmot 1:d0dfbce63a89 243 */
elmot 1:d0dfbce63a89 244
elmot 1:d0dfbce63a89 245 /* Exported constants --------------------------------------------------------*/
elmot 1:d0dfbce63a89 246
elmot 1:d0dfbce63a89 247 /** @defgroup SAI_Exported_Constants SAI Exported Constants
elmot 1:d0dfbce63a89 248 * @{
elmot 1:d0dfbce63a89 249 */
elmot 1:d0dfbce63a89 250
elmot 1:d0dfbce63a89 251 /** @defgroup SAI_Error_Code SAI Error Code
elmot 1:d0dfbce63a89 252 * @{
elmot 1:d0dfbce63a89 253 */
elmot 1:d0dfbce63a89 254 #define HAL_SAI_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */
elmot 1:d0dfbce63a89 255 #define HAL_SAI_ERROR_OVR ((uint32_t)0x00000001U) /*!< Overrun Error */
elmot 1:d0dfbce63a89 256 #define HAL_SAI_ERROR_UDR ((uint32_t)0x00000002U) /*!< Underrun error */
elmot 1:d0dfbce63a89 257 #define HAL_SAI_ERROR_AFSDET ((uint32_t)0x00000004U) /*!< Anticipated Frame synchronisation detection */
elmot 1:d0dfbce63a89 258 #define HAL_SAI_ERROR_LFSDET ((uint32_t)0x00000008U) /*!< Late Frame synchronisation detection */
elmot 1:d0dfbce63a89 259 #define HAL_SAI_ERROR_CNREADY ((uint32_t)0x00000010U) /*!< codec not ready */
elmot 1:d0dfbce63a89 260 #define HAL_SAI_ERROR_WCKCFG ((uint32_t)0x00000020U) /*!< Wrong clock configuration */
elmot 1:d0dfbce63a89 261 #define HAL_SAI_ERROR_TIMEOUT ((uint32_t)0x00000040U) /*!< Timeout error */
elmot 1:d0dfbce63a89 262 #define HAL_SAI_ERROR_DMA ((uint32_t)0x00000080U) /*!< DMA error */
elmot 1:d0dfbce63a89 263 /**
elmot 1:d0dfbce63a89 264 * @}
elmot 1:d0dfbce63a89 265 */
elmot 1:d0dfbce63a89 266
elmot 1:d0dfbce63a89 267 /** @defgroup SAI_Block_SyncExt SAI External synchronisation
elmot 1:d0dfbce63a89 268 * @{
elmot 1:d0dfbce63a89 269 */
elmot 1:d0dfbce63a89 270 #define SAI_SYNCEXT_DISABLE 0
elmot 1:d0dfbce63a89 271 #define SAI_SYNCEXT_OUTBLOCKA_ENABLE 1
elmot 1:d0dfbce63a89 272 #define SAI_SYNCEXT_OUTBLOCKB_ENABLE 2
elmot 1:d0dfbce63a89 273 /**
elmot 1:d0dfbce63a89 274 * @}
elmot 1:d0dfbce63a89 275 */
elmot 1:d0dfbce63a89 276
elmot 1:d0dfbce63a89 277 /** @defgroup SAI_Protocol SAI Supported protocol
elmot 1:d0dfbce63a89 278 * @{
elmot 1:d0dfbce63a89 279 */
elmot 1:d0dfbce63a89 280 #define SAI_I2S_STANDARD 0
elmot 1:d0dfbce63a89 281 #define SAI_I2S_MSBJUSTIFIED 1
elmot 1:d0dfbce63a89 282 #define SAI_I2S_LSBJUSTIFIED 2
elmot 1:d0dfbce63a89 283 #define SAI_PCM_LONG 3
elmot 1:d0dfbce63a89 284 #define SAI_PCM_SHORT 4
elmot 1:d0dfbce63a89 285 /**
elmot 1:d0dfbce63a89 286 * @}
elmot 1:d0dfbce63a89 287 */
elmot 1:d0dfbce63a89 288
elmot 1:d0dfbce63a89 289 /** @defgroup SAI_Protocol_DataSize SAI protocol data size
elmot 1:d0dfbce63a89 290 * @{
elmot 1:d0dfbce63a89 291 */
elmot 1:d0dfbce63a89 292 #define SAI_PROTOCOL_DATASIZE_16BIT 0
elmot 1:d0dfbce63a89 293 #define SAI_PROTOCOL_DATASIZE_16BITEXTENDED 1
elmot 1:d0dfbce63a89 294 #define SAI_PROTOCOL_DATASIZE_24BIT 2
elmot 1:d0dfbce63a89 295 #define SAI_PROTOCOL_DATASIZE_32BIT 3
elmot 1:d0dfbce63a89 296 /**
elmot 1:d0dfbce63a89 297 * @}
elmot 1:d0dfbce63a89 298 */
elmot 1:d0dfbce63a89 299
elmot 1:d0dfbce63a89 300 /** @defgroup SAI_Audio_Frequency SAI Audio Frequency
elmot 1:d0dfbce63a89 301 * @{
elmot 1:d0dfbce63a89 302 */
elmot 1:d0dfbce63a89 303 #define SAI_AUDIO_FREQUENCY_192K ((uint32_t)192000U)
elmot 1:d0dfbce63a89 304 #define SAI_AUDIO_FREQUENCY_96K ((uint32_t)96000U)
elmot 1:d0dfbce63a89 305 #define SAI_AUDIO_FREQUENCY_48K ((uint32_t)48000U)
elmot 1:d0dfbce63a89 306 #define SAI_AUDIO_FREQUENCY_44K ((uint32_t)44100U)
elmot 1:d0dfbce63a89 307 #define SAI_AUDIO_FREQUENCY_32K ((uint32_t)32000U)
elmot 1:d0dfbce63a89 308 #define SAI_AUDIO_FREQUENCY_22K ((uint32_t)22050U)
elmot 1:d0dfbce63a89 309 #define SAI_AUDIO_FREQUENCY_16K ((uint32_t)16000U)
elmot 1:d0dfbce63a89 310 #define SAI_AUDIO_FREQUENCY_11K ((uint32_t)11025U)
elmot 1:d0dfbce63a89 311 #define SAI_AUDIO_FREQUENCY_8K ((uint32_t)8000U)
elmot 1:d0dfbce63a89 312 #define SAI_AUDIO_FREQUENCY_MCKDIV ((uint32_t)0U)
elmot 1:d0dfbce63a89 313 /**
elmot 1:d0dfbce63a89 314 * @}
elmot 1:d0dfbce63a89 315 */
elmot 1:d0dfbce63a89 316
elmot 1:d0dfbce63a89 317 /** @defgroup SAI_Block_Mode SAI Block Mode
elmot 1:d0dfbce63a89 318 * @{
elmot 1:d0dfbce63a89 319 */
elmot 1:d0dfbce63a89 320 #define SAI_MODEMASTER_TX ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 321 #define SAI_MODEMASTER_RX ((uint32_t)SAI_xCR1_MODE_0)
elmot 1:d0dfbce63a89 322 #define SAI_MODESLAVE_TX ((uint32_t)SAI_xCR1_MODE_1)
elmot 1:d0dfbce63a89 323 #define SAI_MODESLAVE_RX ((uint32_t)(SAI_xCR1_MODE_1 | SAI_xCR1_MODE_0))
elmot 1:d0dfbce63a89 324
elmot 1:d0dfbce63a89 325 /**
elmot 1:d0dfbce63a89 326 * @}
elmot 1:d0dfbce63a89 327 */
elmot 1:d0dfbce63a89 328
elmot 1:d0dfbce63a89 329 /** @defgroup SAI_Block_Protocol SAI Block Protocol
elmot 1:d0dfbce63a89 330 * @{
elmot 1:d0dfbce63a89 331 */
elmot 1:d0dfbce63a89 332 #define SAI_FREE_PROTOCOL ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 333 #define SAI_SPDIF_PROTOCOL ((uint32_t)SAI_xCR1_PRTCFG_0)
elmot 1:d0dfbce63a89 334 #define SAI_AC97_PROTOCOL ((uint32_t)SAI_xCR1_PRTCFG_1)
elmot 1:d0dfbce63a89 335 /**
elmot 1:d0dfbce63a89 336 * @}
elmot 1:d0dfbce63a89 337 */
elmot 1:d0dfbce63a89 338
elmot 1:d0dfbce63a89 339 /** @defgroup SAI_Block_Data_Size SAI Block Data Size
elmot 1:d0dfbce63a89 340 * @{
elmot 1:d0dfbce63a89 341 */
elmot 1:d0dfbce63a89 342 #define SAI_DATASIZE_8 ((uint32_t)SAI_xCR1_DS_1)
elmot 1:d0dfbce63a89 343 #define SAI_DATASIZE_10 ((uint32_t)(SAI_xCR1_DS_1 | SAI_xCR1_DS_0))
elmot 1:d0dfbce63a89 344 #define SAI_DATASIZE_16 ((uint32_t)SAI_xCR1_DS_2)
elmot 1:d0dfbce63a89 345 #define SAI_DATASIZE_20 ((uint32_t)(SAI_xCR1_DS_2 | SAI_xCR1_DS_0))
elmot 1:d0dfbce63a89 346 #define SAI_DATASIZE_24 ((uint32_t)(SAI_xCR1_DS_2 | SAI_xCR1_DS_1))
elmot 1:d0dfbce63a89 347 #define SAI_DATASIZE_32 ((uint32_t)(SAI_xCR1_DS_2 | SAI_xCR1_DS_1 | SAI_xCR1_DS_0))
elmot 1:d0dfbce63a89 348 /**
elmot 1:d0dfbce63a89 349 * @}
elmot 1:d0dfbce63a89 350 */
elmot 1:d0dfbce63a89 351
elmot 1:d0dfbce63a89 352 /** @defgroup SAI_Block_MSB_LSB_transmission SAI Block MSB LSB transmission
elmot 1:d0dfbce63a89 353 * @{
elmot 1:d0dfbce63a89 354 */
elmot 1:d0dfbce63a89 355 #define SAI_FIRSTBIT_MSB ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 356 #define SAI_FIRSTBIT_LSB ((uint32_t)SAI_xCR1_LSBFIRST)
elmot 1:d0dfbce63a89 357 /**
elmot 1:d0dfbce63a89 358 * @}
elmot 1:d0dfbce63a89 359 */
elmot 1:d0dfbce63a89 360
elmot 1:d0dfbce63a89 361 /** @defgroup SAI_Block_Clock_Strobing SAI Block Clock Strobing
elmot 1:d0dfbce63a89 362 * @{
elmot 1:d0dfbce63a89 363 */
elmot 1:d0dfbce63a89 364 #define SAI_CLOCKSTROBING_FALLINGEDGE 0
elmot 1:d0dfbce63a89 365 #define SAI_CLOCKSTROBING_RISINGEDGE 1
elmot 1:d0dfbce63a89 366 /**
elmot 1:d0dfbce63a89 367 * @}
elmot 1:d0dfbce63a89 368 */
elmot 1:d0dfbce63a89 369
elmot 1:d0dfbce63a89 370 /** @defgroup SAI_Block_Synchronization SAI Block Synchronization
elmot 1:d0dfbce63a89 371 * @{
elmot 1:d0dfbce63a89 372 */
elmot 1:d0dfbce63a89 373 #define SAI_ASYNCHRONOUS 0 /*!< Asynchronous */
elmot 1:d0dfbce63a89 374 #define SAI_SYNCHRONOUS 1 /*!< Synchronous with other block of same SAI */
elmot 1:d0dfbce63a89 375 #define SAI_SYNCHRONOUS_EXT_SAI1 2 /*!< Synchronous with other SAI, SAI1 */
elmot 1:d0dfbce63a89 376 #define SAI_SYNCHRONOUS_EXT_SAI2 3 /*!< Synchronous with other SAI, SAI2 */
elmot 1:d0dfbce63a89 377 /**
elmot 1:d0dfbce63a89 378 * @}
elmot 1:d0dfbce63a89 379 */
elmot 1:d0dfbce63a89 380
elmot 1:d0dfbce63a89 381 /** @defgroup SAI_Block_Output_Drive SAI Block Output Drive
elmot 1:d0dfbce63a89 382 * @{
elmot 1:d0dfbce63a89 383 */
elmot 1:d0dfbce63a89 384 #define SAI_OUTPUTDRIVE_DISABLE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 385 #define SAI_OUTPUTDRIVE_ENABLE ((uint32_t)SAI_xCR1_OUTDRIV)
elmot 1:d0dfbce63a89 386 /**
elmot 1:d0dfbce63a89 387 * @}
elmot 1:d0dfbce63a89 388 */
elmot 1:d0dfbce63a89 389
elmot 1:d0dfbce63a89 390 /** @defgroup SAI_Block_NoDivider SAI Block NoDivider
elmot 1:d0dfbce63a89 391 * @{
elmot 1:d0dfbce63a89 392 */
elmot 1:d0dfbce63a89 393 #define SAI_MASTERDIVIDER_ENABLE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 394 #define SAI_MASTERDIVIDER_DISABLE ((uint32_t)SAI_xCR1_NODIV)
elmot 1:d0dfbce63a89 395 /**
elmot 1:d0dfbce63a89 396 * @}
elmot 1:d0dfbce63a89 397 */
elmot 1:d0dfbce63a89 398
elmot 1:d0dfbce63a89 399
elmot 1:d0dfbce63a89 400 /** @defgroup SAI_Block_FS_Definition SAI Block FS Definition
elmot 1:d0dfbce63a89 401 * @{
elmot 1:d0dfbce63a89 402 */
elmot 1:d0dfbce63a89 403 #define SAI_FS_STARTFRAME ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 404 #define SAI_FS_CHANNEL_IDENTIFICATION ((uint32_t)SAI_xFRCR_FSDEF)
elmot 1:d0dfbce63a89 405 /**
elmot 1:d0dfbce63a89 406 * @}
elmot 1:d0dfbce63a89 407 */
elmot 1:d0dfbce63a89 408
elmot 1:d0dfbce63a89 409 /** @defgroup SAI_Block_FS_Polarity SAI Block FS Polarity
elmot 1:d0dfbce63a89 410 * @{
elmot 1:d0dfbce63a89 411 */
elmot 1:d0dfbce63a89 412 #define SAI_FS_ACTIVE_LOW ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 413 #define SAI_FS_ACTIVE_HIGH ((uint32_t)SAI_xFRCR_FSPOL)
elmot 1:d0dfbce63a89 414 /**
elmot 1:d0dfbce63a89 415 * @}
elmot 1:d0dfbce63a89 416 */
elmot 1:d0dfbce63a89 417
elmot 1:d0dfbce63a89 418 /** @defgroup SAI_Block_FS_Offset SAI Block FS Offset
elmot 1:d0dfbce63a89 419 * @{
elmot 1:d0dfbce63a89 420 */
elmot 1:d0dfbce63a89 421 #define SAI_FS_FIRSTBIT ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 422 #define SAI_FS_BEFOREFIRSTBIT ((uint32_t)SAI_xFRCR_FSOFF)
elmot 1:d0dfbce63a89 423 /**
elmot 1:d0dfbce63a89 424 * @}
elmot 1:d0dfbce63a89 425 */
elmot 1:d0dfbce63a89 426
elmot 1:d0dfbce63a89 427
elmot 1:d0dfbce63a89 428 /** @defgroup SAI_Block_Slot_Size SAI Block Slot Size
elmot 1:d0dfbce63a89 429 * @{
elmot 1:d0dfbce63a89 430 */
elmot 1:d0dfbce63a89 431 #define SAI_SLOTSIZE_DATASIZE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 432 #define SAI_SLOTSIZE_16B ((uint32_t)SAI_xSLOTR_SLOTSZ_0)
elmot 1:d0dfbce63a89 433 #define SAI_SLOTSIZE_32B ((uint32_t)SAI_xSLOTR_SLOTSZ_1)
elmot 1:d0dfbce63a89 434 /**
elmot 1:d0dfbce63a89 435 * @}
elmot 1:d0dfbce63a89 436 */
elmot 1:d0dfbce63a89 437
elmot 1:d0dfbce63a89 438 /** @defgroup SAI_Block_Slot_Active SAI Block Slot Active
elmot 1:d0dfbce63a89 439 * @{
elmot 1:d0dfbce63a89 440 */
elmot 1:d0dfbce63a89 441 #define SAI_SLOT_NOTACTIVE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 442 #define SAI_SLOTACTIVE_0 ((uint32_t)0x00000001U)
elmot 1:d0dfbce63a89 443 #define SAI_SLOTACTIVE_1 ((uint32_t)0x00000002U)
elmot 1:d0dfbce63a89 444 #define SAI_SLOTACTIVE_2 ((uint32_t)0x00000004U)
elmot 1:d0dfbce63a89 445 #define SAI_SLOTACTIVE_3 ((uint32_t)0x00000008U)
elmot 1:d0dfbce63a89 446 #define SAI_SLOTACTIVE_4 ((uint32_t)0x00000010U)
elmot 1:d0dfbce63a89 447 #define SAI_SLOTACTIVE_5 ((uint32_t)0x00000020U)
elmot 1:d0dfbce63a89 448 #define SAI_SLOTACTIVE_6 ((uint32_t)0x00000040U)
elmot 1:d0dfbce63a89 449 #define SAI_SLOTACTIVE_7 ((uint32_t)0x00000080U)
elmot 1:d0dfbce63a89 450 #define SAI_SLOTACTIVE_8 ((uint32_t)0x00000100U)
elmot 1:d0dfbce63a89 451 #define SAI_SLOTACTIVE_9 ((uint32_t)0x00000200U)
elmot 1:d0dfbce63a89 452 #define SAI_SLOTACTIVE_10 ((uint32_t)0x00000400U)
elmot 1:d0dfbce63a89 453 #define SAI_SLOTACTIVE_11 ((uint32_t)0x00000800U)
elmot 1:d0dfbce63a89 454 #define SAI_SLOTACTIVE_12 ((uint32_t)0x00001000U)
elmot 1:d0dfbce63a89 455 #define SAI_SLOTACTIVE_13 ((uint32_t)0x00002000U)
elmot 1:d0dfbce63a89 456 #define SAI_SLOTACTIVE_14 ((uint32_t)0x00004000U)
elmot 1:d0dfbce63a89 457 #define SAI_SLOTACTIVE_15 ((uint32_t)0x00008000U)
elmot 1:d0dfbce63a89 458 #define SAI_SLOTACTIVE_ALL ((uint32_t)0x0000FFFFU)
elmot 1:d0dfbce63a89 459 /**
elmot 1:d0dfbce63a89 460 * @}
elmot 1:d0dfbce63a89 461 */
elmot 1:d0dfbce63a89 462
elmot 1:d0dfbce63a89 463 /** @defgroup SAI_Mono_Stereo_Mode SAI Mono Stereo Mode
elmot 1:d0dfbce63a89 464 * @{
elmot 1:d0dfbce63a89 465 */
elmot 1:d0dfbce63a89 466 #define SAI_STEREOMODE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 467 #define SAI_MONOMODE ((uint32_t)SAI_xCR1_MONO)
elmot 1:d0dfbce63a89 468 /**
elmot 1:d0dfbce63a89 469 * @}
elmot 1:d0dfbce63a89 470 */
elmot 1:d0dfbce63a89 471
elmot 1:d0dfbce63a89 472 /** @defgroup SAI_TRIState_Management SAI TRIState Management
elmot 1:d0dfbce63a89 473 * @{
elmot 1:d0dfbce63a89 474 */
elmot 1:d0dfbce63a89 475 #define SAI_OUTPUT_NOTRELEASED ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 476 #define SAI_OUTPUT_RELEASED ((uint32_t)SAI_xCR2_TRIS)
elmot 1:d0dfbce63a89 477 /**
elmot 1:d0dfbce63a89 478 * @}
elmot 1:d0dfbce63a89 479 */
elmot 1:d0dfbce63a89 480
elmot 1:d0dfbce63a89 481 /** @defgroup SAI_Block_Fifo_Threshold SAI Block Fifo Threshold
elmot 1:d0dfbce63a89 482 * @{
elmot 1:d0dfbce63a89 483 */
elmot 1:d0dfbce63a89 484 #define SAI_FIFOTHRESHOLD_EMPTY ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 485 #define SAI_FIFOTHRESHOLD_1QF ((uint32_t)(SAI_xCR2_FTH_0))
elmot 1:d0dfbce63a89 486 #define SAI_FIFOTHRESHOLD_HF ((uint32_t)(SAI_xCR2_FTH_1))
elmot 1:d0dfbce63a89 487 #define SAI_FIFOTHRESHOLD_3QF ((uint32_t)(SAI_xCR2_FTH_1 | SAI_xCR2_FTH_0))
elmot 1:d0dfbce63a89 488 #define SAI_FIFOTHRESHOLD_FULL ((uint32_t)(SAI_xCR2_FTH_2))
elmot 1:d0dfbce63a89 489 /**
elmot 1:d0dfbce63a89 490 * @}
elmot 1:d0dfbce63a89 491 */
elmot 1:d0dfbce63a89 492
elmot 1:d0dfbce63a89 493 /** @defgroup SAI_Block_Companding_Mode SAI Block Companding Mode
elmot 1:d0dfbce63a89 494 * @{
elmot 1:d0dfbce63a89 495 */
elmot 1:d0dfbce63a89 496 #define SAI_NOCOMPANDING ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 497 #define SAI_ULAW_1CPL_COMPANDING ((uint32_t)(SAI_xCR2_COMP_1))
elmot 1:d0dfbce63a89 498 #define SAI_ALAW_1CPL_COMPANDING ((uint32_t)(SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0))
elmot 1:d0dfbce63a89 499 #define SAI_ULAW_2CPL_COMPANDING ((uint32_t)(SAI_xCR2_COMP_1 | SAI_xCR2_CPL))
elmot 1:d0dfbce63a89 500 #define SAI_ALAW_2CPL_COMPANDING ((uint32_t)(SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0 | SAI_xCR2_CPL))
elmot 1:d0dfbce63a89 501 /**
elmot 1:d0dfbce63a89 502 * @}
elmot 1:d0dfbce63a89 503 */
elmot 1:d0dfbce63a89 504
elmot 1:d0dfbce63a89 505 /** @defgroup SAI_Block_Mute_Value SAI Block Mute Value
elmot 1:d0dfbce63a89 506 * @{
elmot 1:d0dfbce63a89 507 */
elmot 1:d0dfbce63a89 508 #define SAI_ZERO_VALUE ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 509 #define SAI_LAST_SENT_VALUE ((uint32_t)SAI_xCR2_MUTEVAL)
elmot 1:d0dfbce63a89 510 /**
elmot 1:d0dfbce63a89 511 * @}
elmot 1:d0dfbce63a89 512 */
elmot 1:d0dfbce63a89 513
elmot 1:d0dfbce63a89 514 /** @defgroup SAI_Block_Interrupts_Definition SAI Block Interrupts Definition
elmot 1:d0dfbce63a89 515 * @{
elmot 1:d0dfbce63a89 516 */
elmot 1:d0dfbce63a89 517 #define SAI_IT_OVRUDR ((uint32_t)SAI_xIMR_OVRUDRIE)
elmot 1:d0dfbce63a89 518 #define SAI_IT_MUTEDET ((uint32_t)SAI_xIMR_MUTEDETIE)
elmot 1:d0dfbce63a89 519 #define SAI_IT_WCKCFG ((uint32_t)SAI_xIMR_WCKCFGIE)
elmot 1:d0dfbce63a89 520 #define SAI_IT_FREQ ((uint32_t)SAI_xIMR_FREQIE)
elmot 1:d0dfbce63a89 521 #define SAI_IT_CNRDY ((uint32_t)SAI_xIMR_CNRDYIE)
elmot 1:d0dfbce63a89 522 #define SAI_IT_AFSDET ((uint32_t)SAI_xIMR_AFSDETIE)
elmot 1:d0dfbce63a89 523 #define SAI_IT_LFSDET ((uint32_t)SAI_xIMR_LFSDETIE)
elmot 1:d0dfbce63a89 524 /**
elmot 1:d0dfbce63a89 525 * @}
elmot 1:d0dfbce63a89 526 */
elmot 1:d0dfbce63a89 527
elmot 1:d0dfbce63a89 528 /** @defgroup SAI_Block_Flags_Definition SAI Block Flags Definition
elmot 1:d0dfbce63a89 529 * @{
elmot 1:d0dfbce63a89 530 */
elmot 1:d0dfbce63a89 531 #define SAI_FLAG_OVRUDR ((uint32_t)SAI_xSR_OVRUDR)
elmot 1:d0dfbce63a89 532 #define SAI_FLAG_MUTEDET ((uint32_t)SAI_xSR_MUTEDET)
elmot 1:d0dfbce63a89 533 #define SAI_FLAG_WCKCFG ((uint32_t)SAI_xSR_WCKCFG)
elmot 1:d0dfbce63a89 534 #define SAI_FLAG_FREQ ((uint32_t)SAI_xSR_FREQ)
elmot 1:d0dfbce63a89 535 #define SAI_FLAG_CNRDY ((uint32_t)SAI_xSR_CNRDY)
elmot 1:d0dfbce63a89 536 #define SAI_FLAG_AFSDET ((uint32_t)SAI_xSR_AFSDET)
elmot 1:d0dfbce63a89 537 #define SAI_FLAG_LFSDET ((uint32_t)SAI_xSR_LFSDET)
elmot 1:d0dfbce63a89 538 /**
elmot 1:d0dfbce63a89 539 * @}
elmot 1:d0dfbce63a89 540 */
elmot 1:d0dfbce63a89 541
elmot 1:d0dfbce63a89 542 /** @defgroup SAI_Block_Fifo_Status_Level SAI Block Fifo Status Level
elmot 1:d0dfbce63a89 543 * @{
elmot 1:d0dfbce63a89 544 */
elmot 1:d0dfbce63a89 545 #define SAI_FIFOSTATUS_EMPTY ((uint32_t)0x00000000U)
elmot 1:d0dfbce63a89 546 #define SAI_FIFOSTATUS_LESS1QUARTERFULL ((uint32_t)0x00010000U)
elmot 1:d0dfbce63a89 547 #define SAI_FIFOSTATUS_1QUARTERFULL ((uint32_t)0x00020000U)
elmot 1:d0dfbce63a89 548 #define SAI_FIFOSTATUS_HALFFULL ((uint32_t)0x00030000U)
elmot 1:d0dfbce63a89 549 #define SAI_FIFOSTATUS_3QUARTERFULL ((uint32_t)0x00040000U)
elmot 1:d0dfbce63a89 550 #define SAI_FIFOSTATUS_FULL ((uint32_t)0x00050000U)
elmot 1:d0dfbce63a89 551 /**
elmot 1:d0dfbce63a89 552 * @}
elmot 1:d0dfbce63a89 553 */
elmot 1:d0dfbce63a89 554
elmot 1:d0dfbce63a89 555 /**
elmot 1:d0dfbce63a89 556 * @}
elmot 1:d0dfbce63a89 557 */
elmot 1:d0dfbce63a89 558
elmot 1:d0dfbce63a89 559 /* Exported macro ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 560
elmot 1:d0dfbce63a89 561 /** @defgroup SAI_Exported_Macros SAI Exported Macros
elmot 1:d0dfbce63a89 562 * @brief macros to handle interrupts and specific configurations
elmot 1:d0dfbce63a89 563 * @{
elmot 1:d0dfbce63a89 564 */
elmot 1:d0dfbce63a89 565
elmot 1:d0dfbce63a89 566 /** @brief Reset SAI handle state.
elmot 1:d0dfbce63a89 567 * @param __HANDLE__: specifies the SAI Handle.
elmot 1:d0dfbce63a89 568 * @retval None
elmot 1:d0dfbce63a89 569 */
elmot 1:d0dfbce63a89 570 #define __HAL_SAI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SAI_STATE_RESET)
elmot 1:d0dfbce63a89 571
elmot 1:d0dfbce63a89 572 /** @brief Enable or disable the specified SAI interrupts.
elmot 1:d0dfbce63a89 573 * @param __HANDLE__: specifies the SAI Handle.
elmot 1:d0dfbce63a89 574 * @param __INTERRUPT__: specifies the interrupt source to enable or disable.
elmot 1:d0dfbce63a89 575 * This parameter can be one of the following values:
elmot 1:d0dfbce63a89 576 * @arg SAI_IT_OVRUDR: Overrun underrun interrupt enable
elmot 1:d0dfbce63a89 577 * @arg SAI_IT_MUTEDET: Mute detection interrupt enable
elmot 1:d0dfbce63a89 578 * @arg SAI_IT_WCKCFG: Wrong Clock Configuration interrupt enable
elmot 1:d0dfbce63a89 579 * @arg SAI_IT_FREQ: FIFO request interrupt enable
elmot 1:d0dfbce63a89 580 * @arg SAI_IT_CNRDY: Codec not ready interrupt enable
elmot 1:d0dfbce63a89 581 * @arg SAI_IT_AFSDET: Anticipated frame synchronization detection interrupt enable
elmot 1:d0dfbce63a89 582 * @arg SAI_IT_LFSDET: Late frame synchronization detection interrupt enable
elmot 1:d0dfbce63a89 583 * @retval None
elmot 1:d0dfbce63a89 584 */
elmot 1:d0dfbce63a89 585 #define __HAL_SAI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR |= (__INTERRUPT__))
elmot 1:d0dfbce63a89 586 #define __HAL_SAI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR &= (~(__INTERRUPT__)))
elmot 1:d0dfbce63a89 587
elmot 1:d0dfbce63a89 588 /** @brief Check whether the specified SAI interrupt source is enabled or not.
elmot 1:d0dfbce63a89 589 * @param __HANDLE__: specifies the SAI Handle.
elmot 1:d0dfbce63a89 590 * @param __INTERRUPT__: specifies the SAI interrupt source to check.
elmot 1:d0dfbce63a89 591 * This parameter can be one of the following values:
elmot 1:d0dfbce63a89 592 * @arg SAI_IT_OVRUDR: Overrun underrun interrupt enable
elmot 1:d0dfbce63a89 593 * @arg SAI_IT_MUTEDET: Mute detection interrupt enable
elmot 1:d0dfbce63a89 594 * @arg SAI_IT_WCKCFG: Wrong Clock Configuration interrupt enable
elmot 1:d0dfbce63a89 595 * @arg SAI_IT_FREQ: FIFO request interrupt enable
elmot 1:d0dfbce63a89 596 * @arg SAI_IT_CNRDY: Codec not ready interrupt enable
elmot 1:d0dfbce63a89 597 * @arg SAI_IT_AFSDET: Anticipated frame synchronization detection interrupt enable
elmot 1:d0dfbce63a89 598 * @arg SAI_IT_LFSDET: Late frame synchronization detection interrupt enable
elmot 1:d0dfbce63a89 599 * @retval The new state of __INTERRUPT__ (TRUE or FALSE).
elmot 1:d0dfbce63a89 600 */
elmot 1:d0dfbce63a89 601 #define __HAL_SAI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
elmot 1:d0dfbce63a89 602
elmot 1:d0dfbce63a89 603 /** @brief Check whether the specified SAI flag is set or not.
elmot 1:d0dfbce63a89 604 * @param __HANDLE__: specifies the SAI Handle.
elmot 1:d0dfbce63a89 605 * @param __FLAG__: specifies the flag to check.
elmot 1:d0dfbce63a89 606 * This parameter can be one of the following values:
elmot 1:d0dfbce63a89 607 * @arg SAI_FLAG_OVRUDR: Overrun underrun flag.
elmot 1:d0dfbce63a89 608 * @arg SAI_FLAG_MUTEDET: Mute detection flag.
elmot 1:d0dfbce63a89 609 * @arg SAI_FLAG_WCKCFG: Wrong Clock Configuration flag.
elmot 1:d0dfbce63a89 610 * @arg SAI_FLAG_FREQ: FIFO request flag.
elmot 1:d0dfbce63a89 611 * @arg SAI_FLAG_CNRDY: Codec not ready flag.
elmot 1:d0dfbce63a89 612 * @arg SAI_FLAG_AFSDET: Anticipated frame synchronization detection flag.
elmot 1:d0dfbce63a89 613 * @arg SAI_FLAG_LFSDET: Late frame synchronization detection flag.
elmot 1:d0dfbce63a89 614 * @retval The new state of __FLAG__ (TRUE or FALSE).
elmot 1:d0dfbce63a89 615 */
elmot 1:d0dfbce63a89 616 #define __HAL_SAI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
elmot 1:d0dfbce63a89 617
elmot 1:d0dfbce63a89 618 /** @brief Clear the specified SAI pending flag.
elmot 1:d0dfbce63a89 619 * @param __HANDLE__: specifies the SAI Handle.
elmot 1:d0dfbce63a89 620 * @param __FLAG__: specifies the flag to check.
elmot 1:d0dfbce63a89 621 * This parameter can be any combination of the following values:
elmot 1:d0dfbce63a89 622 * @arg SAI_FLAG_OVRUDR: Clear Overrun underrun
elmot 1:d0dfbce63a89 623 * @arg SAI_FLAG_MUTEDET: Clear Mute detection
elmot 1:d0dfbce63a89 624 * @arg SAI_FLAG_WCKCFG: Clear Wrong Clock Configuration
elmot 1:d0dfbce63a89 625 * @arg SAI_FLAG_FREQ: Clear FIFO request
elmot 1:d0dfbce63a89 626 * @arg SAI_FLAG_CNRDY: Clear Codec not ready
elmot 1:d0dfbce63a89 627 * @arg SAI_FLAG_AFSDET: Clear Anticipated frame synchronization detection
elmot 1:d0dfbce63a89 628 * @arg SAI_FLAG_LFSDET: Clear Late frame synchronization detection
elmot 1:d0dfbce63a89 629 *
elmot 1:d0dfbce63a89 630 * @retval None
elmot 1:d0dfbce63a89 631 */
elmot 1:d0dfbce63a89 632 #define __HAL_SAI_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CLRFR = (__FLAG__))
elmot 1:d0dfbce63a89 633
elmot 1:d0dfbce63a89 634 #define __HAL_SAI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SAI_xCR1_SAIEN)
elmot 1:d0dfbce63a89 635 #define __HAL_SAI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~SAI_xCR1_SAIEN)
elmot 1:d0dfbce63a89 636
elmot 1:d0dfbce63a89 637 /**
elmot 1:d0dfbce63a89 638 * @}
elmot 1:d0dfbce63a89 639 */
elmot 1:d0dfbce63a89 640
elmot 1:d0dfbce63a89 641 /* Exported functions --------------------------------------------------------*/
elmot 1:d0dfbce63a89 642
elmot 1:d0dfbce63a89 643 /** @addtogroup SAI_Exported_Functions
elmot 1:d0dfbce63a89 644 * @{
elmot 1:d0dfbce63a89 645 */
elmot 1:d0dfbce63a89 646
elmot 1:d0dfbce63a89 647 /* Initialization/de-initialization functions ********************************/
elmot 1:d0dfbce63a89 648
elmot 1:d0dfbce63a89 649 /** @addtogroup SAI_Exported_Functions_Group1
elmot 1:d0dfbce63a89 650 * @{
elmot 1:d0dfbce63a89 651 */
elmot 1:d0dfbce63a89 652 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot);
elmot 1:d0dfbce63a89 653 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 654 HAL_StatusTypeDef HAL_SAI_DeInit (SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 655 void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 656 void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 657
elmot 1:d0dfbce63a89 658 /**
elmot 1:d0dfbce63a89 659 * @}
elmot 1:d0dfbce63a89 660 */
elmot 1:d0dfbce63a89 661
elmot 1:d0dfbce63a89 662 /* I/O operation functions ***************************************************/
elmot 1:d0dfbce63a89 663
elmot 1:d0dfbce63a89 664 /** @addtogroup SAI_Exported_Functions_Group2
elmot 1:d0dfbce63a89 665 * @{
elmot 1:d0dfbce63a89 666 */
elmot 1:d0dfbce63a89 667 /* Blocking mode: Polling */
elmot 1:d0dfbce63a89 668 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout);
elmot 1:d0dfbce63a89 669 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout);
elmot 1:d0dfbce63a89 670
elmot 1:d0dfbce63a89 671 /* Non-Blocking mode: Interrupt */
elmot 1:d0dfbce63a89 672 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
elmot 1:d0dfbce63a89 673 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
elmot 1:d0dfbce63a89 674
elmot 1:d0dfbce63a89 675 /* Non-Blocking mode: DMA */
elmot 1:d0dfbce63a89 676 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
elmot 1:d0dfbce63a89 677 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
elmot 1:d0dfbce63a89 678 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 679 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 680 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 681
elmot 1:d0dfbce63a89 682 /* Abort function */
elmot 1:d0dfbce63a89 683 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 684
elmot 1:d0dfbce63a89 685 /* Mute management */
elmot 1:d0dfbce63a89 686 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val);
elmot 1:d0dfbce63a89 687 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 688 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t counter);
elmot 1:d0dfbce63a89 689 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 690
elmot 1:d0dfbce63a89 691 /* SAI IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */
elmot 1:d0dfbce63a89 692 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 693 void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 694 void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 695 void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 696 void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 697 void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 698 /**
elmot 1:d0dfbce63a89 699 * @}
elmot 1:d0dfbce63a89 700 */
elmot 1:d0dfbce63a89 701
elmot 1:d0dfbce63a89 702 /** @addtogroup SAI_Exported_Functions_Group3
elmot 1:d0dfbce63a89 703 * @{
elmot 1:d0dfbce63a89 704 */
elmot 1:d0dfbce63a89 705 /* Peripheral State functions ************************************************/
elmot 1:d0dfbce63a89 706 HAL_SAI_StateTypeDef HAL_SAI_GetState(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 707 uint32_t HAL_SAI_GetError(SAI_HandleTypeDef *hsai);
elmot 1:d0dfbce63a89 708 /**
elmot 1:d0dfbce63a89 709 * @}
elmot 1:d0dfbce63a89 710 */
elmot 1:d0dfbce63a89 711
elmot 1:d0dfbce63a89 712 /**
elmot 1:d0dfbce63a89 713 * @}
elmot 1:d0dfbce63a89 714 */
elmot 1:d0dfbce63a89 715
elmot 1:d0dfbce63a89 716 /* Private macros ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 717 /** @addtogroup SAI_Private_Macros
elmot 1:d0dfbce63a89 718 * @{
elmot 1:d0dfbce63a89 719 */
elmot 1:d0dfbce63a89 720 #define IS_SAI_BLOCK_SYNCEXT(STATE) (((STATE) == SAI_SYNCEXT_DISABLE) ||\
elmot 1:d0dfbce63a89 721 ((STATE) == SAI_SYNCEXT_OUTBLOCKA_ENABLE) ||\
elmot 1:d0dfbce63a89 722 ((STATE) == SAI_SYNCEXT_OUTBLOCKB_ENABLE))
elmot 1:d0dfbce63a89 723
elmot 1:d0dfbce63a89 724 #define IS_SAI_SUPPORTED_PROTOCOL(PROTOCOL) (((PROTOCOL) == SAI_I2S_STANDARD) ||\
elmot 1:d0dfbce63a89 725 ((PROTOCOL) == SAI_I2S_MSBJUSTIFIED) ||\
elmot 1:d0dfbce63a89 726 ((PROTOCOL) == SAI_I2S_LSBJUSTIFIED) ||\
elmot 1:d0dfbce63a89 727 ((PROTOCOL) == SAI_PCM_LONG) ||\
elmot 1:d0dfbce63a89 728 ((PROTOCOL) == SAI_PCM_SHORT))
elmot 1:d0dfbce63a89 729
elmot 1:d0dfbce63a89 730 #define IS_SAI_PROTOCOL_DATASIZE(DATASIZE) (((DATASIZE) == SAI_PROTOCOL_DATASIZE_16BIT) ||\
elmot 1:d0dfbce63a89 731 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_16BITEXTENDED) ||\
elmot 1:d0dfbce63a89 732 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_24BIT) ||\
elmot 1:d0dfbce63a89 733 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_32BIT))
elmot 1:d0dfbce63a89 734
elmot 1:d0dfbce63a89 735 #define IS_SAI_AUDIO_FREQUENCY(AUDIO) (((AUDIO) == SAI_AUDIO_FREQUENCY_192K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_96K) || \
elmot 1:d0dfbce63a89 736 ((AUDIO) == SAI_AUDIO_FREQUENCY_48K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_44K) || \
elmot 1:d0dfbce63a89 737 ((AUDIO) == SAI_AUDIO_FREQUENCY_32K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_22K) || \
elmot 1:d0dfbce63a89 738 ((AUDIO) == SAI_AUDIO_FREQUENCY_16K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_11K) || \
elmot 1:d0dfbce63a89 739 ((AUDIO) == SAI_AUDIO_FREQUENCY_8K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_MCKDIV))
elmot 1:d0dfbce63a89 740
elmot 1:d0dfbce63a89 741 #define IS_SAI_BLOCK_MODE(MODE) (((MODE) == SAI_MODEMASTER_TX) || \
elmot 1:d0dfbce63a89 742 ((MODE) == SAI_MODEMASTER_RX) || \
elmot 1:d0dfbce63a89 743 ((MODE) == SAI_MODESLAVE_TX) || \
elmot 1:d0dfbce63a89 744 ((MODE) == SAI_MODESLAVE_RX))
elmot 1:d0dfbce63a89 745
elmot 1:d0dfbce63a89 746 #define IS_SAI_BLOCK_PROTOCOL(PROTOCOL) (((PROTOCOL) == SAI_FREE_PROTOCOL) || \
elmot 1:d0dfbce63a89 747 ((PROTOCOL) == SAI_AC97_PROTOCOL) || \
elmot 1:d0dfbce63a89 748 ((PROTOCOL) == SAI_SPDIF_PROTOCOL))
elmot 1:d0dfbce63a89 749
elmot 1:d0dfbce63a89 750 #define IS_SAI_BLOCK_DATASIZE(DATASIZE) (((DATASIZE) == SAI_DATASIZE_8) || \
elmot 1:d0dfbce63a89 751 ((DATASIZE) == SAI_DATASIZE_10) || \
elmot 1:d0dfbce63a89 752 ((DATASIZE) == SAI_DATASIZE_16) || \
elmot 1:d0dfbce63a89 753 ((DATASIZE) == SAI_DATASIZE_20) || \
elmot 1:d0dfbce63a89 754 ((DATASIZE) == SAI_DATASIZE_24) || \
elmot 1:d0dfbce63a89 755 ((DATASIZE) == SAI_DATASIZE_32))
elmot 1:d0dfbce63a89 756
elmot 1:d0dfbce63a89 757 #define IS_SAI_BLOCK_FIRST_BIT(BIT) (((BIT) == SAI_FIRSTBIT_MSB) || \
elmot 1:d0dfbce63a89 758 ((BIT) == SAI_FIRSTBIT_LSB))
elmot 1:d0dfbce63a89 759
elmot 1:d0dfbce63a89 760 #define IS_SAI_BLOCK_CLOCK_STROBING(CLOCK) (((CLOCK) == SAI_CLOCKSTROBING_FALLINGEDGE) || \
elmot 1:d0dfbce63a89 761 ((CLOCK) == SAI_CLOCKSTROBING_RISINGEDGE))
elmot 1:d0dfbce63a89 762
elmot 1:d0dfbce63a89 763 #define IS_SAI_BLOCK_SYNCHRO(SYNCHRO) (((SYNCHRO) == SAI_ASYNCHRONOUS) || \
elmot 1:d0dfbce63a89 764 ((SYNCHRO) == SAI_SYNCHRONOUS) || \
elmot 1:d0dfbce63a89 765 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI1) || \
elmot 1:d0dfbce63a89 766 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI2))
elmot 1:d0dfbce63a89 767
elmot 1:d0dfbce63a89 768 #define IS_SAI_BLOCK_OUTPUT_DRIVE(DRIVE) (((DRIVE) == SAI_OUTPUTDRIVE_DISABLE) || \
elmot 1:d0dfbce63a89 769 ((DRIVE) == SAI_OUTPUTDRIVE_ENABLE))
elmot 1:d0dfbce63a89 770
elmot 1:d0dfbce63a89 771 #define IS_SAI_BLOCK_NODIVIDER(NODIVIDER) (((NODIVIDER) == SAI_MASTERDIVIDER_ENABLE) || \
elmot 1:d0dfbce63a89 772 ((NODIVIDER) == SAI_MASTERDIVIDER_DISABLE))
elmot 1:d0dfbce63a89 773
elmot 1:d0dfbce63a89 774 #define IS_SAI_BLOCK_MUTE_COUNTER(COUNTER) ((COUNTER) <= 63)
elmot 1:d0dfbce63a89 775
elmot 1:d0dfbce63a89 776 #define IS_SAI_BLOCK_MUTE_VALUE(VALUE) (((VALUE) == SAI_ZERO_VALUE) || \
elmot 1:d0dfbce63a89 777 ((VALUE) == SAI_LAST_SENT_VALUE))
elmot 1:d0dfbce63a89 778
elmot 1:d0dfbce63a89 779 #define IS_SAI_BLOCK_COMPANDING_MODE(MODE) (((MODE) == SAI_NOCOMPANDING) || \
elmot 1:d0dfbce63a89 780 ((MODE) == SAI_ULAW_1CPL_COMPANDING) || \
elmot 1:d0dfbce63a89 781 ((MODE) == SAI_ALAW_1CPL_COMPANDING) || \
elmot 1:d0dfbce63a89 782 ((MODE) == SAI_ULAW_2CPL_COMPANDING) || \
elmot 1:d0dfbce63a89 783 ((MODE) == SAI_ALAW_2CPL_COMPANDING))
elmot 1:d0dfbce63a89 784
elmot 1:d0dfbce63a89 785 #define IS_SAI_BLOCK_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == SAI_FIFOTHRESHOLD_EMPTY) || \
elmot 1:d0dfbce63a89 786 ((THRESHOLD) == SAI_FIFOTHRESHOLD_1QF) || \
elmot 1:d0dfbce63a89 787 ((THRESHOLD) == SAI_FIFOTHRESHOLD_HF) || \
elmot 1:d0dfbce63a89 788 ((THRESHOLD) == SAI_FIFOTHRESHOLD_3QF) || \
elmot 1:d0dfbce63a89 789 ((THRESHOLD) == SAI_FIFOTHRESHOLD_FULL))
elmot 1:d0dfbce63a89 790
elmot 1:d0dfbce63a89 791 #define IS_SAI_BLOCK_TRISTATE_MANAGEMENT(STATE) (((STATE) == SAI_OUTPUT_NOTRELEASED) ||\
elmot 1:d0dfbce63a89 792 ((STATE) == SAI_OUTPUT_RELEASED))
elmot 1:d0dfbce63a89 793
elmot 1:d0dfbce63a89 794 #define IS_SAI_MONO_STEREO_MODE(MODE) (((MODE) == SAI_MONOMODE) ||\
elmot 1:d0dfbce63a89 795 ((MODE) == SAI_STEREOMODE))
elmot 1:d0dfbce63a89 796
elmot 1:d0dfbce63a89 797 #define IS_SAI_SLOT_ACTIVE(ACTIVE) ((ACTIVE) <= SAI_SLOTACTIVE_ALL)
elmot 1:d0dfbce63a89 798
elmot 1:d0dfbce63a89 799 #define IS_SAI_BLOCK_SLOT_NUMBER(NUMBER) ((1 <= (NUMBER)) && ((NUMBER) <= 16))
elmot 1:d0dfbce63a89 800
elmot 1:d0dfbce63a89 801 #define IS_SAI_BLOCK_SLOT_SIZE(SIZE) (((SIZE) == SAI_SLOTSIZE_DATASIZE) || \
elmot 1:d0dfbce63a89 802 ((SIZE) == SAI_SLOTSIZE_16B) || \
elmot 1:d0dfbce63a89 803 ((SIZE) == SAI_SLOTSIZE_32B))
elmot 1:d0dfbce63a89 804
elmot 1:d0dfbce63a89 805 #define IS_SAI_BLOCK_FIRSTBIT_OFFSET(OFFSET) ((OFFSET) <= 24)
elmot 1:d0dfbce63a89 806
elmot 1:d0dfbce63a89 807 #define IS_SAI_BLOCK_FS_OFFSET(OFFSET) (((OFFSET) == SAI_FS_FIRSTBIT) || \
elmot 1:d0dfbce63a89 808 ((OFFSET) == SAI_FS_BEFOREFIRSTBIT))
elmot 1:d0dfbce63a89 809
elmot 1:d0dfbce63a89 810 #define IS_SAI_BLOCK_FS_POLARITY(POLARITY) (((POLARITY) == SAI_FS_ACTIVE_LOW) || \
elmot 1:d0dfbce63a89 811 ((POLARITY) == SAI_FS_ACTIVE_HIGH))
elmot 1:d0dfbce63a89 812
elmot 1:d0dfbce63a89 813 #define IS_SAI_BLOCK_FS_DEFINITION(DEFINITION) (((DEFINITION) == SAI_FS_STARTFRAME) || \
elmot 1:d0dfbce63a89 814 ((DEFINITION) == SAI_FS_CHANNEL_IDENTIFICATION))
elmot 1:d0dfbce63a89 815
elmot 1:d0dfbce63a89 816 #define IS_SAI_BLOCK_MASTER_DIVIDER(DIVIDER) ((DIVIDER) <= 15)
elmot 1:d0dfbce63a89 817
elmot 1:d0dfbce63a89 818 #define IS_SAI_BLOCK_FRAME_LENGTH(LENGTH) ((8 <= (LENGTH)) && ((LENGTH) <= 256))
elmot 1:d0dfbce63a89 819
elmot 1:d0dfbce63a89 820 #define IS_SAI_BLOCK_ACTIVE_FRAME(LENGTH) ((1 <= (LENGTH)) && ((LENGTH) <= 128))
elmot 1:d0dfbce63a89 821
elmot 1:d0dfbce63a89 822 /**
elmot 1:d0dfbce63a89 823 * @}
elmot 1:d0dfbce63a89 824 */
elmot 1:d0dfbce63a89 825
elmot 1:d0dfbce63a89 826 /* Private functions ---------------------------------------------------------*/
elmot 1:d0dfbce63a89 827 /** @defgroup SAI_Private_Functions SAI Private Functions
elmot 1:d0dfbce63a89 828 * @{
elmot 1:d0dfbce63a89 829 */
elmot 1:d0dfbce63a89 830
elmot 1:d0dfbce63a89 831 /**
elmot 1:d0dfbce63a89 832 * @}
elmot 1:d0dfbce63a89 833 */
elmot 1:d0dfbce63a89 834
elmot 1:d0dfbce63a89 835 /**
elmot 1:d0dfbce63a89 836 * @}
elmot 1:d0dfbce63a89 837 */
elmot 1:d0dfbce63a89 838
elmot 1:d0dfbce63a89 839 /**
elmot 1:d0dfbce63a89 840 * @}
elmot 1:d0dfbce63a89 841 */
elmot 1:d0dfbce63a89 842
elmot 1:d0dfbce63a89 843 #ifdef __cplusplus
elmot 1:d0dfbce63a89 844 }
elmot 1:d0dfbce63a89 845 #endif
elmot 1:d0dfbce63a89 846
elmot 1:d0dfbce63a89 847 #endif /* __STM32L4xx_HAL_SAI_H */
elmot 1:d0dfbce63a89 848
elmot 1:d0dfbce63a89 849 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/