227#ifdef HAL_SAI_MODULE_ENABLED 
  229#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ 
  230    defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F413xx) ||\ 
  250#define SAI_DEFAULT_TIMEOUT   4U  
  251#define SAI_LONG_TIMEOUT      1000U  
  346      status = 
SAI_InitI2S(hsai, protocol, datasize, nbslot);
 
  350      status = 
SAI_InitPCM(hsai, protocol, datasize, nbslot);
 
 
  374  uint32_t tmpregisterGCR = 0U;
 
  381  uint32_t ckstr_bits = 0U;
 
  382  uint32_t syncen_bits = 0U;
 
  427#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
  436    if (hsai->MspInitCallback == NULL)
 
  440    hsai->MspInitCallback(hsai);
 
  470    if ((tmpregisterGCR % 10U) > 8U)
 
  505      syncen_bits = SAI_xCR1_SYNCEN_0;
 
  511      syncen_bits = SAI_xCR1_SYNCEN_1;
 
  519  hsai->
Instance->CR1 &= ~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG |  SAI_xCR1_DS |      \
 
  520                           SAI_xCR1_LSBFIRST | SAI_xCR1_CKSTR | SAI_xCR1_SYNCEN | \
 
  521                           SAI_xCR1_MONO | SAI_xCR1_OUTDRIV  | SAI_xCR1_DMAEN |  \
 
  522                           SAI_xCR1_NODIV | SAI_xCR1_MCKDIV);
 
  526                          ckstr_bits | syncen_bits |                             \
 
  531  hsai->
Instance->CR2 &= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL);
 
  535  hsai->
Instance->FRCR &= (~(SAI_xFRCR_FRL | SAI_xFRCR_FSALL | SAI_xFRCR_FSDEF | \
 
  536                             SAI_xFRCR_FSPOL | SAI_xFRCR_FSOFF));
 
  545  hsai->
Instance->SLOTR &= ~(SAI_xSLOTR_FBOFF | SAI_xSLOTR_SLOTSZ | \
 
  546                             SAI_xSLOTR_NBSLOT | SAI_xSLOTR_SLOTEN);
 
 
  581  hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
  587  SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
  590#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
  591  if (hsai->MspDeInitCallback == NULL)
 
  595  hsai->MspDeInitCallback(hsai);
 
 
  644#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
  662                                           HAL_SAI_CallbackIDTypeDef CallbackID,
 
  663                                           pSAI_CallbackTypeDef      pCallback)
 
  667  if (pCallback == NULL)
 
  670    hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  680        case HAL_SAI_RX_COMPLETE_CB_ID :
 
  681          hsai->RxCpltCallback = pCallback;
 
  683        case HAL_SAI_RX_HALFCOMPLETE_CB_ID :
 
  684          hsai->RxHalfCpltCallback = pCallback;
 
  686        case HAL_SAI_TX_COMPLETE_CB_ID :
 
  687          hsai->TxCpltCallback = pCallback;
 
  689        case HAL_SAI_TX_HALFCOMPLETE_CB_ID :
 
  690          hsai->TxHalfCpltCallback = pCallback;
 
  692        case HAL_SAI_ERROR_CB_ID :
 
  693          hsai->ErrorCallback = pCallback;
 
  695        case HAL_SAI_MSPINIT_CB_ID :
 
  696          hsai->MspInitCallback = pCallback;
 
  698        case HAL_SAI_MSPDEINIT_CB_ID :
 
  699          hsai->MspDeInitCallback = pCallback;
 
  703          hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  713        case HAL_SAI_MSPINIT_CB_ID :
 
  714          hsai->MspInitCallback = pCallback;
 
  716        case HAL_SAI_MSPDEINIT_CB_ID :
 
  717          hsai->MspDeInitCallback = pCallback;
 
  721          hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  730      hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  754                                             HAL_SAI_CallbackIDTypeDef CallbackID)
 
  762      case HAL_SAI_RX_COMPLETE_CB_ID :
 
  765      case HAL_SAI_RX_HALFCOMPLETE_CB_ID :
 
  768      case HAL_SAI_TX_COMPLETE_CB_ID :
 
  771      case HAL_SAI_TX_HALFCOMPLETE_CB_ID :
 
  774      case HAL_SAI_ERROR_CB_ID :
 
  777      case HAL_SAI_MSPINIT_CB_ID :
 
  780      case HAL_SAI_MSPDEINIT_CB_ID :
 
  785        hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  795      case HAL_SAI_MSPINIT_CB_ID :
 
  798      case HAL_SAI_MSPDEINIT_CB_ID :
 
  803        hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  812    hsai->
