ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_ssie_regs.h
Go to the documentation of this file.
1
35
36#pragma once
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#include <stdint.h>
43
44#include "ra8_attributes.h"
45
54typedef enum : uintptr_t {
55 k_ra8_ssie0_base_addr = 0x4025D000UL,
56 k_ra8_ssie1_base_addr = 0x4025D100UL,
58
71
102
107typedef enum : uint32_t {
108 k_ra8_ssie_mask_ren = 0x00000001UL,
109 k_ra8_ssie_mask_ten = 0x00000002UL,
110 k_ra8_ssie_mask_ren_ten = 0x00000003UL,
111 k_ra8_ssie_mask_muen = 0x00000008UL,
112 k_ra8_ssie_mask_ckdv = 0x000000F0UL,
113 k_ra8_ssie_mask_del = 0x00000100UL,
114 k_ra8_ssie_mask_pdta = 0x00000200UL,
115 k_ra8_ssie_mask_sdta = 0x00000400UL,
116 k_ra8_ssie_mask_spdp = 0x00000800UL,
117 k_ra8_ssie_mask_lrckp = 0x00001000UL,
118 k_ra8_ssie_mask_bckp = 0x00002000UL,
119 k_ra8_ssie_mask_mst = 0x00004000UL,
120 k_ra8_ssie_mask_swl = 0x00070000UL,
121 k_ra8_ssie_mask_dwl = 0x00380000UL,
122 k_ra8_ssie_mask_frm = 0x00C00000UL,
123 k_ra8_ssie_mask_iien = 0x02000000UL,
124 k_ra8_ssie_mask_roien = 0x04000000UL,
125 k_ra8_ssie_mask_ruien = 0x08000000UL,
126 k_ra8_ssie_mask_toien = 0x10000000UL,
127 k_ra8_ssie_mask_tuien = 0x20000000UL,
128 k_ra8_ssie_mask_cks = 0x40000000UL,
129 k_ra8_ssie_mask_irq_all = 0x3E000000UL,
130 k_ra8_ssie_mask_err_ien = 0x3C000000UL,
132
143typedef enum : uint32_t {
144 k_ra8_ssie_mask_idst = 0x00000001UL,
145 k_ra8_ssie_mask_iirq = 0x02000000UL,
146 k_ra8_ssie_mask_roirq = 0x04000000UL,
147 k_ra8_ssie_mask_ruirq = 0x08000000UL,
148 k_ra8_ssie_mask_toirq = 0x10000000UL,
149 k_ra8_ssie_mask_tuirq = 0x20000000UL,
150 k_ra8_ssie_mask_err_all = 0x3C000000UL,
151 k_ra8_ssie_mask_evt_all = 0x3E000000UL,
153
163typedef enum : uint32_t {
164 k_ra8_ssie_mask_rfrst = 0x00000001UL,
165 k_ra8_ssie_mask_tfrst = 0x00000002UL,
167 k_ra8_ssie_mask_rie = 0x00000004UL,
168 k_ra8_ssie_mask_tie = 0x00000008UL,
169 k_ra8_ssie_mask_rie_tie = 0x0000000CUL,
170 k_ra8_ssie_mask_rtrg = 0x00000030UL,
171 k_ra8_ssie_mask_ttrg = 0x000000C0UL,
172 k_ra8_ssie_mask_bsw = 0x00000800UL,
173 k_ra8_ssie_mask_ssirst = 0x00010000UL,
174 k_ra8_ssie_mask_aucke = 0x80000000UL,
176
188
198typedef enum : uint32_t {
199 k_ra8_ssie_mask_rdf = 0x00000001UL,
200 k_ra8_ssie_mask_rdc = 0x00003F00UL,
201 k_ra8_ssie_mask_tde = 0x00010000UL,
202 k_ra8_ssie_mask_tdc = 0x3F000000UL,
206
211typedef enum : uint8_t {
215
220typedef enum : uint32_t {
221 k_ra8_ssie_mask_omod = 0x00000003UL,
222 k_ra8_ssie_mask_lrcont = 0x00000100UL,
223 k_ra8_ssie_mask_bckastp = 0x00000200UL,
225
230typedef enum : uint32_t {
231 k_ra8_ssie_mask_rdfs = 0x0000001FUL,
232 k_ra8_ssie_mask_tdes = 0x00001F00UL,
234
243
259
274
291typedef struct {
292 volatile uint32_t SSICR;
293 volatile uint32_t SSISR;
294 volatile uint8_t _r0[8];
295 volatile uint32_t SSIFCR;
296 volatile uint32_t SSIFSR;
297 volatile uint32_t SSIFTDR;
298 volatile uint32_t SSIFRDR;
299 volatile uint32_t SSIOFR;
300 volatile uint32_t SSISCR;
302
311static inline volatile r_ssie_regs_t* ra8_ssie(uint8_t channel)
312{
313 if ((uint16_t)channel >= k_ra8_ssie_channel_count) {
314 return nullptr;
315 }
316 return (volatile r_ssie_regs_t*)(k_ra8_ssie0_base_addr +
317 ((uintptr_t)channel * (uintptr_t)k_ra8_ssie_channel_stride));
318}
319
320#ifdef __cplusplus
321}
322#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
ra8_ssifcr_shift_t
SSIFCR field bit positions for RTRG / TTRG.
@ k_ra8_ssie_shift_ttrg
TTRG[1:0] starts at bit 6.
@ k_ra8_ssie_shift_rtrg
RTRG[1:0] starts at bit 4.
ra8_ssifsr_shift_t
SSIFSR field bit positions for extraction.
@ k_ra8_ssie_shift_tdc
TDC[5:0] starts at bit 24.
@ k_ra8_ssie_shift_rdc
RDC[5:0] starts at bit 8.
ra8_ssiscr_shift_t
SSISCR field bit positions.
@ k_ra8_ssie_shift_tdes
TDES[4:0] starts at bit 8.
@ k_ra8_ssie_shift_rdfs
RDFS[4:0] starts at bit 0.
ra8_ssifcr_mask_t
SSIFCR FIFO control bits (HUM Ch 46.2.3, p 3077).
@ k_ra8_ssie_mask_rie
RIE receive full IRQ.
@ k_ra8_ssie_mask_tfrst
TFRST transmit FIFO reset.
@ k_ra8_ssie_mask_tie
TIE transmit empty IRQ.
@ k_ra8_ssie_mask_aucke
AUCKE AUDIO_MCK enable.
@ k_ra8_ssie_mask_rfrst
RFRST receive FIFO reset.
@ k_ra8_ssie_mask_ttrg
TTRG[1:0] @ [7:6].
@ k_ra8_ssie_mask_rie_tie
RIE | TIE.
@ k_ra8_ssie_mask_rtrg
RTRG[1:0] @ [5:4].
@ k_ra8_ssie_mask_bsw
BSW byte-swap enable.
@ k_ra8_ssie_mask_ssirst
SSIRST software reset.
@ k_ra8_ssie_mask_rfrst_tfrst
Both FIFO reset bits.
ra8_ssie_limits_t
Channel-count, FIFO depth and stride constants.
@ k_ra8_ssie_fifo_half_water
Default TX watermark.
@ k_ra8_ssie_channel_count
SSIE0 + SSIE1.
@ k_ra8_ssie_reset_poll_max
Bounded reset poll loops.
@ k_ra8_ssie_fifo_block_size
DMA block stages.
@ k_ra8_ssie_channel_stride
Bytes between channels.
@ k_ra8_ssie_fifo_depth
32-stage FIFO per dir.
ra8_ssie_omod_t
OMOD[1:0] encoding from HUM Ch 46.2.7 table p 3091.
@ k_ra8_ssie_omod_i2s
RA8 ssie omod i2s.
@ k_ra8_ssie_omod_tdm
RA8 ssie omod tdm.
@ k_ra8_ssie_omod_monaural
RA8 ssie omod monaural.
ra8_ssicr_bit_t
SSICR control-bit positions.
@ k_ra8_ssie_bit_spdp
SPDP: padding polarity.
@ k_ra8_ssie_bit_del
DEL: serial data delay select.
@ k_ra8_ssie_bit_roien
ROIEN: receive overflow IRQ en.
@ k_ra8_ssie_bit_muen
MUEN: mute enable.
@ k_ra8_ssie_bit_ckdv0
CKDV[3:0] @ [7:4] bit clock div.
@ k_ra8_ssie_bit_lrckp
LRCKP: LR/FS init level + polarity.
@ k_ra8_ssie_bit_dwl0
DWL[2:0] @ [21:19] data word.
@ k_ra8_ssie_bit_frm0
FRM[1:0] @ [23:22] frame words.
@ k_ra8_ssie_bit_cks
CKS: controller audio-clock select.
@ k_ra8_ssie_bit_ruien
RUIEN: receive underflow IRQ en.
@ k_ra8_ssie_bit_pdta
PDTA: placement data alignment.
@ k_ra8_ssie_bit_bckp
BCKP: bit clock polarity.
@ k_ra8_ssie_bit_ten
TEN: transmission enable.
@ k_ra8_ssie_bit_toien
TOIEN: transmit overflow IRQ en.
@ k_ra8_ssie_bit_swl0
SWL[2:0] @ [18:16] system word.
@ k_ra8_ssie_bit_tuien
TUIEN: transmit underflow IRQ en.
@ k_ra8_ssie_bit_ren
REN: reception enable.
@ k_ra8_ssie_bit_sdta
SDTA: serial data alignment.
@ k_ra8_ssie_bit_mst
MST: controller-mode enable.
@ k_ra8_ssie_bit_iien
IIEN: idle mode IRQ enable.
ra8_ssie_frm_t
FRM[1:0] encoding from HUM Ch 46.2.1 table p 3057.
@ k_ra8_ssie_frm_default
2 (I2S) / 1 (Mon) / – (TDM)
@ k_ra8_ssie_frm_alt3
– / – / 8 (TDM-8)
@ k_ra8_ssie_frm_alt1
– / – / 4 (TDM-4)
@ k_ra8_ssie_frm_alt2
– / – / 6 (TDM-6)
ra8_ssie_addr_t
Memory-mapped base addresses for SSIE channels.
@ k_ra8_ssie0_base_addr
SSIE0 base (full duplex).
@ k_ra8_ssie1_base_addr
SSIE1 base (half duplex).
ra8_ssisr_mask_t
SSISR status flags (HUM Ch 46.2.2, p 3066-3067).
@ k_ra8_ssie_mask_idst
IDST live idle flag (RO).
@ k_ra8_ssie_mask_err_all
ROIRQ|RUIRQ|TOIRQ|TUIRQ.
@ k_ra8_ssie_mask_ruirq
RUIRQ receive underflow.
@ k_ra8_ssie_mask_roirq
ROIRQ receive overflow.
@ k_ra8_ssie_mask_evt_all
IIRQ + four error flags.
@ k_ra8_ssie_mask_toirq
TOIRQ transmit overflow.
@ k_ra8_ssie_mask_tuirq
TUIRQ transmit underflow.
@ k_ra8_ssie_mask_iirq
IIRQ idle-mode flag (RO).
ra8_ssicr_mask_t
SSICR field masks (32-bit register).
@ k_ra8_ssie_mask_err_ien
ROIEN..TUIEN tx/rx err IRQs.
@ k_ra8_ssie_mask_lrckp
LRCKP.
@ k_ra8_ssie_mask_ckdv
CKDV[3:0] @ [7:4].
@ k_ra8_ssie_mask_swl
SWL[2:0] @ [18:16].
@ k_ra8_ssie_mask_ruien
RUIEN.
@ k_ra8_ssie_mask_dwl
DWL[2:0] @ [21:19].
@ k_ra8_ssie_mask_sdta
SDTA.
@ k_ra8_ssie_mask_mst
MST.
@ k_ra8_ssie_mask_tuien
TUIEN.
@ k_ra8_ssie_mask_bckp
BCKP.
@ k_ra8_ssie_mask_ren
REN.
@ k_ra8_ssie_mask_del
DEL.
@ k_ra8_ssie_mask_spdp
SPDP.
@ k_ra8_ssie_mask_roien
ROIEN.
@ k_ra8_ssie_mask_muen
MUEN.
@ k_ra8_ssie_mask_ren_ten
REN | TEN.
@ k_ra8_ssie_mask_ten
TEN.
@ k_ra8_ssie_mask_iien
IIEN.
@ k_ra8_ssie_mask_frm
FRM[1:0] @ [23:22].
@ k_ra8_ssie_mask_cks
CKS audio clock select.
@ k_ra8_ssie_mask_pdta
PDTA.
@ k_ra8_ssie_mask_irq_all
IIEN..TUIEN aggregate IRQ.
@ k_ra8_ssie_mask_toien
TOIEN.
ra8_ssifsr_mask_t
SSIFSR FIFO status bits (HUM Ch 46.2.4, p 3083-3084).
@ k_ra8_ssie_mask_tde_clear
Keep RDF while clearing TDE.
@ k_ra8_ssie_mask_rdf_clear
Keep TDE while clearing RDF.
@ k_ra8_ssie_mask_rdf
RDF receive data full.
@ k_ra8_ssie_mask_tdc
TDC[5:0] @ [29:24].
@ k_ra8_ssie_mask_rdc
RDC[5:0] @ [13:8].
@ k_ra8_ssie_mask_tde
TDE transmit data empty.
ra8_ssiscr_mask_t
SSISCR FIFO trigger thresholds (HUM Ch 46.2.8, p 3094).
@ k_ra8_ssie_mask_rdfs
RDFS[4:0] @ [4:0].
@ k_ra8_ssie_mask_tdes
TDES[4:0] @ [12:8].
static volatile r_ssie_regs_t * ra8_ssie(uint8_t channel)
Get pointer to an SSIE channel block.
ra8_ssiofr_mask_t
SSIOFR audio format bits (HUM Ch 46.2.7, p 3091).
@ k_ra8_ssie_mask_omod
OMOD[1:0] @ [1:0].
@ k_ra8_ssie_mask_lrcont
LRCONT continuation.
@ k_ra8_ssie_mask_bckastp
BCKASTP idle-stop BCK.
Per-channel SSIE register window.
volatile uint32_t SSISR
+0x04 Status register.
volatile uint32_t SSIFTDR
+0x18 Transmit FIFO data.
volatile uint32_t SSIOFR
+0x20 Audio format register.
volatile uint32_t SSIFSR
+0x14 FIFO status register.
volatile uint32_t SSISCR
+0x24 Status control register.
volatile uint32_t SSIFRDR
+0x1C Receive FIFO data.
volatile uint32_t SSICR
+0x00 Control register.
volatile uint32_t SSIFCR
+0x10 FIFO control register.
volatile uint8_t _r0[8]
Reserved 0x08..0x0F.