103typedef enum : uint8_t {
127typedef enum : uint8_t {
151typedef enum : uint8_t {
169typedef enum : uint8_t {
189typedef enum : uint8_t {
209typedef enum : uint8_t {
225typedef enum : uint8_t {
623ra8_ssie_recv_iso(uint8_t channel, uint32_t* buffer, uint16_t max_samples, uint16_t* out_got);
708 const uint32_t* buffer,
710 uint16_t* out_written);
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
void(* ra8_ssie_event_fn_t)(void *ctx, uint8_t channel, uint8_t events, uint32_t ssisr)
SSIE event callback fired by ra8_ssie_dispatch.
ra8_err_t ra8_ssie_clear_status(uint8_t channel, uint32_t mask)
Clear sticky error flags in SSISR.
ra8_err_t ra8_ssie_write_buffer(uint8_t channel, const uint32_t *buffer, uint16_t samples, uint16_t *out_written)
Drain a host buffer into the TX FIFO until either runs out.
ra8_err_t ra8_ssie_init(uint8_t channel, const ra8_ssie_cfg_t *cfg)
Initialise an SSIE channel for I2S / TDM / monaural transfer.
void ra8_ssie_dispatch(uint8_t channel)
ISR helper: fire the registered event handler.
ra8_err_t ra8_ssie_start_recovery(uint8_t channel)
Force the channel back into a known idle state.
ra8_err_t ra8_ssie_detach_dma(uint8_t channel)
Tear down DMAC channels attached to the SSIE FIFOs.
ra8_ssie_format_t
Audio frame format (drives SSIOFR.OMOD[1:0] and SSICR.FRM).
@ k_ra8_ssie_format_tdm
Backwards alias kept for unit tests that index OMOD directly.
@ k_ra8_ssie_format_i2s
I2S, 2 channels per frame.
@ k_ra8_ssie_format_tdm_4
TDM 4-slot.
@ k_ra8_ssie_format_monaural
Monaural single-channel.
@ k_ra8_ssie_format_tdm_8
TDM 8-slot.
@ k_ra8_ssie_format_tdm_6
TDM 6-slot.
@ k_ra8_ssie_format_left_just
Left-justified, 2 channels.
@ k_ra8_ssie_format_right_just
Right-justified, 2 channels.
ra8_err_t ra8_ssie_set_thresholds(uint8_t channel, uint8_t tx_threshold, uint8_t rx_threshold)
Update the FIFO trigger watermarks at runtime.
ra8_err_t ra8_ssie_read_sample(uint8_t channel, uint32_t *out)
Pop one 32-bit sample from the receive FIFO.
ra8_err_t ra8_ssie_attach_dma(uint8_t channel, const ra8_ssie_dma_cfg_t *dma)
Attach DMAC channels to the SSIE TX and/or RX FIFOs.
ra8_err_t ra8_ssie_attach_handler(ra8_ssie_event_fn_t fn, void *ctx)
Attach a shared event callback for both SSIE channels.
ra8_ssie_system_word_t
System word length (drives SSICR.SWL[2:0]).
@ k_ra8_ssie_swl_48
48-bit system word.
@ k_ra8_ssie_swl_32
32-bit system word.
@ k_ra8_ssie_swl_256
256-bit system word.
@ k_ra8_ssie_swl_24
24-bit system word.
@ k_ra8_ssie_swl_64
64-bit system word.
@ k_ra8_ssie_swl_16
16-bit system word.
@ k_ra8_ssie_swl_8
8-bit system word.
@ k_ra8_ssie_swl_128
128-bit system word.
ra8_err_t ra8_ssie_send_iso(uint8_t channel, const uint32_t *buffer, uint16_t samples)
Block-mode isochronous send.
ra8_err_t ra8_ssie_set_fifo_threshold(uint8_t channel, uint8_t tx_threshold, uint8_t rx_threshold)
Programme SSITDMR / SSIRDMR FIFO thresholds in one call.
ra8_err_t ra8_ssie_set_irq_enable(uint8_t channel, uint32_t mask, bool enable)
Update the IRQ enable mask without rewriting SSICR fully.
ra8_err_t ra8_ssie_write_sample(uint8_t channel, uint32_t sample)
Push one 32-bit sample into the transmit FIFO.
ra8_ssie_bclk_div_t
Bit-clock divider (drives SSICR.CKDV[3:0]).
@ k_ra8_ssie_bclk_div_32
AUDIO_MCK / 32.
@ k_ra8_ssie_bclk_div_4
AUDIO_MCK / 4.
@ k_ra8_ssie_bclk_div_24
AUDIO_MCK / 24.
@ k_ra8_ssie_bclk_div_8
AUDIO_MCK / 8.
@ k_ra8_ssie_bclk_div_6
AUDIO_MCK / 6.
@ k_ra8_ssie_bclk_div_1
AUDIO_MCK / 1.
@ k_ra8_ssie_bclk_div_48
AUDIO_MCK / 48.
@ k_ra8_ssie_bclk_div_16
AUDIO_MCK / 16.
@ k_ra8_ssie_bclk_div_64
AUDIO_MCK / 64.
@ k_ra8_ssie_bclk_div_96
AUDIO_MCK / 96.
@ k_ra8_ssie_bclk_div_128
AUDIO_MCK / 128.
@ k_ra8_ssie_bclk_div_12
AUDIO_MCK / 12.
@ k_ra8_ssie_bclk_div_2
AUDIO_MCK / 2.
ra8_ssie_dir_t
Communication direction selector for ra8_ssie_start.
@ k_ra8_ssie_dir_tx
Transmission only (TEN).
@ k_ra8_ssie_dir_rx
Reception only (REN).
@ k_ra8_ssie_dir_tx_rx
Full duplex (TEN | REN).
ra8_err_t ra8_ssie_attach_dma_pair(uint8_t channel, uint8_t tx_dma_channel, uint8_t rx_dma_channel)
Pair an SSIE channel's TX + RX FIFOs to DMAC channels.
ra8_err_t ra8_ssie_deinit(uint8_t channel)
Tear down an SSIE channel and gate its clock.
ra8_err_t ra8_ssie_stop(uint8_t channel)
Disable transmission and reception.
ra8_err_t ra8_ssie_mute(uint8_t channel, bool enable)
Enable or disable mute on the next frame boundary.
ra8_ssie_data_word_t
Data word length (drives SSICR.DWL[2:0]).
@ k_ra8_ssie_dwl_32
32-bit data word.
@ k_ra8_ssie_dwl_16
16-bit data word.
@ k_ra8_ssie_dwl_20
20-bit data word.
@ k_ra8_ssie_dwl_18
18-bit data word.
@ k_ra8_ssie_dwl_8
8-bit data word.
@ k_ra8_ssie_dwl_24
24-bit data word.
@ k_ra8_ssie_dwl_22
22-bit data word.
ra8_err_t ra8_ssie_exit_stop(uint8_t channel)
Re-ungate the channel's MSTP bit.
ra8_err_t ra8_ssie_recv_iso(uint8_t channel, uint32_t *buffer, uint16_t max_samples, uint16_t *out_got)
Block-mode isochronous receive.
ra8_err_t ra8_ssie_start(uint8_t channel, ra8_ssie_dir_t dir)
Enable transmission, reception, or full duplex.
ra8_err_t ra8_ssie_enter_stop(uint8_t channel)
Gate the channel's MSTP bit (preserve register state).
ra8_err_t ra8_ssie_read_buffer(uint8_t channel, uint32_t *buffer, uint16_t samples, uint16_t *out_read)
Empty the RX FIFO into a host buffer until either runs out.
ra8_err_t ra8_ssie_get_status(uint8_t channel, ra8_ssie_status_t *out)
Snapshot SSISR + SSIFSR into a status struct.
ra8_ssie_role_t
Controller / peripheral selection (drives SSICR.MST).
@ k_ra8_ssie_role_controller
Bit clock + LR clock are outputs.
@ k_ra8_ssie_role_peripheral
Bit clock + LR clock are inputs.
ra8_ssie_event_t
Decoded SSIE callback event bit-flags.
@ k_ra8_ssie_evt_error
Aggregate error mask.
@ k_ra8_ssie_evt_tx_empty
TDE asserted (TIE on).
@ k_ra8_ssie_evt_none
No bits set.
@ k_ra8_ssie_evt_idle
IIRQ asserted.
@ k_ra8_ssie_evt_tx_over
TOIRQ.
@ k_ra8_ssie_evt_rx_under
RUIRQ.
@ k_ra8_ssie_evt_rx_over
ROIRQ.
@ k_ra8_ssie_evt_rx_full
RDF asserted (RIE on).
@ k_ra8_ssie_evt_tx_under
TUIRQ.
Configuration descriptor for ra8_ssie_init.
uint8_t rx_threshold
SSISCR.RDFS[4:0] watermark.
ra8_ssie_role_t role
Controller or peripheral.
uint8_t tx_threshold
SSISCR.TDES[4:0] watermark.
bool long_frame
true: SSICR.DEL = 0 (long).
ra8_ssie_data_word_t data_word
Significant bits per channel.
bool bckp_rising
true: SSICR.BCKP = 1.
bool byte_swap
SSIFCR.BSW.
ra8_ssie_system_word_t system_word
Total bits per channel.
bool spdp_high
true: SSICR.SPDP = 1.
bool bck_idle_stop
SSIOFR.BCKASTP (controller only).
bool lr_continue
SSIOFR.LRCONT (controller only).
bool lrckp_low
true: SSICR.LRCKP = 1.
bool enable_aucke
SSIFCR.AUCKE (controller only).
ra8_ssie_format_t format
I2S / TDM / monaural.
ra8_ssie_bclk_div_t bclk_div
CKDV divider (controller only).
bool use_gpt_clk
true: GTIOC2A; false: AUDIO_CLK.
DMA pump descriptor for ra8_ssie_attach_dma.
uint8_t rx_dma_channel
DMAC channel to feed RX (>=8 = unused).
uint16_t rx_samples
RX sample count (must be > 0 if rx).
uint32_t * tx_buffer
Source buffer for TX (32-bit samples).
uint32_t * rx_buffer
Destination buffer for RX.
uint16_t tx_samples
TX sample count (must be > 0 if tx).
uint8_t tx_dma_channel
DMAC channel to drain TX (>=8 = unused).
Snapshot of FIFO levels + error flags returned by ra8_ssie_get_status.
uint32_t ssisr
Raw SSISR value.
bool rx_full
RDF flag: RX above SSISCR.RDFS.
uint8_t rx_count
RDC[5:0] – entries currently in RX.
uint32_t ssifsr
Raw SSIFSR value.
bool idle
IIRQ: SSIE in idle state.
bool error
Any of ROIRQ/RUIRQ/TOIRQ/TUIRQ set.
uint8_t tx_count
TDC[5:0] – entries currently in TX.
bool tx_empty
TDE flag: TX below SSISCR.TDES.
uint8_t events
Decoded ra8_ssie_event_t bitmap.