ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_sci.h
Go to the documentation of this file.
1
49
50#pragma once
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56#include <stdint.h>
57
58#include "ra8_dma.h"
59#include "ra8_err.h"
60
61/* =============================================================================
62 * Types
63 * =============================================================================
64 */
65
75
80typedef enum : uint8_t {
84
89typedef enum : uint8_t {
93
111
122
130typedef void (*ra8_sci_rx_fn_t)(void* ctx, uint8_t byte);
131
141typedef bool (*ra8_sci_tx_fn_t)(void* ctx, uint8_t* byte);
142
150typedef enum : uint8_t {
155
156/* =============================================================================
157 * Lifecycle
158 * =============================================================================
159 */
160
188[[nodiscard]] ra8_err_t ra8_sci_init(uint8_t channel, const ra8_sci_cfg_t* cfg);
189
207[[nodiscard]] ra8_err_t ra8_sci_deinit(uint8_t channel);
208
209/* =============================================================================
210 * Polling TX / RX
211 * =============================================================================
212 */
213
228[[nodiscard]] ra8_err_t ra8_sci_putc_polling(uint8_t channel, uint8_t byte);
229
244[[nodiscard]] ra8_err_t ra8_sci_getc_polling(uint8_t channel, uint8_t* out_byte);
245
258[[nodiscard]] ra8_err_t ra8_sci_write_polling(uint8_t channel, const uint8_t* data, uint32_t len);
259
303[[nodiscard]] ra8_err_t ra8_sci_flush(uint8_t channel);
304
305/* =============================================================================
306 * Interrupt TX / RX
307 * =============================================================================
308 */
309
323[[nodiscard]] ra8_err_t ra8_sci_attach_rx_handler(uint8_t channel, ra8_sci_rx_fn_t fn, void* ctx);
324
338[[nodiscard]] ra8_err_t ra8_sci_attach_tx_handler(uint8_t channel, ra8_sci_tx_fn_t fn, void* ctx);
339
340/* =============================================================================
341 * Error status
342 * =============================================================================
343 */
344
356[[nodiscard]] ra8_err_t ra8_sci_get_errors(uint8_t channel, uint8_t* out_mask);
357
368[[nodiscard]] ra8_err_t ra8_sci_clear_errors(uint8_t channel);
369
370/* =============================================================================
371 * Runtime reconfigure
372 * =============================================================================
373 */
374
388[[nodiscard]] ra8_err_t ra8_sci_set_baud(uint8_t channel, uint32_t baud, uint32_t pclk_hz);
389
390/* =============================================================================
391 * Power transition
392 * =============================================================================
393 */
394
409[[nodiscard]] ra8_err_t ra8_sci_enter_stop(uint8_t channel);
410
422[[nodiscard]] ra8_err_t ra8_sci_exit_stop(uint8_t channel);
423
424/* =============================================================================
425 * Async byte-stream TX / RX (FSP r_sci_b_uart Read/Write parity)
426 * =============================================================================
427 */
428
465[[nodiscard]] ra8_err_t ra8_sci_write(uint8_t channel, const uint8_t* data, uint32_t len);
466
501[[nodiscard]] ra8_err_t ra8_sci_read(uint8_t channel, uint8_t* buf, uint32_t len);
502
531[[nodiscard]] ra8_err_t ra8_sci_abort(uint8_t channel, ra8_sci_dir_t direction);
532
560[[nodiscard]] ra8_err_t ra8_sci_read_stop(uint8_t channel, uint32_t* remaining);
561
600[[nodiscard]] ra8_err_t
601ra8_sci_baud_calculate(uint32_t baud, uint32_t pclk_hz, uint16_t* brr_out, uint8_t* clk_div_out);
602
627[[nodiscard]] ra8_err_t ra8_sci_receive_suspend(uint8_t channel);
628
645[[nodiscard]] ra8_err_t ra8_sci_receive_resume(uint8_t channel);
646
647/* =============================================================================
648 * DMA TX / RX
649 * =============================================================================
650 */
651
696[[nodiscard]] ra8_err_t ra8_sci_write_dma(uint8_t channel,
697 const uint8_t* data,
698 uint16_t len,
699 ra8_dma_complete_fn_t on_complete,
700 void* ctx,
701 uint8_t* out_dma_channel);
702
739[[nodiscard]] ra8_err_t ra8_sci_read_dma(uint8_t channel,
740 uint8_t* out_buf,
741 uint16_t len,
742 ra8_dma_complete_fn_t on_complete,
743 void* ctx,
744 uint8_t* out_dma_channel);
745
746/* =============================================================================
747 * ISR entry points (called from ra8_sci_irq.c)
748 * =============================================================================
749 */
750
766void ra8_sci_dispatch_txi(uint8_t channel);
767
783void ra8_sci_dispatch_rxi(uint8_t channel);
784
800void ra8_sci_dispatch_eri(uint8_t channel);
801
802#ifdef __cplusplus
803}
804#endif
Generic DMA transfer substrate (DMAC engine).
void(* ra8_dma_complete_fn_t)(void *ctx)
Caller-supplied completion callback.
Definition ra8_dma.h:88
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_sci_exit_stop(uint8_t channel)
Exit MSTP-gated stop state; the channel must be re-init'd.
Definition ra8_sci.c:688
ra8_err_t ra8_sci_write_dma(uint8_t channel, const uint8_t *data, uint16_t len, ra8_dma_complete_fn_t on_complete, void *ctx, uint8_t *out_dma_channel)
Kick off a DMA-backed TX transfer.
ra8_err_t ra8_sci_write_polling(uint8_t channel, const uint8_t *data, uint32_t len)
Send len bytes by polling (convenience wrapper).
Definition ra8_sci.c:516
ra8_err_t ra8_sci_attach_rx_handler(uint8_t channel, ra8_sci_rx_fn_t fn, void *ctx)
Install the RX interrupt callback + context.
Definition ra8_sci.c:558
bool(* ra8_sci_tx_fn_t)(void *ctx, uint8_t *byte)
TX-empty interrupt callback signature.
Definition ra8_sci.h:141
ra8_err_t ra8_sci_set_baud(uint8_t channel, uint32_t baud, uint32_t pclk_hz)
Change the baud rate without tearing down the channel.
Definition ra8_sci.c:648
ra8_sci_stop_bits_t
Stop-bit count.
Definition ra8_sci.h:80
@ k_ra8_sci_stop_2
RA8 SCI stop 2.
Definition ra8_sci.h:82
@ k_ra8_sci_stop_1
RA8 SCI stop 1.
Definition ra8_sci.h:81
ra8_err_t ra8_sci_baud_calculate(uint32_t baud, uint32_t pclk_hz, uint16_t *brr_out, uint8_t *clk_div_out)
Pure-math conversion from a target baud rate to BRR + clock divider settings.
Definition ra8_sci.c:717
ra8_err_t ra8_sci_abort(uint8_t channel, ra8_sci_dir_t direction)
Cancel an in-flight async TX or RX.
Definition ra8_sci.c:815
void ra8_sci_dispatch_eri(uint8_t channel)
ERI dispatch – clear SSR error flags, invoke optional error callback (none in reserved for 3....
ra8_sci_err_mask_t
Bit mask of SCI error flags.
Definition ra8_sci.h:116
@ k_ra8_sci_err_overrun
ORER set.
Definition ra8_sci.h:118
@ k_ra8_sci_err_parity
PER set.
Definition ra8_sci.h:120
@ k_ra8_sci_err_framing
FER set.
Definition ra8_sci.h:119
@ k_ra8_sci_err_none
RA8 SCI error none.
Definition ra8_sci.h:117
ra8_err_t ra8_sci_clear_errors(uint8_t channel)
Clear the SSR error flags via write-zero.
Definition ra8_sci.c:633
void(* ra8_sci_rx_fn_t)(void *ctx, uint8_t byte)
RX interrupt callback signature.
Definition ra8_sci.h:130
ra8_err_t ra8_sci_read(uint8_t channel, uint8_t *buf, uint32_t len)
Arm an interrupt-driven RX of len bytes into buf.
Definition ra8_sci.c:781
ra8_err_t ra8_sci_read_dma(uint8_t channel, uint8_t *out_buf, uint16_t len, ra8_dma_complete_fn_t on_complete, void *ctx, uint8_t *out_dma_channel)
Kick off a DMA-backed RX transfer.
ra8_sci_parity_t
Parity mode for ra8_sci_cfg_t::parity.
Definition ra8_sci.h:70
@ k_ra8_sci_parity_even
RA8 SCI parity even.
Definition ra8_sci.h:72
@ k_ra8_sci_parity_odd
RA8 SCI parity odd.
Definition ra8_sci.h:73
@ k_ra8_sci_parity_none
RA8 SCI parity none.
Definition ra8_sci.h:71
ra8_err_t ra8_sci_init(uint8_t channel, const ra8_sci_cfg_t *cfg)
Initialise an SCI channel using the descriptor.
Definition ra8_sci.c:410
ra8_err_t ra8_sci_enter_stop(uint8_t channel)
Put the channel into MSTP-gated stop state.
Definition ra8_sci.c:677
ra8_err_t ra8_sci_attach_tx_handler(uint8_t channel, ra8_sci_tx_fn_t fn, void *ctx)
Install the TX interrupt callback + context.
Definition ra8_sci.c:583
ra8_err_t ra8_sci_getc_polling(uint8_t channel, uint8_t *out_byte)
Poll-receive one byte (blocking, bounded spin).
Definition ra8_sci.c:496
ra8_sci_data_bits_t
Data-bit count.
Definition ra8_sci.h:89
@ k_ra8_sci_data_8
RA8 SCI data 8.
Definition ra8_sci.h:91
@ k_ra8_sci_data_7
RA8 SCI data 7.
Definition ra8_sci.h:90
ra8_err_t ra8_sci_receive_resume(uint8_t channel)
Resume reception by setting CCR0.RE.
Definition ra8_sci.c:897
ra8_err_t ra8_sci_receive_suspend(uint8_t channel)
Suspend reception by clearing CCR0.RE.
Definition ra8_sci.c:878
ra8_err_t ra8_sci_putc_polling(uint8_t channel, uint8_t byte)
Poll-send one byte (blocking, bounded by ra8_hw_err spin budget).
Definition ra8_sci.c:476
ra8_err_t ra8_sci_read_stop(uint8_t channel, uint32_t *remaining)
Stop an in-flight RX and report how many bytes were not yet consumed.
Definition ra8_sci.c:850
void ra8_sci_dispatch_rxi(uint8_t channel)
RXI dispatch – hand a received byte to the RX callback.
ra8_err_t ra8_sci_write(uint8_t channel, const uint8_t *data, uint32_t len)
Arm an interrupt-driven TX of len bytes from data.
Definition ra8_sci.c:747
ra8_err_t ra8_sci_flush(uint8_t channel)
Block until the channel's transmit shift register is empty.
Definition ra8_sci.c:543
ra8_sci_dir_t
Direction selector for ra8_sci_abort.
Definition ra8_sci.h:150
@ k_ra8_sci_dir_tx
Cancel an in-flight TX.
Definition ra8_sci.h:151
@ k_ra8_sci_dir_both
Cancel both directions.
Definition ra8_sci.h:153
@ k_ra8_sci_dir_rx
Cancel an in-flight RX.
Definition ra8_sci.h:152
void ra8_sci_dispatch_txi(uint8_t channel)
TXI dispatch – advance the TX callback.
ra8_err_t ra8_sci_deinit(uint8_t channel)
Tear down a channel – disable TX/RX, release MSTP.
Definition ra8_sci.c:443
ra8_err_t ra8_sci_get_errors(uint8_t channel, uint8_t *out_mask)
Read the SSR error bits (ORER, FER, PER).
Definition ra8_sci.c:609
Configuration descriptor for ra8_sci_init.
Definition ra8_sci.h:103
uint32_t pclk_hz
PCLKB frequency in Hz (used for BRR calculation).
Definition ra8_sci.h:108
ra8_sci_parity_t parity
Parity mode.
Definition ra8_sci.h:106
ra8_sci_stop_bits_t stop_bits
1 or 2 stop bits.
Definition ra8_sci.h:107
uint32_t baud
Target baud rate in bps.
Definition ra8_sci.h:104
ra8_sci_data_bits_t data_bits
7 or 8 data bits.
Definition ra8_sci.h:105