ErrorCode |= HAL_SAI_ERROR_INVALID_CALLBACK;
 
  879  if ((pData == NULL) || (Size == 0))
 
  896    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
  934          hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
  940          SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
 
  979  if ((pData == NULL) || (Size == 0))
 
  996    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
 1032          hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
 1038          SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
 
 1074  if ((pData == NULL) || (Size == 0))
 
 1110    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
 
 1136  if ((pData == NULL) || (Size == 0))
 
 1169    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
 
 1198  hsai->
Instance->CR1 &= ~SAI_xCR1_DMAEN;
 
 
 1218  hsai->
Instance->CR1 |= SAI_xCR1_DMAEN;
 
 1221  if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
 
 1250  hsai->
Instance->CR1 &= ~SAI_xCR1_DMAEN;
 
 1281  SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
 
 1309  if ((hsai->
Instance->CR1 & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN)
 
 1312    hsai->
Instance->CR1 &= ~SAI_xCR1_DMAEN;
 
 1345  hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
 1348  SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
 
 1371  if ((pData == NULL) || (Size == 0))
 
 1410    hsai->
Instance->CR1 |= SAI_xCR1_DMAEN;
 
 1429    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == 0U)
 
 
 1456  if ((pData == NULL) || (Size == 0))
 
 1495    hsai->
Instance->CR1 |= SAI_xCR1_DMAEN;
 
 1498    if ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) == RESET)
 
 
 1528    CLEAR_BIT(hsai->
Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE);
 
 1529    SET_BIT(hsai->
Instance->CR2, SAI_xCR2_MUTE | val);
 
 
 1545    CLEAR_BIT(hsai->
Instance->CR2, SAI_xCR2_MUTEVAL | SAI_xCR2_MUTE);
 
 
 1566    CLEAR_BIT(hsai->
Instance->CR2, SAI_xCR2_MUTECNT);
 
 1567    SET_BIT(hsai->
Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos));
 
 
 1605    uint32_t itflags = hsai->
Instance->SR;
 
 1606    uint32_t itsources = hsai->
Instance->IMR;
 
 1607    uint32_t cr1config = hsai->
Instance->CR1;
 
 1628#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 1629      hsai->ErrorCallback(hsai);
 
 1657      if ((cr1config & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN)
 
 1660        if (hsai->
hdmatx != NULL)
 
 1668        else if (hsai->
hdmarx != NULL)
 
 1683#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 1684        hsai->ErrorCallback(hsai);
 
 1700      if ((cr1config & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN)
 
 1703        if (hsai->
hdmatx != NULL)
 
 1711        else if (hsai->
hdmarx != NULL)
 
 1726#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 1727        hsai->ErrorCallback(hsai);
 
 1743      if ((cr1config & SAI_xCR1_DMAEN) == SAI_xCR1_DMAEN)
 
 1746        if (hsai->
hdmatx != NULL)
 
 1754        else if (hsai->
hdmarx != NULL)
 
 1768        hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
 1777#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 1778        hsai->ErrorCallback(hsai);
 
 1794#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 1795      hsai->ErrorCallback(hsai);
 
 
 1973  if ((nbslot & 0x1U) != 0U)
 
 
 2193  while ((hsai->
Instance->CR1 & SAI_xCR1_SAIEN) != RESET);
 
 
 2212#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2213    hsai->TxCpltCallback(hsai);
 
 
 2240#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2241    hsai->TxCpltCallback(hsai);
 
 
 2269#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2270    hsai->TxCpltCallback(hsai);
 
 
 2306#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2307    hsai->RxCpltCallback(hsai);
 
 
 2337#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2338    hsai->RxCpltCallback(hsai);
 
 
 2368#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2369    hsai->RxCpltCallback(hsai);
 
 
 2391    hsai->
Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN);
 
 2398#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2399  hsai->TxCpltCallback(hsai);
 
 
 2415#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2416  hsai->TxHalfCpltCallback(hsai);
 
 
 2435    hsai->
Instance->CR1 &= (uint32_t)(~SAI_xCR1_DMAEN);
 
 2443#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2444  hsai->RxCpltCallback(hsai);
 
 
 2460#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2461  hsai->RxHalfCpltCallback(hsai);
 
 
 2483    hsai->
Instance->CR1 &= ~SAI_xCR1_DMAEN;
 
 2495#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2496  hsai->ErrorCallback(hsai);
 
 
 2513  hsai->
Instance->CR1 &= ~SAI_xCR1_DMAEN;
 
 2517  hsai->
Instance->CLRFR = 0xFFFFFFFFU;
 
 2525    SET_BIT(hsai->
Instance->CR2, SAI_xCR2_FFLUSH);
 
 2534#if (USE_HAL_SAI_REGISTER_CALLBACKS == 1) 
 2535  hsai->ErrorCallback(hsai);
 
 
#define HAL_DMA_ERROR_NO_XFER
 
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
 
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
 
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
 
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
 
void SAI_BlockSynchroConfig(const SAI_HandleTypeDef *hsai)
Configure SAI Block synchronization mode.
 
uint32_t SAI_GetInputClock(const SAI_HandleTypeDef *hsai)
Get SAI Input Clock based on SAI source clock selection.
 
#define SAI_AUDIO_FREQUENCY_MCKDIV
 
#define SAI_CLOCKSTROBING_FALLINGEDGE
 
#define SAI_CLOCKSTROBING_RISINGEDGE
 
#define SAI_FS_STARTFRAME
 
#define SAI_FS_CHANNEL_IDENTIFICATION
 
#define SAI_FS_BEFOREFIRSTBIT
 
#define SAI_FS_ACTIVE_LOW
 
#define SAI_FS_ACTIVE_HIGH
 
#define SAI_FIFOSTATUS_FULL
 
#define SAI_FIFOSTATUS_EMPTY
 
#define SAI_MODEMASTER_RX
 
#define SAI_MODEMASTER_TX
 
#define SAI_SPDIF_PROTOCOL
 
#define SAI_AC97_PROTOCOL
 
#define SAI_FREE_PROTOCOL
 
#define SAI_SLOTACTIVE_ALL
 
#define SAI_SYNCHRONOUS_EXT_SAI1
 
#define SAI_SYNCHRONOUS_EXT_SAI2
 
#define HAL_SAI_ERROR_UDR
 
#define HAL_SAI_ERROR_LFSDET
 
#define HAL_SAI_ERROR_CNREADY
 
#define HAL_SAI_ERROR_NONE
 
#define HAL_SAI_ERROR_TIMEOUT
 
#define HAL_SAI_ERROR_WCKCFG
 
#define HAL_SAI_ERROR_DMA
 
#define HAL_SAI_ERROR_AFSDET
 
#define HAL_SAI_ERROR_OVR
 
HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot)
Initialize the structure FrameInit, SlotInit and the low part of Init according to the specified para...
 
