41static const char*
s_tag =
"LVD";
290 uint8_t clr_bits = 0U;
359 uint8_t safe_div = (uint8_t)div;
363 const uint32_t local_factor = (uint32_t)1U << (safe_div + 1U);
488 void*
const ctx = (chan_fn !=
nullptr) ? chan_ctx :
s_lvd_ctx;
static const char * s_tag
Logging / check tag.
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_RETURN_ON_ERROR(err, tag, message)
Early return on error, propagating the code upward.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
const ra8_lvd_channel_map_t g_lvd_map[k_ra8_lvd_map_idx_count]
Lookup table from ra8_lvd_map_idx_t to register offsets.
ra8_err_t priv_ra8_lvd_internal_channel_to_idx(ra8_lvd_channel_t channel, uint8_t *out_idx)
Implementation of priv_ra8_lvd_internal_channel_to_idx() – switch on PVD id.
void priv_ra8_lvd_internal_cr0_rmw(const ra8_lvd_channel_map_t *map, uint8_t clear_mask, uint8_t set_bits)
Implementation of priv_ra8_lvd_internal_cr0_rmw() – RMW with reserved-bit refold.
Programmable Voltage Detection (PVD / LVD) HAL driver.
ra8_err_t ra8_lvd_disable_elc_event(ra8_lvd_channel_t channel)
Disarm the ELC event line for a PVDm channel.
ra8_err_t ra8_lvd_cancel_deep_standby_path(void)
Drop CR0.RI on every NMI-capable channel (deep-standby exit).
ra8_err_t ra8_lvd_attach_channel_handler(ra8_lvd_channel_t channel, ra8_lvd_event_fn_t fn, void *ctx)
Register a per-channel LVD callback for a PVDm channel.
static ra8_lvd_event_fn_t s_lvd_fn
Shared crossing callback (set via ra8_lvd_attach_handler).
ra8_err_t ra8_lvd_relock_n_channels(void)
Relock PVDLR after a PVDn maintenance window.
ra8_err_t ra8_lvd_configure_for_standby(ra8_lvd_channel_t channel)
Reconfigure a PVD channel for entry into Software / Deep Standby.
uint32_t ra8_lvd_filter_delay_us(ra8_lvd_loco_div_t div, uint32_t loco_hz)
Compute the digital-filter settle delay in microseconds.
void ra8_lvd_dispatch(ra8_lvd_channel_t channel)
Demux a PVD ISR – ack DET, fire per-channel + shared callbacks.
static void * s_lvd_chan_ctx[k_ra8_lvd_map_idx_count]
Per-channel callback contexts paired with s_lvd_chan_fn.
static ra8_lvd_event_fn_t s_lvd_chan_fn[k_ra8_lvd_map_idx_count]
Per-channel override callbacks for PVD1 / PVD2.
ra8_err_t ra8_lvd_set_security(uint32_t mask)
Program PVDSAR security attribution for PVD channels.
ra8_err_t ra8_lvd_enable_elc_event(ra8_lvd_channel_t channel)
Arm the ELC event line for a PVDm channel.
static void * s_lvd_ctx
Context passed to s_lvd_fn.
ra8_err_t ra8_lvd_attach_handler(ra8_lvd_event_fn_t fn, void *ctx)
Register the shared LVD ISR callback (NULL detaches).
ra8_err_t ra8_lvd_unlock_n_channels(void)
Unlock PVDLR so PVDn channels accept further writes.
Test-access surface for ra8_lvd internal helpers (MC/DC).
@ k_ra8_lvd_map_idx_count
Sentinel.
Programmable Voltage Detection (PVD / LVD) register layout for the RA8D2.
@ k_ra8_lvd_sr_mask_det
DET latched-crossing flag.
@ k_ra8_lvd_pvdlr_value_unlock
Write 0 to release lock.
@ k_ra8_lvd_pvdlr_value_relock
Any nonzero re-locks forever.
@ k_ra8_lvd_filter_extra
"+3" LOCO cycles in HUM formula.
@ k_ra8_lvd_us_per_sec
Microseconds per second.
@ k_ra8_lvd_filter_factor
"2s" multiplier in HUM formula.
@ k_ra8_lvd_loco_hz_default
Nominal RA8D2 LOCO frequency.
@ k_ra8_lvd_cr0_mask_rn
RN reset-negate timing (m).
@ k_ra8_lvd_cr0_mask_cmpe
CMPE comparator-output enable.
@ k_ra8_lvd_cr0_mask_ri
RI reset-on-cross select (m).
@ k_ra8_lvd_cr0_mask_dfdis
DFDIS digital-filter disable.
@ k_ra8_lvd_pvdsar_mask_all
Both PVD1 + PVD2 NS.
static volatile uint8_t * ra8_lvd_reg8(ra8_lvd_off_t off)
Get a volatile uint8_t* to a PVD 8-bit register.
static volatile uint32_t * ra8_lvd_reg32(ra8_lvd_off_t off)
Get a volatile uint32_t* to a PVD 32-bit register.
@ k_ra8_lvd_nmi_channel_count
PVD1 + PVD2 (m channels).
@ k_ra8_lvd_pvdlr_off
PVDLR.
@ k_ra8_lvd_pvdsar_off
PVDSAR.
ra8_lvd_loco_div_t
PVDmCR0.FSAMP[1:0] / PVDnCR0.FSAMP[1:0] sampling-clock divider.
@ k_ra8_lvd_loco_div_max
Highest legal value (sentinel).
void(* ra8_lvd_event_fn_t)(void *ctx, ra8_lvd_channel_t channel)
PVD threshold-crossing callback.
ra8_lvd_channel_t
Voltage-monitor channel selector.
Per-channel register-offset bundle.
ra8_lvd_off_t sr
PVDxSR (m only; n: same as cr0 stub).
bool has_irq
true for monitor m channels (1, 2).