ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_lvd_api.h
Go to the documentation of this file.
1
24
25#pragma once
26
27#include <stdint.h>
28
29#include "ra8_err.h"
30#include "ra8_lvd_types.h"
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36/* =============================================================================
37 * Lifecycle
38 * =============================================================================
39 */
40
105[[nodiscard]] ra8_err_t ra8_lvd_channel_init(ra8_lvd_channel_t channel, const ra8_lvd_cfg_t* cfg);
106
132
133/* =============================================================================
134 * Runtime reconfiguration
135 * =============================================================================
136 */
137
163 ra8_lvd_pvdlvl_t threshold);
164
190[[nodiscard]] ra8_err_t ra8_lvd_enable_irq(ra8_lvd_channel_t channel);
191
206[[nodiscard]] ra8_err_t ra8_lvd_disable_irq(ra8_lvd_channel_t channel);
207
228
246
269[[nodiscard]] ra8_err_t ra8_lvd_enable_cmpe(ra8_lvd_channel_t channel);
270
286
316[[nodiscard]] ra8_err_t
317ra8_lvd_set_filter(ra8_lvd_channel_t channel, ra8_lvd_loco_div_t filter_div, bool filter_en);
318
348
377
395
413
414/* =============================================================================
415 * Security attribution
416 * =============================================================================
417 */
418
445[[nodiscard]] ra8_err_t ra8_lvd_set_security(uint32_t mask);
446
447/* =============================================================================
448 * PVDLR (n-channel register lock)
449 * =============================================================================
450 */
451
473[[nodiscard]] ra8_err_t ra8_lvd_unlock_n_channels(void);
474
494[[nodiscard]] ra8_err_t ra8_lvd_relock_n_channels(void);
495
496/* =============================================================================
497 * Status
498 * =============================================================================
499 */
500
524
549
550/* =============================================================================
551 * ELC + standby helpers
552 * =============================================================================
553 */
554
580
601
628
651
652/* =============================================================================
653 * Filter timing helper
654 * =============================================================================
655 */
656
682[[nodiscard]] uint32_t ra8_lvd_filter_delay_us(ra8_lvd_loco_div_t div, uint32_t loco_hz);
683
684/* =============================================================================
685 * Interrupt path
686 * =============================================================================
687 */
688
706[[nodiscard]] ra8_err_t ra8_lvd_attach_handler(ra8_lvd_event_fn_t fn, void* ctx);
707
731[[nodiscard]] ra8_err_t
733
756
757#ifdef __cplusplus
758}
759#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_lvd_disable_elc_event(ra8_lvd_channel_t channel)
Disable the ELC event-out path for an m channel.
ra8_err_t ra8_lvd_cancel_deep_standby_path(void)
Clear PVDmCR0.RI on every m channel so Deep Software Standby modes 2 and 3 are reachable.
ra8_err_t ra8_lvd_attach_channel_handler(ra8_lvd_channel_t channel, ra8_lvd_event_fn_t fn, void *ctx)
Attach a per-channel callback (overrides the shared callback).
ra8_err_t ra8_lvd_channel_deinit(ra8_lvd_channel_t channel)
Tear one channel back down to its reset state.
Definition ra8_lvd.c:624
ra8_err_t ra8_lvd_enable_cmpe(ra8_lvd_channel_t channel)
Drive PVDmCR0.CMPE / PVDnCR0.CMPE high for a channel.
ra8_err_t ra8_lvd_clear_status(ra8_lvd_channel_t channel)
Clear the latched DET flag on one channel (write-0-to-clear).
ra8_err_t ra8_lvd_disable_reset(ra8_lvd_channel_t channel)
Drop the reset enable bit (RIE for m, RE for n).
ra8_err_t ra8_lvd_get_status(ra8_lvd_channel_t channel, ra8_lvd_status_t *out)
Read the DET and MON flags for one channel.
ra8_err_t ra8_lvd_set_irq_edge(ra8_lvd_channel_t channel, ra8_lvd_edge_t edge)
Live update of PVDmCR1.IDTSEL[1:0] (edge select) for an m channel.
Definition ra8_lvd.c:736
ra8_err_t ra8_lvd_enable_irq(ra8_lvd_channel_t channel)
Enable interrupt-on-cross for a monitor m channel.
ra8_err_t ra8_lvd_relock_n_channels(void)
Permanently re-lock PVD4/PVD5 by writing any value to PVDLR.
ra8_err_t ra8_lvd_configure_for_standby(ra8_lvd_channel_t channel)
Configure a channel for Software / Deep Software Standby use.
ra8_err_t ra8_lvd_set_threshold(ra8_lvd_channel_t channel, ra8_lvd_pvdlvl_t threshold)
Change a channel's threshold without tearing the rest of its config.
Definition ra8_lvd.c:688
ra8_err_t ra8_lvd_set_negate_mode(ra8_lvd_channel_t channel, ra8_lvd_negate_t negate)
Update PVDmCR0.RN reset-negate timing on an m channel.
ra8_err_t ra8_lvd_set_irq_kind(ra8_lvd_channel_t channel, ra8_lvd_irq_type_t kind)
Live update of PVDmCR1.IRQSEL (NMI vs maskable) on an m channel.
Definition ra8_lvd.c:783
uint32_t ra8_lvd_filter_delay_us(ra8_lvd_loco_div_t div, uint32_t loco_hz)
Compute the required "2s + 3 LOCO cycles" wait in microseconds.
ra8_err_t ra8_lvd_set_filter(ra8_lvd_channel_t channel, ra8_lvd_loco_div_t filter_div, bool filter_en)
Tune the digital filter (FSAMP[1:0] + DFDIS) on one channel.
ra8_err_t ra8_lvd_disable_irq(ra8_lvd_channel_t channel)
Drop PVDmCR0.RIE for one channel.
ra8_err_t ra8_lvd_enable_reset(ra8_lvd_channel_t channel)
Enable the reset path for a channel.
void ra8_lvd_dispatch(ra8_lvd_channel_t channel)
Demux a PVD ISR – invoke the registered callback for channel.
ra8_err_t ra8_lvd_channel_init(ra8_lvd_channel_t channel, const ra8_lvd_cfg_t *cfg)
Configure one PVD channel from a full descriptor.
Definition ra8_lvd.c:583
ra8_err_t ra8_lvd_set_hysteresis_mode(ra8_lvd_channel_t channel, ra8_lvd_hysteresis_t hyst)
Update PVDmFCR.RHSEL / PVDnFCR.RHSEL hysteresis-band selector.
ra8_err_t ra8_lvd_set_security(uint32_t mask)
Update PVDSAR.NONSEC0 / NONSEC1 to expose PVD1/PVD2 to non-secure.
ra8_err_t ra8_lvd_enable_elc_event(ra8_lvd_channel_t channel)
Enable the ELC event-out path for an m channel.
ra8_err_t ra8_lvd_attach_handler(ra8_lvd_event_fn_t fn, void *ctx)
Attach a single shared callback for every PVD channel.
ra8_err_t ra8_lvd_disable_cmpe(ra8_lvd_channel_t channel)
Drop PVDmCR0.CMPE / PVDnCR0.CMPE for a channel.
ra8_err_t ra8_lvd_unlock_n_channels(void)
Unlock PVD4/PVD5 control registers via PVDLR.
Programmable Voltage Detection (PVD / LVD) HAL types.
ra8_lvd_loco_div_t
PVDmCR0.FSAMP[1:0] / PVDnCR0.FSAMP[1:0] sampling-clock divider.
ra8_lvd_negate_t
PVDmCR0.RN value – reset deassertion timing.
ra8_lvd_hysteresis_t
PVDmFCR.RHSEL / PVDnFCR.RHSEL value.
ra8_lvd_irq_type_t
PVDmCR1.IRQSEL value – NMI vs maskable interrupt.
void(* ra8_lvd_event_fn_t)(void *ctx, ra8_lvd_channel_t channel)
PVD threshold-crossing callback.
ra8_lvd_pvdlvl_t
PVDLVL[4:0] threshold encoding for PVDmCMPCR / PVDnCMPCR.
ra8_lvd_edge_t
PVDmCR1.IDTSEL[1:0] edge selector for monitor m channels.
ra8_lvd_channel_t
Voltage-monitor channel selector.
Configuration descriptor for ra8_lvd_channel_init.
Decoded PVDmSR snapshot.