void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai)
Initialize the SAI MSP.
 
void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai)
DeInitialize the SAI MSP.
 
HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai)
Initialize the SAI according to the specified parameters. in the SAI_InitTypeDef structure and initia...
 
HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai)
DeInitialize the SAI peripheral.
 
HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai)
Abort the current transfer and disable the SAI.
 
HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size)
Receive an amount of data in non-blocking mode with DMA.
 
void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai)
Tx Transfer completed callback.
 
HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receive an amount of data in blocking mode.
 
HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with Interrupt.
 
HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai)
Resume the audio stream playing from the Media.
 
HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size)
Receive an amount of data in non-blocking mode with Interrupt.
 
HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai)
Disable the Rx mute detection.
 
HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t counter)
Enable the Rx mute detection.
 
HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai)
Stop the audio stream playing from the Media.
 
void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai)
Handle SAI interrupt request.
 
HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmit an amount of data in blocking mode.
 
HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai)
Pause the audio stream playing from the Media.
 
void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai)
SAI error callback.
 
void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai)
Rx Transfer half completed callback.
 
HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with DMA.
 
void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai)
Tx Transfer Half completed callback.
 
HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai)
Disable the Tx mute mode.
 
HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val)
Enable the Tx mute mode.
 
void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai)
Rx Transfer completed callback.
 
uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai)
Return the SAI error code.
 
HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai)
Return the SAI handle state.
 
#define __HAL_SAI_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the specified SAI pending flag.
 
#define __HAL_SAI_DISABLE_IT(__HANDLE__, __INTERRUPT__)
 
#define __HAL_SAI_ENABLE(__HANDLE__)
Enable SAI.
 
#define __HAL_SAI_DISABLE(__HANDLE__)
Disable SAI.
 
#define __HAL_SAI_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable or disable the specified SAI interrupts.
 
void(* SAIcallback)(void)
SAI Callback prototype.
 
HAL_SAI_StateTypeDef
HAL State structures definition.
 
#define SAI_DEFAULT_TIMEOUT
 
static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai)
Rx Handler for Receive in Interrupt mode for 32-Bit transfer.
 
static void SAI_DMARxCplt(DMA_HandleTypeDef *hdma)
DMA SAI receive process complete callback.
 
static void SAI_DMAAbort(DMA_HandleTypeDef *hdma)
DMA SAI Abort callback.
 
static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai)
Tx Handler for Transmit in Interrupt mode for 32-Bit transfer.
 
static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai)
Tx Handler for Transmit in Interrupt mode 8-Bit transfer.
 
static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai)
Rx Handler for Receive in Interrupt mode 8-Bit transfer.
 
static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot)
Initialize the SAI I2S protocol according to the specified parameters in the SAI_InitTypeDef and crea...
 
