43static const char*
s_tag =
"RTC";
45typedef enum : uint8_t {
51typedef enum : uint16_t {
66typedef enum : uint16_t {
70typedef enum : uint8_t {
137#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
138 const bool matched = ra8_fake_mmio_poll(reg, i, ((*reg) & mask) == expect);
140 const bool matched = ((*reg) & mask) == expect;
167typedef enum : uint16_t {
184typedef enum : uint16_t {
225#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
226 const bool loco_running =
248#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
249 const bool subclock_running =
254 if (!subclock_running) {
277 rtc->
RCR4 = (uint8_t)src;
355 const uint8_t saved = rtc->
RCR2;
410typedef enum : uint8_t {
474typedef enum : uint8_t {
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_hw_init_failed
Hardware peripheral failed to initialise.
@ 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.
Bounded wait-flag primitives for RA8D2 HAL drivers.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
#define ra8_log_info(tag, message)
RA8 log info.
#define ra8_log_error(tag, message)
RA8 log error.
Scoped PRCR unlock helper.
#define RA8_PROTECTED_WRITE(unlock_val)
Scoped PRCR unlock block.
ra8_err_t ra8_rtc_clock_init(ra8_rtc_clk_src_t src)
Bring up and select the RTC count source (HUM Fig 26.3).
@ k_ra8_bcd_digit_mask
RA8 bcd digit mask.
@ k_ra8_bcd_digit_shift
RA8 bcd digit shift.
@ k_ra8_bcd_digit_base
RA8 bcd digit base.
ra8_err_t ra8_rtc_set_alarm(const ra8_rtc_datetime_t *alarm)
Implementation of ra8_rtc_set_alarm().
static void internal_wait_bit(volatile const uint8_t *reg, uint8_t mask, uint8_t expect)
Spin until (*reg & mask) == expect, up to k_ra8_rtc_wait_iters.
static ra8_err_t internal_start_count_source(ra8_rtc_clk_src_t src)
Start and wait out the requested RTC count-source oscillator.
@ k_ra8_rtc_year_base
Base year for ra8_rtc_datetime_t.
ra8_rtc_clk_wait_t
Fixed timed waits (ms) used while bringing up the count source.
@ k_ra8_rtc_clk_stab_sub_ms
Sub-clock crystal stabilization wait.
@ k_ra8_rtc_clk_six_clocks_ms
>= 6 clocks of the count source.
@ k_ra8_rtc_clk_reset_ms
RTC software-reset settle wait.
@ k_ra8_rtc_clk_stab_loco_ms
LOCO settle wait.
static uint8_t internal_bin_to_bcd(uint8_t bin)
Internal helper.
ra8_rtc_rfr_t
Prescaler frequency-register values for the LOCO count source.
@ k_ra8_rtc_rfrl_32768
(32768 / 128) - 1 for a 32.768 kHz LOCO.
@ k_ra8_rtc_rfrh_cold
RFRH cleared before RFRL on cold start.
ra8_err_t ra8_rtc_init(void)
Start the RTC in 24-hour calendar mode.
ra8_err_t ra8_rtc_deinit(void)
Tear down the RTC (stop counter + disable IRQs).
ra8_err_t ra8_rtc_clear_status(uint8_t mask)
Clear RCR1 IRQ enable bits.
ra8_err_t ra8_rtc_set(const ra8_rtc_datetime_t *dt)
Write the calendar registers.
ra8_err_t ra8_rtc_get(ra8_rtc_datetime_t *out)
Read the calendar registers.
static uint8_t internal_bcd_to_bin(uint8_t bcd)
Internal helper.
@ k_ra8_rtc_byte_mask_all
Whole-byte mask for wait loops.
ra8_err_t ra8_rtc_exit_stop(void)
Restart the RTC counter from stop.
static ra8_rtc_state_t s_rtc_state
ra8_err_t ra8_rtc_get_status(uint8_t *out_mask)
Read RCR1 IRQ enable bits.
ra8_err_t ra8_rtc_set_irq_enable(uint8_t mask)
Enable one or more RTC IRQ sources via RCR1.
ra8_err_t ra8_rtc_attach_handler(ra8_rtc_event_fn_t fn, void *ctx)
Attach a callback for the RTC alarm / periodic event.
ra8_rtc_mask_t
Combined IRQ mask.
@ k_ra8_rtc_irq_all
RA8 rtc IRQ all.
ra8_rtc_alarm_t
Bit positions / limits for the RxxAR alarm registers.
@ k_ra8_rtc_alarm_enb_bit
RA8 rtc alarm enb bit.
@ k_ra8_rtc_alarm_max_sec
RA8 rtc alarm maximum sec.
@ k_ra8_rtc_alarm_max_min
RA8 rtc alarm maximum minimum.
@ k_ra8_rtc_alarm_max_hr
RA8 rtc alarm maximum hr.
void ra8_rtc_dispatch(void)
Dispatch an RTC event – snapshot RCR1 + fire callback.
ra8_err_t ra8_rtc_enter_stop(void)
Stop the RTC counter for low-power mode.
ra8_rtc_wait_t
Bounded-loop limits for register-change waits.
@ k_ra8_rtc_wait_iters
RA8 rtc wait iters.
Real-Time Clock driver (BCD calendar mode).
void(* ra8_rtc_event_fn_t)(void *ctx, uint8_t status_mask)
RTC event callback.
ra8_rtc_clk_src_t
RTC count-source selection (RCR4.RCKSEL encoding).
@ k_ra8_rtc_clk_loco
RCKSEL=1: internal LOCO (~32.768 kHz, crystal-free).
@ k_ra8_rtc_irq_periodic
RCR1.PIE.
@ k_ra8_rtc_irq_carry
RCR1.CIE.
@ k_ra8_rtc_irq_alarm
RCR1.AIE.
Real-Time Clock (RTC) register layout for the Renesas RA8D2.
@ k_ra8_rcr2_bit_cntmd
0=calendar, 1=binary.
@ k_ra8_rcr2_bit_reset
Software reset (write 1, auto-clear).
@ k_ra8_rcr2_bit_hr24
1=24h, 0=12h.
@ k_ra8_rcr2_bit_start
0=stop, 1=run.
static volatile r_rtc_regs_t * ra8_rtc(void)
Get pointer to the RTC block.
System Control (SYSC) register layout for the Renesas RA8D2.
static volatile uint8_t * ra8_sys_somcr(void)
Get pointer to the 8-bit SOMCR register (sub-clock oscillator mode).
@ k_ra8_prcr_unlock_cgc
RA8 prcr unlock cgc.
@ k_ra8_somcr_drv_standard
Standard drive (12.5 pF).
static volatile uint8_t * ra8_sys_sosccr(void)
Get pointer to the 8-bit SOSCCR register (sub-clock oscillator stop).
static volatile uint8_t * ra8_sys_lococr(void)
Get pointer to the 8-bit LOCOCR register (LOCO stop control).
@ k_ra8_lococr_lcstp_mask
LCSTP – 0 operates LOCO, 1 stops it.
@ k_ra8_sosccr_sostp_mask
SOSTP – 0 operates SOSC, 1 stops it.
SysTick-based tick counter, delay and timestamp helpers.
void ra8_delay_ms(uint32_t ms)
Busy-wait for at least ms milliseconds.
RTC register window matching FSP R_RTC_Type byte-for-byte.
volatile uint8_t RWKCNT
+0x08 Day-of-Week Counter / BCNT3.
volatile uint8_t RHRAR
+0x14 Hour Alarm (BCD) / BCNT2AR.
volatile uint8_t RMINCNT
+0x04 Minute Counter (BCD) / BCNT1.
volatile uint8_t RSECCNT
+0x02 Second Counter (BCD) / BCNT0.
volatile uint8_t RDAYCNT
+0x0A Day Counter (BCD).
volatile uint8_t RMINAR
+0x12 Minute Alarm (BCD) / BCNT1AR.
volatile uint8_t RCR4
+0x28 Control 4 (count source / mode).
volatile uint8_t RMONAR
+0x1A Month Alarm (BCD) / BCNT1AER.
volatile uint8_t RYRAREN
+0x1E Year Alarm Enable / BCNT3AER.
volatile uint8_t RCR1
+0x22 Control 1 (IRQ enables, PES).
volatile uint8_t RCR2
+0x24 Control 2 (START/RESET/HR24/...).
volatile uint16_t RYRCNT
+0x0E Year Counter (BCD, 16-bit).
volatile uint8_t RHRCNT
+0x06 Hour Counter (BCD) / BCNT2.
volatile uint8_t RWKAR
+0x16 Day-of-Week Alarm / BCNT3AR.
volatile uint16_t RFRL
+0x2C Frequency Register L (RFC[15:0]).
volatile uint16_t RYRAR
+0x1C Year Alarm (BCD) / BCNT2AER.
volatile uint8_t RDAYAR
+0x18 Day Alarm (BCD) / BCNT0AER.
volatile uint8_t RSECAR
+0x10 Second Alarm (BCD) / BCNT0AR.
volatile uint8_t RMONCNT
+0x0C Month Counter (BCD).
volatile uint16_t RFRH
+0x2A Frequency Register H (RFC16).
Calendar date + time decoded from BCD.