ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_io_spi_bus_spi_b.c
Go to the documentation of this file.
1
19
21
22#include <stdint.h>
23
24#include "ra8_attributes.h"
25#include "ra8_check.h"
26#include "ra8_err.h"
27#include "ra8_io_spi_bus.h"
29#include "ra8_spi.h"
30#include "ra8_spi_regs.h"
31
33static const char* const s_tag = "ra8_io_spi_bus_spi_b";
34
61RA8_INTERNAL static ra8_err_t internal_spi_b_xfer8(void* ctx, uint8_t tx, uint8_t* rx)
62{
63 return ra8_spi_xfer8((uint8_t)(uintptr_t)ctx, tx, rx);
64}
65
97 const void* tx,
98 void* rx,
99 uint32_t len,
101{
102 return ra8_spi_write_read((uint8_t)(uintptr_t)ctx, tx, rx, len, width);
103}
104
131internal_spi_b_set_clock(void* ctx, uint32_t baud_hz, uint32_t pclk_hz)
132{
133 return ra8_spi_set_clock((uint8_t)(uintptr_t)ctx, baud_hz, pclk_hz);
134}
135
138 .xfer8 = internal_spi_b_xfer8,
139 .write_read = internal_spi_b_write_read,
140 .set_clock = internal_spi_b_set_clock,
141};
142
144{
145 RA8_CHECK_NULL_PTR(bus, s_tag, "bus must not be nullptr");
146 if (channel >= (uint8_t)k_ra8_spi_b_channel_count) {
148 }
149 bus->iface = &s_spi_b_iface;
150 bus->ctx = (void*)(uintptr_t)channel;
151 return k_ra8_ok;
152}
static const char * s_tag
Logging / check tag.
Definition ra8_app.c:17
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Definition ra8_check.h:243
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
Definition ra8_err.h:152
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_io SPI-bus facade – one controller-transfer vtable over thechip's two SPI implementations.
struct ra8_io_spi_bus_iface ra8_io_spi_bus_iface_t
Internal vtable type for the ra8_io SPI-bus facade.
static ra8_err_t internal_spi_b_xfer8(void *ctx, uint8_t tx, uint8_t *rx)
SPI_B backend: full-duplex single-byte exchange.
static const ra8_io_spi_bus_iface_t s_spi_b_iface
SPI_B backend vtable – every row forwards to ra8_spi_*.
static ra8_err_t internal_spi_b_write_read(void *ctx, const void *tx, void *rx, uint32_t len, ra8_spi_bit_width_t width)
SPI_B backend: full-duplex multi-frame transfer.
ra8_err_t ra8_io_spi_bus_bind_spi_b(ra8_io_spi_bus_t *bus, uint8_t channel)
Bind bus to SPI_B channel channel.
static ra8_err_t internal_spi_b_set_clock(void *ctx, uint32_t baud_hz, uint32_t pclk_hz)
SPI_B backend: re-program the SPBR bit-rate divider.
SPI_B backend binder for the ra8_io SPI-bus facade.
SPI_B controller driver (RA8D2 Type-B SPI peripheral).
ra8_spi_bit_width_t
Per-frame bit width for multi-byte transfers.
Definition ra8_spi.h:84
ra8_err_t ra8_spi_write_read(uint8_t channel, const void *tx, void *rx, uint32_t len, ra8_spi_bit_width_t bit_width)
Multi-frame full-duplex polling transfer.
Definition ra8_spi_b.c:719
ra8_err_t ra8_spi_xfer8(uint8_t channel, uint8_t tx, uint8_t *rx)
Full-duplex 8-bit exchange.
Definition ra8_spi_b.c:421
ra8_err_t ra8_spi_set_clock(uint8_t channel, uint32_t baud_hz, uint32_t pclka_hz)
Change the SPI clock without tearing down the channel.
Definition ra8_spi_b.c:741
SPI_B register layout for the Renesas RA8D2.
@ k_ra8_spi_b_channel_count
SPI0 + SPI1.
Caller-allocated SPI-bus handle binding a backend to its context.
void * ctx
Backend-private context (private).
const ra8_io_spi_bus_iface_t * iface
Bound backend vtable (private).