148#define SAI_HW_COUNT 3
151#define SAI_TXBD_COUNT 4
154#define SAI_RXBD_COUNT 4
381enum bufferDepletionBehavior_t
673 // end of sai_presets
750 static int sDmaIsr(
void *ctx, DmaCh *dmaCh,
bool haveError);
769 uint32_t txReadyCount;
770 uint32_t rxReadyCount;
793 int validateClockSync(
const SAI_cfg_t &cfg)
const;
794 int validateCfg(
const SAI_cfg_t &cfg)
const;
795 int InitClocks(uint32_t *saiClk, uint32_t divRem);
797 DmaTcd &getFirstTxBD()
const;
798 DmaTcd &getLastTxBD()
const;
799 DmaTcd &getNextTxBD()
const;
800 DmaTcd &getFirstRxBD()
const;
801 DmaTcd &getLastRxBD()
const;
802 DmaTcd &getNextRxBD()
const;
803 DmaTcd &getFirstBD(
const DmaCh *dma)
const;
804 DmaTcd &getLastBD(
const DmaCh *dma)
const;
805 DmaTcd &getNextBD(
const DmaCh *dma)
const;
807 int queueBuffer(
void *buffer, uint32_t bufferLen,
bool waitIfNeeded,
808 bool enableHalfNotify, DmaCh *dma);
810 int DmaIsr(DmaCh *dma,
bool haveError);
957 bool enableHalfNotify =
false);
999 bool enableHalfNotify =
false);
Main driver class for SAI peripheral operation.
Definition sai.h:731
void Shutdown()
Shut down the SAI hardware and release driver resources.
void RegisterRxBufferCB(SAI_BufferDoneFn_t cb)
Register a callback for receive buffer completion.
int getCurrentConfig(SAI_cfg_t &cfg)
Retrieve the current active configuration.
ctxState_t getState() const
Get the current operational state of the driver.
Definition sai.h:909
int GetMaxTxBuffers()
Get the maximum number of transmit buffers that can be queued.
Definition sai.h:868
void RegisterTxBufferCB(SAI_BufferDoneFn_t cb)
Register a callback for transmit buffer completion.
uint8_t getStickyRxError()
Get the sticky receive error status.
Definition sai.h:1086
int GetMaxRxBuffers()
Get the maximum number of receive buffers that can be queued.
Definition sai.h:875
void dump()
Dump driver state and statistics to the console.
void clrStickyTxError()
Clear the sticky transmit error flag.
Definition sai.h:1058
uint8_t getStickyTxError()
Get the sticky transmit error status.
Definition sai.h:1076
void clrStickyRxError()
Clear the sticky receive error flag.
Definition sai.h:1066
int ReadyReceiveBuffer(void *buffer, uint32_t bufferLen, bool waitIfNeeded, bool enableHalfNotify=false)
Queue a buffer for receiving data.
int Init(const SAI_cfg_t &cfg)
Initialize the SAI hardware and driver context.
int TransmitBuffer(void *buffer, uint32_t bufferLen, bool waitIfNeeded, bool enableHalfNotify=false)
Queue a buffer for transmission.
ctxState_t
Current operational state of the SAI driver.
Definition sai.h:738
@ CTX_STATE_TXRX
Definition sai.h:743
@ CTX_STATE_STOPPED
Definition sai.h:739
@ CTX_STATE_INIT
Definition sai.h:740
@ CTX_STATE_TX
Definition sai.h:741
@ CTX_STATE_RX
Definition sai.h:742
SAICtx_t sai
Global SAI driver instance.
void(* SAI_BufferDoneFn_t)(void *buffer, int doneInvalid)
Callback function type for buffer completion notifications.
Definition sai.h:204
#define SAI_RXBD_COUNT
Definition sai.h:154
#define SAI_TXBD_COUNT
Definition sai.h:151
#define SAI_HW_COUNT
Definition sai.h:148
clkPol_t
Clock polarity configuration.
Definition sai.h:247
rxTxSync_t
Synchronization mode between RX and TX channels.
Definition sai.h:395
clkSrc_t
Clock source selection for SAI bit clock generation.
Definition sai.h:221
clkCh_t
Clock channel selection for determining which clock signal to use.
Definition sai.h:234
frameSyncOut_t
Frame synchronization signal output mode.
Definition sai.h:335
clkGate_t
Clock gating mode for power optimization.
Definition sai.h:294
bufferDepletionBehavior_t
DMA behavior when all queued buffers are exhausted.
Definition sai.h:382
frameEdge_t
Frame sync edge that indicates the start of a new frame.
Definition sai.h:308
dataPacking_t
Buffer word format and data justification.
Definition sai.h:353
clkOut_t
Bit clock output mode configuration.
Definition sai.h:321
startCond_t
Starting conditions that trigger SAI data transfers.
Definition sai.h:274
bitOrder_t
Bit transmission order within each word.
Definition sai.h:369
frameSyncCh_t
Frame synchronization channel selection.
Definition sai.h:260
@ CLK_ACTIVE_LOW
Definition sai.h:249
@ CLK_ACTIVE_HIGH
Definition sai.h:248
@ RXTX_SYNC_TX
Definition sai.h:398
@ RXTX_SYNC_RX
Definition sai.h:397
@ RXTX_ASYNC
Definition sai.h:396
@ CLK_SRC_MCK
Definition sai.h:222
@ CLK_SRC_EXT
Definition sai.h:223
@ CLK_CH_RK
Definition sai.h:236
@ CLK_CH_CH
Definition sai.h:235
@ CLK_CH_TK
Definition sai.h:237
@ FRAME_SYNC_NEGATIVE
Definition sai.h:337
@ FRAME_SYNC_INPUT
Definition sai.h:336
@ FRAME_SYNC_POSITIVE
Definition sai.h:338
@ CLK_GATE_FRAME_HIGH
Definition sai.h:297
@ CLK_GATE_FRAME_LOW
Definition sai.h:296
@ CLK_GATE_CONTINUOUS
Definition sai.h:295
@ DEPLETED_REPEAT_LAST
Definition sai.h:384
@ DEPLETED_PAUSE
Definition sai.h:383
@ FRAME_SYNC_RISING
Definition sai.h:309
@ FRAME_SYNC_FALLING
Definition sai.h:310
@ BUFFER_WORD8
Definition sai.h:354
@ BUFFER_WORD16_RIGHT
Definition sai.h:356
@ BUFFER_WORD16_LEFT
Definition sai.h:355
@ BUFFER_WORD32_RIGHT
Definition sai.h:358
@ BUFFER_WORD32_LEFT
Definition sai.h:357
@ CLK_OUT_CONTINUOUS
Definition sai.h:323
@ CLK_OUT_TRANSFER
Definition sai.h:324
@ CLK_OUT_INPUT
Definition sai.h:322
@ START_FRAME_RISING
Definition sai.h:280
@ START_FRAME_FALLING
Definition sai.h:279
@ START_FRAME_LEVEL
Definition sai.h:281
@ START_CONTINUOUS
Definition sai.h:275
@ START_FRAME_LOW
Definition sai.h:277
@ START_FRAME_HIGH
Definition sai.h:278
@ START_FRAME_EDGE
Definition sai.h:282
@ START_CMP_0
Definition sai.h:283
@ START_SYNC_RX_TX
Definition sai.h:276
@ MOST_SIG_FIRST
Definition sai.h:371
@ LEAST_SIG_FIRST
Definition sai.h:370
@ SYNC_CH_CH
Definition sai.h:261
@ SYNC_CH_RX
Definition sai.h:262
@ SYNC_CH_TX
Definition sai.h:263
const SAI_cfg_t SAI_I2S_SLAVE_8_TXRX_RK
const SAI_cfg_t SAI_LJUST_SLAVE_8_TXRX_TKRK
const SAI_cfg_t SAI_I2S_SLAVE_8_TXRX_TK
const SAI_cfg_t SAI_LJUST_SLAVE_24_TXRX_RK
const SAI_cfg_t SAI_I2S_SLAVE_16_TXRX_TKRK
const SAI_cfg_t SAI_LJUST_SLAVE_16_TXRX_TK
const SAI_cfg_t SAI_LJUST_SLAVE_16_TXRX_RK
const SAI_cfg_t SAI_I2S_SLAVE_24_TXRX_TKRK
const SAI_cfg_t SAI_LJUST_SLAVE_16_TXRX_TKRK
const SAI_cfg_t SAI_LJUST_SLAVE_24_TXRX_TKRK
const SAI_cfg_t SAI_LJUST_SLAVE_8_TXRX_TK
const SAI_cfg_t SAI_I2S_SLAVE_8_TXRX_TKRK
const SAI_cfg_t SAI_I2S_SLAVE_24_TXRX_TK
const SAI_cfg_t SAI_LJUST_SLAVE_24_TXRX_TK
const SAI_cfg_t SAI_I2S_SLAVE_24_TXRX_RK
const SAI_cfg_t SAI_I2S_SLAVE_16_TXRX_TK
const SAI_cfg_t SAI_I2S_SLAVE_16_TXRX_RK
const SAI_cfg_t SAI_LJUST_SLAVE_8_TXRX_RK
Complete configuration structure for the SAI driver.
Definition sai.h:563
SAI_rxtx_cfg_t rx
Definition sai.h:584
uint32_t txClkFreq
Definition sai.h:569
rxTxSync_t rxTxSync
Definition sai.h:578
I2S_Type * sai
Definition sai.h:581
SAI_rxtx_cfg_t tx
Definition sai.h:587
uint32_t rxClkFreq
Definition sai.h:575
Configuration structure for one direction (TX or RX) of the SAI module.
Definition sai.h:439
bool lineIdleState
Definition sai.h:510
clkCh_t clkCh
Definition sai.h:464
frameSyncCh_t syncCh
Definition sai.h:483
clkGate_t clkGate
Definition sai.h:455
dataPacking_t dataPacking
Definition sai.h:494
bufferDepletionBehavior_t depletionBehavior
Definition sai.h:529
frameEdge_t syncEdge
Definition sai.h:477
bool enable
Definition sai.h:441
clkSrc_t clkSrc
Definition sai.h:461
clkPol_t clkPol
Definition sai.h:467
uint8_t startDly
Definition sai.h:449
uint8_t wordsPerFrame
Definition sai.h:491
uint8_t bitsPerWord
Definition sai.h:516
frameSyncOut_t syncOut
Definition sai.h:480
bitOrder_t bitOrder
Definition sai.h:503
clkOut_t clkOut
Definition sai.h:458
startCond_t startCond
Definition sai.h:452
bool unifyDataStream
Definition sai.h:500
uint32_t wordMask
Definition sai.h:526
uint8_t syncLen
Definition sai.h:474