ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rtc.c
Go to the documentation of this file.
1
28
29#include "ra8_rtc.h"
30
31#include <stdint.h>
32
33#include "ra8_attributes.h"
34#include "ra8_check.h"
35#include "ra8_err.h"
36#include "ra8_hw_err.h"
37#include "ra8_log.h"
39#include "ra8_rtc_regs.h"
40#include "ra8_system_regs.h"
41#include "ra8_time.h"
42
43static const char* s_tag = "RTC";
44
50
51typedef enum : uint16_t {
54
66typedef enum : uint16_t {
69
70typedef enum : uint8_t {
73
87RA8_INTERNAL static uint8_t internal_bcd_to_bin(uint8_t bcd)
88{
89 const uint8_t high = (uint8_t)((bcd >> k_ra8_bcd_digit_shift) & k_ra8_bcd_digit_mask);
90 const uint8_t low = (uint8_t)(bcd & k_ra8_bcd_digit_mask);
91 return (uint8_t)((high * k_ra8_bcd_digit_base) + low);
92}
93
107RA8_INTERNAL static uint8_t internal_bin_to_bcd(uint8_t bin)
108{
109 const uint8_t high = (uint8_t)(bin / k_ra8_bcd_digit_base);
110 const uint8_t low = (uint8_t)(bin % k_ra8_bcd_digit_base);
111 return (uint8_t)((high << k_ra8_bcd_digit_shift) | low);
112}
113
133RA8_INTERNAL static void
134internal_wait_bit(volatile const uint8_t* reg, uint8_t mask, uint8_t expect)
135{
136 for (uint16_t i = 0U; i < k_ra8_rtc_wait_iters; ++i) {
137#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
138 const bool matched = ra8_fake_mmio_poll(reg, i, ((*reg) & mask) == expect);
139#else
140 const bool matched = ((*reg) & mask) == expect;
141#endif
142 if (matched) {
143 return;
144 }
145 }
146}
147
148/* =============================================================================
149 * Count-source bring-up (HUM Ch 26.3.2 "Clock and Count Mode Setting
150 * Procedure", Figure 26.3 p 1243)
151 * =============================================================================
152 */
153
173
184typedef enum : uint16_t {
188
216{
217 if (src == k_ra8_rtc_clk_loco) {
219 {
220 /* HUM Ch 9.2.15 "LOCOCR : Low-Speed On-Chip Oscillator Control
221 * Register" p 339 -- LCSTP = 0 keeps the internal LOCO running. */
222 *ra8_sys_lococr() = 0U;
223 }
225#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
226 const bool loco_running =
227 ra8_fake_mmio_poll(ra8_sys_lococr(), 0U, (*ra8_sys_lococr() & k_ra8_lococr_lcstp_mask) == 0U);
228#else
229 const bool loco_running = (*ra8_sys_lococr() & k_ra8_lococr_lcstp_mask) == 0U;
230#endif
231 if (!loco_running) {
233 }
234 return k_ra8_ok;
235 }
236
238 {
239 /* HUM Ch 9.2.29 "SOMCR : Sub-Clock Oscillator Mode Control Register"
240 * p 351 -- set the crystal drive (standard, SOSEL = resonator) while
241 * SOSTP is still 1. */
243 /* HUM Ch 9.2.14 "SOSCCR : Sub-Clock Oscillator Control Register"
244 * p 339 -- SOSTP = 0 starts the 32.768 kHz crystal. */
245 *ra8_sys_sosccr() = 0U;
246 }
248#if defined(RA8_OFF_TARGET) && defined(UNIT_TEST)
249 const bool subclock_running =
250 ra8_fake_mmio_poll(ra8_sys_sosccr(), 0U, (*ra8_sys_sosccr() & k_ra8_sosccr_sostp_mask) == 0U);
251#else
252 const bool subclock_running = (*ra8_sys_sosccr() & k_ra8_sosccr_sostp_mask) == 0U;
253#endif
254 if (!subclock_running) {
256 }
257 return k_ra8_ok;
258}
259
261{
262 if (src > k_ra8_rtc_clk_loco) {
264 }
265
266 const ra8_err_t osc_err = internal_start_count_source(src);
267 if (osc_err != k_ra8_ok) {
268 ra8_log_error(s_tag, "rtc count source not running");
269 return osc_err;
270 }
271
272 volatile r_rtc_regs_t* rtc = ra8_rtc();
273
274 /* HUM Ch 26.2.23 "RCR4 : RTC Control Register 4" p 1236 -- RCKSEL
275 * selects the count source (0 = sub-clock, 1 = LOCO). It must be set
276 * once before the initial RTC register settings. */
277 rtc->RCR4 = (uint8_t)src;
278 /* HUM Ch 26.3.2 "Clock and Count Mode Setting Procedure" p 1243 --
279 * supply at least 6 clocks of the count source after writing RCKSEL. */
281
282 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- stop the
283 * prescaler (START = 0) before the frequency register and software
284 * reset, and wait for the bit to fall. */
285 rtc->RCR2 = (uint8_t)(rtc->RCR2 & (uint8_t)~(1U << k_ra8_rcr2_bit_start));
286 internal_wait_bit(&rtc->RCR2, (uint8_t)(1U << k_ra8_rcr2_bit_start), 0U);
287
288 if (src == k_ra8_rtc_clk_loco) {
289 /* HUM Ch 26.2.25 "RFRH : Frequency Register H" p 1237 -- clear RFRH
290 * before RFRL on a cold start. */
291 rtc->RFRH = (uint16_t)k_ra8_rtc_rfrh_cold;
292 /* HUM Ch 26.2.24 "RFRL : Frequency Register L" p 1236 -- (LOCO / 128)
293 * - 1; 0x00FF for a 32.768 kHz LOCO. */
294 rtc->RFRL = (uint16_t)k_ra8_rtc_rfrl_32768;
295 }
296
297 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1233 -- RESET = 1
298 * initializes the prescaler and count registers against the live count
299 * source; the bit auto-clears when the reset completes. */
300 rtc->RCR2 = (uint8_t)(1U << k_ra8_rcr2_bit_reset);
302 internal_wait_bit(&rtc->RCR2, (uint8_t)(1U << k_ra8_rcr2_bit_reset), 0U);
303
304 ra8_log_info_val(s_tag, "rtc clock init src", (uint32_t)src);
305 return k_ra8_ok;
306}
307
309{
310 volatile r_rtc_regs_t* rtc = ra8_rtc();
311
312 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- stop the
313 * counter (START=0) and clear CNTMD so we are in calendar mode.
314 * FSP r_rtc.c r_rtc_software_reset writes RCR2 = 0 and waits for
315 * CNTMD == 0 to confirm the mode change. */
316 rtc->RCR2 = 0U;
317 internal_wait_bit(&rtc->RCR2, (uint8_t)(1U << k_ra8_rcr2_bit_cntmd), 0U);
318
319 /* HUM Ch 26.2.20 "RCR1 : RTC Control Register 1" p 1231 -- mask
320 * every IRQ source (AIE/CIE/PIE) and clear PES. FSP waits for the
321 * write to land. */
322 rtc->RCR1 = 0U;
324
325 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- HR24=1
326 * selects 24-hour mode. FSP also polls until HR24 reads back 1. */
327 rtc->RCR2 = (uint8_t)(1U << k_ra8_rcr2_bit_hr24);
329 (uint8_t)(1U << k_ra8_rcr2_bit_hr24),
330 (uint8_t)(1U << k_ra8_rcr2_bit_hr24));
331
332 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- START=1
333 * starts the counter. */
334 rtc->RCR2 = (uint8_t)((1U << k_ra8_rcr2_bit_hr24) | (1U << k_ra8_rcr2_bit_start));
336 (uint8_t)(1U << k_ra8_rcr2_bit_start),
337 (uint8_t)(1U << k_ra8_rcr2_bit_start));
338
339 ra8_log_info(s_tag, "rtc_init (24h calendar)");
340 return k_ra8_ok;
341}
342
344{
345 RA8_CHECK_NULL_PTR(dt, s_tag, "dt must not be nullptr");
346 if (dt->year < k_ra8_rtc_year_base) {
348 }
349
350 volatile r_rtc_regs_t* rtc = ra8_rtc();
351
352 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- count
353 * registers must only be written while START=0. Clear the bit and
354 * wait for the hardware to honour it (FSP's r_rtc_start_bit_update). */
355 const uint8_t saved = rtc->RCR2;
356 rtc->RCR2 = (uint8_t)(saved & (uint8_t)~(1U << k_ra8_rcr2_bit_start));
357 internal_wait_bit(&rtc->RCR2, (uint8_t)(1U << k_ra8_rcr2_bit_start), 0U);
358
359 /* HUM Ch 26.2.2 "RSECCNT : Second Counter" p 1221 */
361 /* HUM Ch 26.2.3 "RMINCNT : Minute Counter" p 1222 */
363 /* HUM Ch 26.2.4 "RHRCNT : Hour Counter" p 1222 */
364 rtc->RHRCNT = internal_bin_to_bcd(dt->hour);
365 /* HUM Ch 26.2.5 "RWKCNT : Day-of-Week Counter" p 1223 */
366 rtc->RWKCNT = dt->weekday;
367 /* HUM Ch 26.2.7 "RDAYCNT : Day Counter" p 1224 */
368 rtc->RDAYCNT = internal_bin_to_bcd(dt->day);
369 /* HUM Ch 26.2.8 "RMONCNT : Month Counter" p 1224 */
371 /* HUM Ch 26.2.9 "RYRCNT : Year Counter" p 1225 */
372 rtc->RYRCNT = (uint16_t)internal_bin_to_bcd((uint8_t)(dt->year - k_ra8_rtc_year_base));
373
374 /* HUM Ch 26.2.21 "RCR2 : RTC Control Register 2" p 1232 -- restore
375 * START to its prior value (always 1 if init has run) and wait. */
376 rtc->RCR2 = (uint8_t)(saved | (1U << k_ra8_rcr2_bit_start));
378 (uint8_t)(1U << k_ra8_rcr2_bit_start),
379 (uint8_t)(1U << k_ra8_rcr2_bit_start));
380
381 ra8_log_info_val(s_tag, "rtc_set year", (uint32_t)dt->year);
382 return k_ra8_ok;
383}
384
386{
387 RA8_CHECK_NULL_PTR(out, s_tag, "out must not be nullptr");
388
389 volatile const r_rtc_regs_t* rtc = ra8_rtc();
390
393 out->hour = internal_bcd_to_bin(rtc->RHRCNT);
394 out->weekday = rtc->RWKCNT;
395 out->day = internal_bcd_to_bin(rtc->RDAYCNT);
396 out->month = internal_bcd_to_bin(rtc->RMONCNT);
397 out->year = (uint16_t)(k_ra8_rtc_year_base + internal_bcd_to_bin((uint8_t)rtc->RYRCNT));
398
399 return k_ra8_ok;
400}
401
416
438{
439 RA8_CHECK_NULL_PTR(alarm, s_tag, "alarm must not be nullptr");
443 }
444
445 volatile r_rtc_regs_t* rtc = ra8_rtc();
446 const uint8_t enb = (uint8_t)(1U << k_ra8_rtc_alarm_enb_bit);
447
448 /* HUM Ch 26.2.10 "RSECAR" / 26.2.11 "RMINAR" / 26.2.12 "RHRAR" --
449 * encode the BCD match value, OR in the ENB bit to enable the field. */
450 rtc->RSECAR = (uint8_t)(internal_bin_to_bcd(alarm->second) | enb);
451 rtc->RMINAR = (uint8_t)(internal_bin_to_bcd(alarm->minute) | enb);
452 rtc->RHRAR = (uint8_t)(internal_bin_to_bcd(alarm->hour) | enb);
453
454 /* Wildcard the date / weekday / month / year alarms so the alarm
455 * fires on the next hh:mm:ss match regardless of date. */
456 rtc->RWKAR = 0U;
457 rtc->RDAYAR = 0U;
458 rtc->RMONAR = 0U;
459 rtc->RYRAR = 0U;
460 rtc->RYRAREN = 0U;
461
462 return k_ra8_ok;
463}
464
465/* =============================================================================
466 * full build-out
467 * =============================================================================
468 */
469
478
479typedef struct {
481 void* ctx;
483
485
487{
488 volatile r_rtc_regs_t* rtc = ra8_rtc();
489 /* HUM Ch 26.2.20 "RCR1" p 1231 */ /* mask all IRQs. */
490 rtc->RCR1 = 0U;
491 /* HUM Ch 26.2.21 "RCR2" p 1232 */ /* stop the counter. */
492 rtc->RCR2 = 0U;
493 s_rtc_state.fn = nullptr;
494 s_rtc_state.ctx = nullptr;
495 return k_ra8_ok;
496}
497
499{
500 volatile r_rtc_regs_t* rtc = ra8_rtc();
501 /* HUM Ch 26.2.20 "RCR1" p 1231 */ /* AIE/CIE/PIE enable bits 0..2. */
502 rtc->RCR1 = (uint8_t)(rtc->RCR1 | (mask & k_ra8_rtc_irq_all));
503 return k_ra8_ok;
504}
505
507{
508 RA8_CHECK_NULL_PTR(out_mask, s_tag, "out_mask must not be nullptr");
509 *out_mask = (uint8_t)(ra8_rtc()->RCR1 & k_ra8_rtc_irq_all);
510 return k_ra8_ok;
511}
512
514{
515 volatile r_rtc_regs_t* rtc = ra8_rtc();
516 rtc->RCR1 = (uint8_t)(rtc->RCR1 & (uint8_t)~(mask & k_ra8_rtc_irq_all));
517 return k_ra8_ok;
518}
519
521{
522 s_rtc_state.fn = fn;
523 s_rtc_state.ctx = ctx;
524 return k_ra8_ok;
525}
526
528{
529 const uint8_t mask = (uint8_t)(ra8_rtc()->RCR1 & k_ra8_rtc_irq_all);
530 const ra8_rtc_event_fn_t fn = s_rtc_state.fn;
531 void* const ctx = s_rtc_state.ctx;
532 if (fn != nullptr) {
533 fn(ctx, mask);
534 }
535}
536
538{
539 volatile r_rtc_regs_t* rtc = ra8_rtc();
540 /* HUM Ch 26.2.21 "RCR2.START" p 1232 */ /* clear START to halt counter. */
541 rtc->RCR2 = (uint8_t)(rtc->RCR2 & (uint8_t)~(1U << k_ra8_rcr2_bit_start));
542 internal_wait_bit(&rtc->RCR2, (uint8_t)(1U << k_ra8_rcr2_bit_start), 0U);
543 return k_ra8_ok;
544}
545
547{
548 volatile r_rtc_regs_t* rtc = ra8_rtc();
549 /* HUM Ch 26.2.21 "RCR2.START" p 1232 */ /* set START to resume. */
550 rtc->RCR2 = (uint8_t)(rtc->RCR2 | (1U << k_ra8_rcr2_bit_start));
552 (uint8_t)(1U << k_ra8_rcr2_bit_start),
553 (uint8_t)(1U << k_ra8_rcr2_bit_start));
554 return k_ra8_ok;
555}
static const char * s_tag
Logging / check tag.
Definition ra8_app.c:17
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.
Definition ra8_check.h:243
Error Code Definitions for ra8-firmware.
@ k_ra8_err_hw_init_failed
Hardware peripheral failed to initialise.
Definition ra8_err.h:290
@ k_ra8_err_invalid_arg
Invalid function argument.
Definition ra8_err.h:152
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
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.
Definition ra8_log.h:366
#define ra8_log_info(tag, message)
RA8 log info.
Definition ra8_log.h:364
#define ra8_log_error(tag, message)
RA8 log error.
Definition ra8_log.h:335
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).
Definition ra8_rtc.c:260
ra8_rtc_bcd_t
Definition ra8_rtc.c:45
@ k_ra8_bcd_digit_mask
RA8 bcd digit mask.
Definition ra8_rtc.c:46
@ k_ra8_bcd_digit_shift
RA8 bcd digit shift.
Definition ra8_rtc.c:47
@ k_ra8_bcd_digit_base
RA8 bcd digit base.
Definition ra8_rtc.c:48
ra8_err_t ra8_rtc_set_alarm(const ra8_rtc_datetime_t *alarm)
Implementation of ra8_rtc_set_alarm().
Definition ra8_rtc.c:437
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.
Definition ra8_rtc.c:134
static ra8_err_t internal_start_count_source(ra8_rtc_clk_src_t src)
Start and wait out the requested RTC count-source oscillator.
Definition ra8_rtc.c:215
ra8_rtc_year_t
Definition ra8_rtc.c:51
@ k_ra8_rtc_year_base
Base year for ra8_rtc_datetime_t.
Definition ra8_rtc.c:52
ra8_rtc_clk_wait_t
Fixed timed waits (ms) used while bringing up the count source.
Definition ra8_rtc.c:167
@ k_ra8_rtc_clk_stab_sub_ms
Sub-clock crystal stabilization wait.
Definition ra8_rtc.c:168
@ k_ra8_rtc_clk_six_clocks_ms
>= 6 clocks of the count source.
Definition ra8_rtc.c:170
@ k_ra8_rtc_clk_reset_ms
RTC software-reset settle wait.
Definition ra8_rtc.c:171
@ k_ra8_rtc_clk_stab_loco_ms
LOCO settle wait.
Definition ra8_rtc.c:169
static uint8_t internal_bin_to_bcd(uint8_t bin)
Internal helper.
Definition ra8_rtc.c:107
ra8_rtc_rfr_t
Prescaler frequency-register values for the LOCO count source.
Definition ra8_rtc.c:184
@ k_ra8_rtc_rfrl_32768
(32768 / 128) - 1 for a 32.768 kHz LOCO.
Definition ra8_rtc.c:186
@ k_ra8_rtc_rfrh_cold
RFRH cleared before RFRL on cold start.
Definition ra8_rtc.c:185
ra8_err_t ra8_rtc_init(void)
Start the RTC in 24-hour calendar mode.
Definition ra8_rtc.c:308
ra8_err_t ra8_rtc_deinit(void)
Tear down the RTC (stop counter + disable IRQs).
Definition ra8_rtc.c:486
ra8_err_t ra8_rtc_clear_status(uint8_t mask)
Clear RCR1 IRQ enable bits.
Definition ra8_rtc.c:513
ra8_err_t ra8_rtc_set(const ra8_rtc_datetime_t *dt)
Write the calendar registers.
Definition ra8_rtc.c:343
ra8_err_t ra8_rtc_get(ra8_rtc_datetime_t *out)
Read the calendar registers.
Definition ra8_rtc.c:385
static uint8_t internal_bcd_to_bin(uint8_t bcd)
Internal helper.
Definition ra8_rtc.c:87
ra8_rtc_byte_mask_t
Definition ra8_rtc.c:70
@ k_ra8_rtc_byte_mask_all
Whole-byte mask for wait loops.
Definition ra8_rtc.c:71
ra8_err_t ra8_rtc_exit_stop(void)
Restart the RTC counter from stop.
Definition ra8_rtc.c:546
static ra8_rtc_state_t s_rtc_state
Definition ra8_rtc.c:484
ra8_err_t ra8_rtc_get_status(uint8_t *out_mask)
Read RCR1 IRQ enable bits.
Definition ra8_rtc.c:506
ra8_err_t ra8_rtc_set_irq_enable(uint8_t mask)
Enable one or more RTC IRQ sources via RCR1.
Definition ra8_rtc.c:498
ra8_err_t ra8_rtc_attach_handler(ra8_rtc_event_fn_t fn, void *ctx)
Attach a callback for the RTC alarm / periodic event.
Definition ra8_rtc.c:520
ra8_rtc_mask_t
Combined IRQ mask.
Definition ra8_rtc.c:474
@ k_ra8_rtc_irq_all
RA8 rtc IRQ all.
Definition ra8_rtc.c:475
ra8_rtc_alarm_t
Bit positions / limits for the RxxAR alarm registers.
Definition ra8_rtc.c:410
@ k_ra8_rtc_alarm_enb_bit
RA8 rtc alarm enb bit.
Definition ra8_rtc.c:411
@ k_ra8_rtc_alarm_max_sec
RA8 rtc alarm maximum sec.
Definition ra8_rtc.c:414
@ k_ra8_rtc_alarm_max_min
RA8 rtc alarm maximum minimum.
Definition ra8_rtc.c:413
@ k_ra8_rtc_alarm_max_hr
RA8 rtc alarm maximum hr.
Definition ra8_rtc.c:412
void ra8_rtc_dispatch(void)
Dispatch an RTC event – snapshot RCR1 + fire callback.
Definition ra8_rtc.c:527
ra8_err_t ra8_rtc_enter_stop(void)
Stop the RTC counter for low-power mode.
Definition ra8_rtc.c:537
ra8_rtc_wait_t
Bounded-loop limits for register-change waits.
Definition ra8_rtc.c:66
@ k_ra8_rtc_wait_iters
RA8 rtc wait iters.
Definition ra8_rtc.c:67
Real-Time Clock driver (BCD calendar mode).
void(* ra8_rtc_event_fn_t)(void *ctx, uint8_t status_mask)
RTC event callback.
Definition ra8_rtc.h:148
ra8_rtc_clk_src_t
RTC count-source selection (RCR4.RCKSEL encoding).
Definition ra8_rtc.h:57
@ k_ra8_rtc_clk_loco
RCKSEL=1: internal LOCO (~32.768 kHz, crystal-free).
Definition ra8_rtc.h:59
@ k_ra8_rtc_irq_periodic
RCR1.PIE.
Definition ra8_rtc.h:141
@ k_ra8_rtc_irq_carry
RCR1.CIE.
Definition ra8_rtc.h:140
@ k_ra8_rtc_irq_alarm
RCR1.AIE.
Definition ra8_rtc.h:139
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.
Definition ra8_time.c:129
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.
Definition ra8_rtc.h:31
uint8_t hour
0..23.
Definition ra8_rtc.h:36
uint8_t day
1..31.
Definition ra8_rtc.h:34
uint8_t minute
0..59.
Definition ra8_rtc.h:37
uint8_t second
0..59.
Definition ra8_rtc.h:38
uint8_t month
1..12.
Definition ra8_rtc.h:33
uint16_t year
2000..2099.
Definition ra8_rtc.h:32
uint8_t weekday
0 (Sun) .
Definition ra8_rtc.h:35
void * ctx
Ctx.
Definition ra8_rtc.c:481
ra8_rtc_event_fn_t fn
Fn.
Definition ra8_rtc.c:480