73 __asm__
volatile(
"dmb 0xF" :::
"memory");
Annotation-attribute framework macros for ra8-firmware.
#define RA8_ISR_SAFE
The function is callable from interrupt context.
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Inter-Processor Communication (IPC) register layout for the RA8D2.
static void ra8_ipc_barrier(void)
Cross-core data-memory barrier for IPC publish + lock ordering.
ra8_err_t ra8_ipc_attach_nmi_handler(ra8_ipc_nmi_fn_t fn, void *ctx)
Attach a callback for inter-processor NMI dispatch.
ra8_err_t ra8_ipc_install_isr(uint8_t unit, uint8_t priority)
Wire the IPC IRQ event into the ISR table.
ra8_err_t ra8_ipc_attach_handler(ra8_ipc_event_fn_t fn, void *ctx)
Attach a single event callback shared across all channels.
ra8_err_t ra8_ipc_ring_consume(ra8_ipc_ring_t *ring, uint32_t *out_payload)
Pop one word from the shared-memory ring (consumer side).
ra8_err_t ra8_ipc_nmi_send(uint8_t unit)
Issue an inter-processor NMI to the peer core.
ra8_err_t ra8_ipc_ring_init(ra8_ipc_ring_t *ring)
Initialise a producer/consumer ring backed by shared SRAM.
ra8_err_t ra8_ipc_ring_is_empty(const ra8_ipc_ring_t *ring, bool *out_empty)
Predicate: ring empty?
void ra8_ipc_dispatch_nmi(uint8_t unit)
Drive the NMI dispatch path for one unit.
ra8_err_t ra8_ipc_nmi_clear(uint8_t unit)
Acknowledge an inter-processor NMI on the local core.
ra8_err_t ra8_ipc_sem_try_take(uint8_t sem_id)
Test-and-set acquire on one IPC hardware semaphore.
ra8_err_t ra8_ipc_uninstall_isr(uint8_t unit)
Tear down a previously installed IPC ISR.
ra8_err_t ra8_ipc_sem_take_timeout(uint8_t sem_id, uint16_t max_spins)
Bounded-spin take on one IPC hardware semaphore.
ra8_err_t ra8_ipc_ring_is_full(const ra8_ipc_ring_t *ring, bool *out_full)
Predicate: ring full?
void ra8_ipc_dispatch(uint8_t channel)
Drive the event callback for one channel.
ra8_err_t ra8_ipc_sem_release(uint8_t sem_id)
Release one IPC hardware semaphore.
ra8_err_t ra8_ipc_nmi_get_status(uint8_t unit, bool *out_pending)
Read NMISTA.NMI for one IPC NMI unit.
ra8_err_t ra8_ipc_sem_is_locked(uint8_t sem_id, bool *out_locked)
Predicate: is the semaphore currently locked?
ra8_err_t ra8_ipc_ring_produce(ra8_ipc_ring_t *ring, uint32_t payload)
Push one word into the shared-memory ring (producer side).
ra8_err_t ra8_ipc_attach_event_handler(uint8_t channel, ra8_ipc_irq_event_id_t event_id, ra8_ipc_irq_fn_t fn, void *ctx)
Attach a callback for a single IRQ event line on a channel.
Inter-Processor Communication (IPC) HAL driver – public types.
void(* ra8_ipc_event_fn_t)(void *ctx, uint8_t channel, uint32_t event_mask, uint32_t message)
IPC event callback signature.
ra8_ipc_irq_event_id_t
Index of an IRQ event line within a channel (0..7).
void(* ra8_ipc_nmi_fn_t)(void *ctx, uint8_t unit)
NMI dispatch callback signature.
void(* ra8_ipc_irq_fn_t)(void *ctx, uint8_t channel, ra8_ipc_irq_event_id_t event_id)
Per-IRQ-event-line callback signature.
Shared-memory ring-buffer descriptor used by the producer / consumer protocol primitives.