ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_i3c_i2c.h
Go to the documentation of this file.
1
39
40#pragma once
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#include <stdint.h>
47
48#include "ra8_err.h"
49
50/* =============================================================================
51 * Public types
52 * =============================================================================
53 */
54
67
77typedef struct {
78 uint32_t bus_hz;
79 uint32_t pclka_hz;
81
92
100typedef void (*ra8_i3c_i2c_complete_fn_t)(void* ctx, uint8_t err_mask);
101
102/* =============================================================================
103 * Lifecycle
104 * =============================================================================
105 */
106
128[[nodiscard]] ra8_err_t ra8_i3c_i2c_init(uint8_t channel, const ra8_i3c_i2c_cfg_t* cfg);
129
144[[nodiscard]] ra8_err_t ra8_i3c_i2c_deinit(uint8_t channel);
145
162[[nodiscard]] ra8_err_t ra8_i3c_i2c_set_clock(uint8_t channel, uint32_t bus_hz, uint32_t pclka_hz);
163
164/* =============================================================================
165 * Polling transfers
166 * =============================================================================
167 */
168
216[[nodiscard]] ra8_err_t ra8_i3c_i2c_write(uint8_t channel,
217 uint8_t target_7b,
218 const uint8_t* data,
219 uint32_t len,
220 bool restart);
221
260[[nodiscard]] ra8_err_t
261ra8_i3c_i2c_read(uint8_t channel, uint8_t target_7b, uint8_t* buf, uint32_t len, bool restart);
262
301[[nodiscard]] ra8_err_t ra8_i3c_i2c_transfer(uint8_t channel,
302 uint8_t target_7b,
303 const uint8_t* tx,
304 uint32_t tx_len,
305 uint8_t* rx,
306 uint32_t rx_len);
307
334[[nodiscard]] ra8_err_t ra8_i3c_i2c_abort(uint8_t channel);
335
358[[nodiscard]] ra8_err_t ra8_i3c_i2c_scan(uint8_t channel, uint8_t target_7b, bool* out_acked);
359
360/* =============================================================================
361 * Status
362 * =============================================================================
363 */
364
378[[nodiscard]] ra8_err_t ra8_i3c_i2c_get_errors(uint8_t channel, uint8_t* out_mask);
379
391[[nodiscard]] ra8_err_t ra8_i3c_i2c_clear_errors(uint8_t channel);
392
393/* =============================================================================
394 * Interrupt path
395 * =============================================================================
396 */
397
415[[nodiscard]] ra8_err_t
416ra8_i3c_i2c_attach_handler(uint8_t channel, ra8_i3c_i2c_complete_fn_t fn, void* ctx);
417
437void ra8_i3c_i2c_dispatch_eri(uint8_t channel);
438
439#ifdef __cplusplus
440}
441#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t ra8_i3c_i2c_init(uint8_t channel, const ra8_i3c_i2c_cfg_t *cfg)
Initialise the IIC_B channel and bring the bus up.
ra8_err_t ra8_i3c_i2c_abort(uint8_t channel)
Cancel any in-flight transaction and return the channel to idle.
ra8_err_t ra8_i3c_i2c_get_errors(uint8_t channel, uint8_t *out_mask)
Read latched error flags from BST (AL / NACKDF / TODF).
ra8_err_t ra8_i3c_i2c_read(uint8_t channel, uint8_t target_7b, uint8_t *buf, uint32_t len, bool restart)
Polling read of len bytes from a 7-bit target.
ra8_err_t ra8_i3c_i2c_transfer(uint8_t channel, uint8_t target_7b, const uint8_t *tx, uint32_t tx_len, uint8_t *rx, uint32_t rx_len)
Combined write-then-RESTART-then-read in a single bus transaction.
ra8_err_t ra8_i3c_i2c_deinit(uint8_t channel)
Tear down the IIC_B channel.
ra8_err_t ra8_i3c_i2c_attach_handler(uint8_t channel, ra8_i3c_i2c_complete_fn_t fn, void *ctx)
Attach a completion / error callback for the channel.
ra8_err_t ra8_i3c_i2c_set_clock(uint8_t channel, uint32_t bus_hz, uint32_t pclka_hz)
Update the bus clock without tearing the channel down.
ra8_err_t ra8_i3c_i2c_clear_errors(uint8_t channel)
Clear latched error flags in BST.
ra8_i3c_i2c_speed_t
Supported bus speeds (I2C compatibility mode).
Definition ra8_i3c_i2c.h:62
@ k_ra8_i3c_i2c_speed_standard
100 kHz Sm.
Definition ra8_i3c_i2c.h:63
@ k_ra8_i3c_i2c_speed_fast_plus
1 MHz Fm+.
Definition ra8_i3c_i2c.h:65
@ k_ra8_i3c_i2c_speed_fast
400 kHz Fm.
Definition ra8_i3c_i2c.h:64
void ra8_i3c_i2c_dispatch_eri(uint8_t channel)
Dispatch the bus-error IRQ source.
ra8_err_t ra8_i3c_i2c_scan(uint8_t channel, uint8_t target_7b, bool *out_acked)
Probe whether a 7-bit address ACKs.
ra8_err_t ra8_i3c_i2c_write(uint8_t channel, uint8_t target_7b, const uint8_t *data, uint32_t len, bool restart)
Polling write of len bytes to a 7-bit target address.
ra8_i3c_i2c_err_mask_t
Error-mask bits returned by ra8_i3c_i2c_get_errors.
Definition ra8_i3c_i2c.h:86
@ k_ra8_i3c_i2c_err_timeout
BST.TODF set.
Definition ra8_i3c_i2c.h:90
@ k_ra8_i3c_i2c_err_nack
BST.NACKDF set.
Definition ra8_i3c_i2c.h:89
@ k_ra8_i3c_i2c_err_none
No latched error.
Definition ra8_i3c_i2c.h:87
@ k_ra8_i3c_i2c_err_arb_lost
BST.ALF set.
Definition ra8_i3c_i2c.h:88
void(* ra8_i3c_i2c_complete_fn_t)(void *ctx, uint8_t err_mask)
Transfer-complete / error callback signature.
Configuration descriptor for ra8_i3c_i2c_init.
Definition ra8_i3c_i2c.h:77
uint32_t bus_hz
Target I2C clock rate in Hz.
Definition ra8_i3c_i2c.h:78
uint32_t pclka_hz
Current PCLKA / I3CCLK frequency for STDBR calc.
Definition ra8_i3c_i2c.h:79