42typedef enum : uint32_t {
47typedef enum : uint64_t {
56typedef enum : uint64_t {
66typedef enum : uint32_t {
73typedef enum : uint32_t {
95 for (uint32_t ch = 0U; ch < (uint32_t)
k_ssie_count; ch++) {
96 for (uint32_t i = 0U; i < (uint32_t)
k_ssie_regs; i++) {
99 s_ssie[ch].tx_samples = 0U;
138 if ((off % 4UL) != 0UL) {
141 const uint32_t idx = (uint32_t)(off / 4UL);
142 return (idx < (uint32_t)
k_ssie_regs) ? (uint64_t)s->
reg[idx] : 0U;
172 if ((off % 4UL) != 0UL) {
175 const uint32_t idx = (uint32_t)(off / 4UL);
177 s->
reg[idx] = (uint32_t)value;
191 for (uint32_t ch = 0U; ch < (uint32_t)
k_ssie_count; ch++) {
193 if ((ssicr == 0U) && (
s_ssie[ch].tx_samples == 0U)) {
202 "I2S ch%u tx_samples=%u",
204 (
unsigned)
s_ssie[ch].tx_samples);
208 (
unsigned)((ssicr >> 1) & 1U),
209 (
unsigned)(ssicr & 1U),
Multi-channel console log store backing the board view's tabbed console.
void board_console_push(board_console_ch_t ch, const char *line)
Append one completed line to a channel ring and the ALL ring.
@ k_board_console_ch_i2s
SSIE / I2S sample-block summaries.
Decentralized peripheral-block registry for the board emulator core.
void board_periph_register_block(const board_periph_block_t *block)
Register a peripheral block's descriptor with the core registry.
ssie_field_t
SSICR / SSISR / SSIFSR field masks used by the model.
@ k_ssie_ren_ten
SSICR REN | TEN.
@ k_ssie_iirq
SSISR IIRQ idle-mode flag (bit 25).
@ k_ssie_tde
SSIFSR TDE transmit-FIFO-empty.
static RA8_INTERNAL void internal_ssie_block_register(void)
Register the SSIE block before main (host constructor).
ssie_off_t
Per-channel register byte offsets (ra8_ssie_regs.h).
@ k_ssie_off_ssifrdr
Receive FIFO data.
@ k_ssie_off_ssicr
Control (REN/TEN, MST, DWL, SWL ...).
@ k_ssie_off_ssifsr
FIFO status (RDF, TDE, RDC, TDC).
@ k_ssie_off_ssisr
Status (IIRQ + over/underflow flags).
@ k_ssie_off_ssifcr
FIFO control (RFRST/TFRST ...).
@ k_ssie_off_ssiftdr
Transmit FIFO data.
ssie_order_t
Per-tick order slot for the SSIE block (relative order only).
@ k_ssie_block_order
After the existing blocks; report order.
static RA8_INTERNAL void internal_ssie_reset(void)
Reset all SSIE channel shadows to power-on (zeroed) state.
static ssie_state_t s_ssie[k_ssie_count]
static const board_periph_block_t s_k_ssie_block
SSIE block descriptor (self-registered with the core).
static RA8_INTERNAL void internal_ssie_report(void)
End-of-run SSIE section: per-channel enable state + TX tally.
static RA8_INTERNAL void internal_ssie_write(uc_engine *uc, uint64_t addr, unsigned size, uint64_t value)
MMIO write inside the SSIE window: route to the addressed channel.
ssie_console_t
Console-tap line buffer capacity for an I2S/SSIE summary.
@ k_ssie_console_line_cap
Max chars in an "I2S ch.. tx=.." line.
ssie_map_t
SSIE block geometry (ra8_ssie_regs.h).
@ k_ssie_count
SSIE0, SSIE1.
@ k_ssie_stride
Bytes per SSIE channel.
@ k_ssie_regs
Shadowed 32-bit words per channel (0x00..0xFC).
static RA8_INTERNAL uint64_t internal_ssie_read(uc_engine *uc, uint64_t addr, unsigned size)
MMIO read inside the SSIE window: route to the addressed channel.
Bounded raw-descriptor I/O seam for the RA8 emulator.
emu_io_result_t priv_emu_io_errf(const char *format,...)
Format bounded text and write it to the injected error descriptor.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
A modelled peripheral block's self-description for the core registry.
One SSIE channel: a flat register shadow + a TX sample tally.
uint32_t tx_samples
SSIFTDR writes drained.
uint32_t reg[k_ssie_regs]
32-bit register shadow by word index.