ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_lvd_types.h
Go to the documentation of this file.
1
22
23#pragma once
24
25#include <stdint.h>
26
27#include "ra8_err.h"
28#include "ra8_lvd_regs.h"
29
46
51typedef enum : uint8_t {
55
83
103
119
151
179
192typedef enum : uint8_t {
198
220
230typedef struct {
231 bool crossed;
232 bool above;
234
241typedef void (*ra8_lvd_event_fn_t)(void* ctx, ra8_lvd_channel_t channel);
Error Code Definitions for ra8-firmware.
Programmable Voltage Detection (PVD / LVD) register layout for the RA8D2.
ra8_lvd_loco_div_t
PVDmCR0.FSAMP[1:0] / PVDnCR0.FSAMP[1:0] sampling-clock divider.
@ k_ra8_lvd_loco_div_4
LOCO / 4.
@ k_ra8_lvd_loco_div_8
LOCO / 8.
@ k_ra8_lvd_loco_div_2
LOCO / 2 (fastest, highest power).
@ k_ra8_lvd_loco_div_max
Highest legal value (sentinel).
@ k_ra8_lvd_loco_div_16
LOCO / 16 (slowest, lowest power).
ra8_lvd_negate_t
PVDmCR0.RN value – reset deassertion timing.
@ k_ra8_lvd_negate_after_voltage
Negate after VCC clears Vdetm.
@ k_ra8_lvd_negate_after_assert
Negate after reset asserts.
ra8_lvd_hysteresis_t
PVDmFCR.RHSEL / PVDnFCR.RHSEL value.
@ k_ra8_lvd_hysteresis_hvd
RHSEL = 1 (rise detect).
@ k_ra8_lvd_hysteresis_lvd
RHSEL = 0 (fall detect).
ra8_lvd_irq_type_t
PVDmCR1.IRQSEL value – NMI vs maskable interrupt.
@ k_ra8_lvd_irq_nmi
Non-maskable interrupt (default).
@ k_ra8_lvd_irq_maskable
Maskable interrupt via ICU.
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.
@ k_ra8_lvd_pvdlvl_2_85v
2.85 V.
@ k_ra8_lvd_pvdlvl_3_86v
3.86 V.
@ k_ra8_lvd_pvdlvl_3_14v
3.14 V.
@ k_ra8_lvd_pvdlvl_3_10v
3.10 V.
@ k_ra8_lvd_pvdlvl_max
Highest legal threshold encoding.
@ k_ra8_lvd_pvdlvl_1_86v
1.86 V.
@ k_ra8_lvd_pvdlvl_1_90v
1.90 V.
@ k_ra8_lvd_pvdlvl_3_08v
3.08 V.
@ k_ra8_lvd_pvdlvl_2_62v
2.62 V.
@ k_ra8_lvd_pvdlvl_1_71v
1.71 V.
@ k_ra8_lvd_pvdlvl_2_83v
2.83 V.
@ k_ra8_lvd_pvdlvl_2_80v
2.80 V.
@ k_ra8_lvd_pvdlvl_min
Lowest legal threshold encoding.
@ k_ra8_lvd_pvdlvl_1_74v
1.74 V.
@ k_ra8_lvd_pvdlvl_2_33v
2.33 V.
ra8_lvd_edge_t
PVDmCR1.IDTSEL[1:0] edge selector for monitor m channels.
@ k_ra8_lvd_edge_both
Detect either crossing.
@ k_ra8_lvd_edge_rise
Detect VCC >= Vdetm rising crossings.
@ k_ra8_lvd_edge_fall
Detect VCC < Vdetm falling crossings.
ra8_lvd_channel_t
Voltage-monitor channel selector.
@ k_ra8_lvd_ch5
PVD5 (n series, reset-only).
@ k_ra8_lvd_ch2
PVD2 (m series, NMI-capable).
@ k_ra8_lvd_ch1
PVD1 (m series, NMI-capable).
@ k_ra8_lvd_ch4
PVD4 (n series, reset-only).
ra8_lvd_response_t
Detection response selector for ra8_lvd_cfg_t::response.
@ k_ra8_lvd_response_reset_on_rise
HVD reset (any).
@ k_ra8_lvd_response_interrupt
Maskable IRQ (m only).
@ k_ra8_lvd_response_reset
LVD reset (any).
@ k_ra8_lvd_response_nmi
NMI (m only).
@ k_ra8_lvd_response_none
Flags / ELC only.
Configuration descriptor for ra8_lvd_channel_init.
ra8_lvd_edge_t edge
IDTSEL setting (m channels only).
bool clear_status
true -> write 0 to PVDmSR.DET on init.
ra8_lvd_pvdlvl_t threshold
PVDLVL[4:0] encoding (see enum).
ra8_lvd_irq_type_t irq_type
IRQSEL setting (m channels only).
ra8_lvd_loco_div_t filter_div
FSAMP[1:0] sampling-clock divider.
ra8_lvd_negate_t negate
PVDmCR0.RN (m chan, ignored on n).
ra8_lvd_hysteresis_t hysteresis
PVDmFCR.RHSEL / PVDnFCR.RHSEL.
bool filter_en
true -> clear DFDIS (digital filter on).
ra8_lvd_response_t response
Interrupt / reset / NMI / none.
bool irq_enable
true -> set RIE on init (IRQ + reset).
Decoded PVDmSR snapshot.
bool crossed
DET flag: a Vdetm crossing was latched.
bool above
MON flag: VCC currently above Vdetm threshold.