static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai)
Tx Handler for Transmit in Interrupt mode for 16-Bit transfer.
 
static void SAI_DMAError(DMA_HandleTypeDef *hdma)
DMA SAI communication error callback.
 
static void SAI_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
DMA SAI receive process half complete callback.
 
static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai)
Disable the SAI and wait for the disabling.
 
static void SAI_DMATxHalfCplt(DMA_HandleTypeDef *hdma)
DMA SAI transmit process half complete callback.
 
static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai)
Rx Handler for Receive in Interrupt mode for 16-Bit transfer.
 
static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot)
Initialize the SAI PCM protocol according to the specified parameters in the SAI_InitTypeDef and crea...
 
static void SAI_DMATxCplt(DMA_HandleTypeDef *hdma)
DMA SAI transmit process complete callback.
 
static uint32_t SAI_InterruptFlag(const SAI_HandleTypeDef *hsai, uint32_t mode)
Return the interrupt flag to set according the SAI setup.
 
static void SAI_FillFifo(SAI_HandleTypeDef *hsai)
Fill the fifo.
 
#define IS_SAI_BLOCK_FIRSTBIT_OFFSET(OFFSET)
 
#define IS_SAI_BLOCK_MUTE_COUNTER(COUNTER)
 
#define IS_SAI_SUPPORTED_PROTOCOL(PROTOCOL)
 
#define IS_SAI_BLOCK_ACTIVE_FRAME(LENGTH)
 
#define IS_SAI_BLOCK_FS_OFFSET(OFFSET)
 
#define IS_SAI_BLOCK_SLOT_SIZE(SIZE)
 
#define IS_SAI_BLOCK_MODE(MODE)
 
#define IS_SAI_BLOCK_FIRST_BIT(BIT)
 
#define IS_SAI_BLOCK_MASTER_DIVIDER(DIVIDER)
 
#define IS_SAI_BLOCK_OUTPUT_DRIVE(DRIVE)
 
#define IS_SAI_BLOCK_PROTOCOL(PROTOCOL)
 
#define IS_SAI_BLOCK_SLOT_NUMBER(NUMBER)
 
#define IS_SAI_MONO_STEREO_MODE(MODE)
 
#define IS_SAI_BLOCK_SYNCHRO(SYNCHRO)
 
#define IS_SAI_SLOT_ACTIVE(ACTIVE)
 
#define IS_SAI_BLOCK_FS_POLARITY(POLARITY)
 
#define IS_SAI_BLOCK_MUTE_VALUE(VALUE)
 
#define IS_SAI_BLOCK_FS_DEFINITION(DEFINITION)
 
#define IS_SAI_BLOCK_FRAME_LENGTH(LENGTH)
 
#define IS_SAI_BLOCK_NODIVIDER(NODIVIDER)
 
#define IS_SAI_BLOCK_TRISTATE_MANAGEMENT(STATE)
 
#define IS_SAI_AUDIO_FREQUENCY(AUDIO)
 
#define IS_SAI_BLOCK_SYNCEXT(STATE)
 
#define IS_SAI_BLOCK_FIFO_THRESHOLD(THRESHOLD)
 
#define IS_SAI_BLOCK_COMPANDING_MODE(MODE)
 
#define IS_SAI_PROTOCOL_DATASIZE(DATASIZE)
 
#define IS_SAI_BLOCK_CLOCK_STROBING(CLOCK)
 
#define IS_SAI_BLOCK_DATASIZE(DATASIZE)
 
#define SAI_PROTOCOL_DATASIZE_16BIT
 
#define SAI_PROTOCOL_DATASIZE_32BIT
 
#define SAI_PROTOCOL_DATASIZE_24BIT
 
#define SAI_PROTOCOL_DATASIZE_16BITEXTENDED
 
#define SAI_I2S_LSBJUSTIFIED
 
#define SAI_I2S_MSBJUSTIFIED
 
#define assert_param(expr)
 
This file contains all the functions prototypes for the HAL module driver.
 
HAL_StatusTypeDef
HAL Status structures definition
 
#define __HAL_UNLOCK(__HANDLE__)
 
#define __HAL_LOCK(__HANDLE__)
 
uint32_t ActiveFrameLength
 
DMA handle Structure definition.
 
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
 
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
 
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
 
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
 
DMA_HandleTypeDef * hdmatx
 
SAI_FrameInitTypeDef FrameInit
 
SAI_SlotInitTypeDef SlotInit
 
void(* InterruptServiceRoutine)(struct __SAI_HandleTypeDef *hsai)
 
__IO HAL_SAI_StateTypeDef State
 
SAI_Block_TypeDef * Instance
 
DMA_HandleTypeDef * hdmarx