ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_lpm_regs.h
Go to the documentation of this file.
1
35
36#pragma once
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#include <stdint.h>
43
44#include "ra8_attributes.h"
45
46/* =============================================================================
47 * Base addresses
48 * =============================================================================
49 */
50
59typedef enum : uintptr_t {
60 k_ra8_lpm_sysc_base_addr = 0x4001E000UL,
61 k_ra8_lpm_icu_base_addr = 0x4000C000UL,
63
64/* =============================================================================
65 * Register offsets
66 * =============================================================================
67 */
68
79typedef enum : uint16_t {
80 /* --- SYSC: lifecycle + LPSCR ---------------------------------------- */
86
87 /* --- SYSC: PRCR (16-bit, write-protect key) ------------------------- */
89
90 /* --- SYSC: RAM retention ------------------------------------------- */
93
94 /* --- SYSC: LDO standby --------------------------------------------- */
98
99 /* --- SYSC: deep-standby cancel (DPSIER0..3 / DPSIFR0..3 / DPSIEGR0..2) */
104
109
113
114 /* --- SYSC: power-domain gating control ------------------------------ */
116
117 /* --- SYSC: per-oscillator stop bits (CGC sub-block, same SYSC base) -- */
123
124 /* --- ICU: WUPEN0/WUPEN1 (32-bit) ----------------------------------- */
128
129/* =============================================================================
130 * Sleep mode (LPSCR.LPMD encoding)
131 * =============================================================================
132 */
133
168
169/* =============================================================================
170 * Bit fields and masks
171 * =============================================================================
172 */
173
182
197
212
222
227typedef enum : uint8_t {
231
236typedef enum : uint8_t {
239
248
265
290
299
310
323
338typedef enum : uint8_t {
341
363
378
390
404
439
457
477typedef enum : uintptr_t {
478 k_ra8_lpm_scb_scr_addr = 0xE000ED10UL,
480
494typedef enum : uint32_t {
497
498/* =============================================================================
499 * Inline accessors
500 * =============================================================================
501 */
502
526static inline volatile uint32_t* ra8_lpm_scb_scr(void)
527{
528 return (volatile uint32_t*)k_ra8_lpm_scb_scr_addr;
529}
530
548static inline volatile uint8_t* ra8_lpm_sysc_reg8(ra8_lpm_off_t off)
549{
550 return (volatile uint8_t*)(k_ra8_lpm_sysc_base_addr + (uintptr_t)off);
551}
552
571static inline volatile uint16_t* ra8_lpm_sysc_reg16(ra8_lpm_off_t off)
572{
573 return (volatile uint16_t*)(k_ra8_lpm_sysc_base_addr + (uintptr_t)off);
574}
575
594static inline volatile uint32_t* ra8_lpm_icu_reg32(ra8_lpm_off_t off)
595{
596 return (volatile uint32_t*)(k_ra8_lpm_icu_base_addr + (uintptr_t)off);
597}
598
599#ifdef __cplusplus
600}
601#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
ra8_lpm_dpsbycr_bits_t
DPSBYCR bit fields and reset value (HUM Ch 11.2.21 p 458).
@ k_ra8_lpm_dpsbycr_dcssmode_mask
DCSSMODE[1:0] mask.
@ k_ra8_lpm_dpsbycr_reset_val
Cold-reset value.
@ k_ra8_lpm_dpsbycr_iokeep_mask
IOKEEP @ bit 6.
@ k_ra8_lpm_dpsbycr_dcssmode_shift
DCSSMODE[1:0] starts at bit 2.
ra8_lpm_scb_field_t
ARM Cortex-M85 SCB.SCR field bits used for sleep entry.
@ k_ra8_lpm_scb_scr_sleepdeep
SCR.SLEEPDEEP @ bit 2.
ra8_lpm_scb_t
ARM Cortex-M System Control Block address used for SLEEPDEEP.
@ k_ra8_lpm_scb_scr_addr
SCB->SCR address (Cortex-M85).
static volatile uint32_t * ra8_lpm_scb_scr(void)
Return a typed pointer to the Cortex-M SCB->SCR register.
ra8_lpm_pdctr_bits_t
PDCTRGD power-gating field masks (HUM Ch 11.2.14 p 452).
@ k_ra8_lpm_pdctr_pdcsf_mask
PDCSF @ bit 6: control busy.
@ k_ra8_lpm_pdctr_pdpgsf_mask
PDPGSF @ bit 7: 1 = gated off.
@ k_ra8_lpm_pdctr_pdde_mask
PDDE @ bit 0: 1 = powered OFF.
ra8_lpm_sscr1_ss2lp_t
SSCR1.SS2LP encoding (HUM Ch 11.2.19 p 456).
@ k_ra8_lpm_ss2lp_low
SS2LP_1 – low power setting 1.
@ k_ra8_lpm_ss2lp_default
SS2LP_0 – default mode.
ra8_lpm_sbycr_bits_t
SBYCR bit positions and reset value (HUM Ch 11.2.18 p 456).
@ k_ra8_lpm_sbycr_ope_mask
OPE @ bit 6 – bus-signal output keep.
@ k_ra8_lpm_sbycr_reset_val
Cold-reset value (OPE=1, all else 0).
ra8_sleep_mode_t
Software-selectable sleep modes (LPSCR.LPMD encoding).
@ k_ra8_sleep_mode_deep_standby_1
Deep Standby 1 (LPMD=0x8).
@ k_ra8_sleep_mode_deep_standby_2
Deep Standby 2 (LPMD=0x9).
@ k_ra8_sleep_mode_deep_sleep
CPU deep sleep (SCR.SLEEPDEEP=1).
@ k_ra8_sleep_mode_software_std
Software Standby (LPMD=0x5).
@ k_ra8_sleep_mode_sleep
CPU sleep, peripherals run.
@ k_ra8_sleep_mode_deep_standby_3
Deep Standby 3 (LPMD=0xA).
static volatile uint32_t * ra8_lpm_icu_reg32(ra8_lpm_off_t off)
Return a typed pointer to a 32-bit ICU/WUPEN register.
ra8_lpm_pdramscr0_groups_t
Useful PDRAMSCR0 RKEEP[12:0] preset masks (HUM Ch 11.2.16 p 453).
@ k_ra8_lpm_pdramscr0_sram0_keep
Retain SRAM0 (b3..b0).
@ k_ra8_lpm_pdramscr0_sram2_keep
Retain SRAM2 (b11..b8).
@ k_ra8_lpm_pdramscr0_writable
b14..b0 writable mask.
@ k_ra8_lpm_pdramscr0_sram3_keep
Retain SRAM3 (b12).
@ k_ra8_lpm_pdramscr0_all_keep
Retain all banks.
@ k_ra8_lpm_pdramscr0_sram1_keep
Retain SRAM1 (b7..b4).
ra8_lpm_dcssmode_t
DPSBYCR.DCSSMODE encoding (HUM Ch 11.2.21 p 458).
@ k_ra8_lpm_dcssmode_128us
128 us soft-start (cold-reset default).
@ k_ra8_lpm_dcssmode_512us
512 us soft-start.
@ k_ra8_lpm_dcssmode_256us
256 us soft-start.
ra8_lpm_ldocr_bits_t
PLL[12]LDOCR / HOCOLDOCR shared bit fields (HUM Ch 11.2.40..42 p 475..476).
@ k_ra8_lpm_ldocr_ldostp_mask
LDOSTP @ bit 0 – stop in normal mode.
@ k_ra8_lpm_ldocr_skeep_shift
SKEEP starts at bit 1.
@ k_ra8_lpm_ldocr_skeep_mask
SKEEP @ bit 1 – retain in standby.
ra8_lpm_pdramscr1_bits_t
PDRAMSCR1 bit positions (HUM Ch 11.2.17 p 455).
@ k_ra8_lpm_pdramscr1_rkeep1_mask
RKEEP1 @ bit 1 – CPU1 TCM.
@ k_ra8_lpm_pdramscr1_rkeep0_mask
RKEEP0 @ bit 0 – CPU0 TCM.
ra8_lpm_wupen0_bits_t
WUPEN0 bit masks for common wake-up sources (HUM Ch 14.2.19 p 550).
@ k_ra8_lpm_wupen0_irq3
IRQ3 @ bit 3.
@ k_ra8_lpm_wupen0_rtcprd
RTCPRDWUPEN.
@ k_ra8_lpm_wupen0_riic0
RIIC0WUPEN.
@ k_ra8_lpm_wupen0_rtcalm
RTCALMWUPEN.
@ k_ra8_lpm_wupen0_vbatt
VBATTWUPEN.
@ k_ra8_lpm_wupen0_irq5
IRQ5 @ bit 5.
@ k_ra8_lpm_wupen0_irq6
IRQ6 @ bit 6.
@ k_ra8_lpm_wupen0_irq0
IRQ0 @ bit 0.
@ k_ra8_lpm_wupen0_agt1ca
AGT1CAWUPEN.
@ k_ra8_lpm_wupen0_pvd2
PVD2WUPEN.
@ k_ra8_lpm_wupen0_usbfs
USBFS0WUPEN.
@ k_ra8_lpm_wupen0_irq7
IRQ7 @ bit 7.
@ k_ra8_lpm_wupen0_usbhs
USBHSWUPEN.
@ k_ra8_lpm_wupen0_pvd1
PVD1WUPEN.
@ k_ra8_lpm_wupen0_agt1cb
AGT1CBWUPEN.
@ k_ra8_lpm_wupen0_irq2
IRQ2 @ bit 2.
@ k_ra8_lpm_wupen0_irq4
IRQ4 @ bit 4.
@ k_ra8_lpm_wupen0_agt1ud
AGT1UDWUPEN.
@ k_ra8_lpm_wupen0_irq1
IRQ1 @ bit 1.
@ k_ra8_lpm_wupen0_iwdt
IWDTWUPEN.
@ k_ra8_lpm_wupen0_acmphs0
legacy alias for PVD1 path.
ra8_lpm_dpsier2_bits_t
DPSIER2 cancel-source bit positions (HUM Ch 11.2.24 p 460).
@ k_ra8_lpm_dpsier2_dnmie_mask
DNMIE @ bit 4.
@ k_ra8_lpm_dpsier2_dpvd1ie_mask
DPVD1IE @ bit 0.
@ k_ra8_lpm_dpsier2_drtciie_mask
DRTCIIE @ bit 2.
@ k_ra8_lpm_dpsier2_drtcaie_mask
DRTCAIE @ bit 3.
@ k_ra8_lpm_dpsier2_dpvd2ie_mask
DPVD2IE @ bit 1.
ra8_lpm_addr_t
Hardware base addresses used by the LPM HAL driver.
@ k_ra8_lpm_sysc_base_addr
SYSC base (HUM Ch 11.2.18 p 456).
@ k_ra8_lpm_icu_base_addr
ICU/WUPEN base (HUM Ch 14.2.19 p 550).
ra8_lpm_dpsier_idx_t
Selector for DPSIER0..3 / DPSIFR0..3 / DPSIEGR0..2 helpers (HUM Ch 11.2.22..36 p 459....
@ k_ra8_lpm_dpsier_idx_count
RA8 lpm dpsier index count.
@ k_ra8_lpm_dpsier_idx_2
DPSIER2 / DPSIFR2 / DPSIEGR2.
@ k_ra8_lpm_dpsier_idx_1
DPSIER1 / DPSIFR1 / DPSIEGR1.
@ k_ra8_lpm_dpsier_idx_0
DPSIER0 / DPSIFR0 / DPSIEGR0.
@ k_ra8_lpm_dpsier_idx_3
DPSIER3 / DPSIFR3 (HUM Ch 11.2.25 p 461 – DPSIEGR3 @ 0xA34 exists, unexposed here).
ra8_lpm_off_t
Byte offsets of every LPM-relevant register from its block base.
@ k_ra8_lpm_pll2ldocr_off
PLL2LDOCR (8b) – HUM Ch 11.2.41 p 475.
@ k_ra8_lpm_dpsbycr_off
DPSBYCR (8b) – HUM Ch 11.2.21 p 458.
@ k_ra8_lpm_dpsiegr2_off
DPSIEGR2 (8b) – HUM Ch 11.2.36 p 463.
@ k_ra8_lpm_pdramscr1_off
PDRAMSCR1 (8b) – HUM Ch 11.2.17 p 455.
@ k_ra8_lpm_pll1ldocr_off
PLL1LDOCR (8b) – HUM Ch 11.2.40 p 475.
@ k_ra8_lpm_dpsifr0_off
DPSIFR0 (8b) – HUM Ch 11.2.28 p 462.
@ k_ra8_lpm_dpsier0_off
DPSIER0 (8b) – HUM Ch 11.2.22 p 459.
@ k_ra8_lpm_wupen0_off
WUPEN0 (32b) – HUM Ch 14.2.19 p 550.
@ k_ra8_lpm_dpsier1_off
DPSIER1 (8b) – HUM Ch 11.2.23 p 459.
@ k_ra8_lpm_pdctrgd_off
PDCTRGD (8b) – HUM Ch 11.2.14 p 452.
@ k_ra8_lpm_sscr1_off
SSCR1 (8b) – HUM Ch 11.2.19 p 456.
@ k_ra8_lpm_mococr_off
MOCOCR (8b) – HUM Ch 9.2.18 p 346.
@ k_ra8_lpm_sbycr_off
SBYCR (8b) – HUM Ch 11.2.18 p 456.
@ k_ra8_lpm_dpsifr2_off
DPSIFR2 (8b) – HUM Ch 11.2.30 p 462.
@ k_ra8_lpm_hocoldocr_off
HOCOLDOCR (8b) – HUM Ch 11.2.42 p 476.
@ k_ra8_lpm_dpsier3_off
DPSIER3 (8b) – HUM Ch 11.2.25 p 461.
@ k_ra8_lpm_hococr_off
HOCOCR (8b) – HUM Ch 9.2.16 p 345.
@ k_ra8_lpm_lpscr_off
LPSCR (8b) – HUM Ch 11.2.20 p 457.
@ k_ra8_lpm_dpsiegr1_off
DPSIEGR1 (8b) – HUM Ch 11.2.35 p 463.
@ k_ra8_lpm_opccr_off
OPCCR (8b) – HUM Ch 11.2.11 p 451.
@ k_ra8_lpm_dpsiegr0_off
DPSIEGR0 (8b) – HUM Ch 11.2.34 p 463.
@ k_ra8_lpm_lococr_off
LOCOCR (8b) – HUM Ch 9.2.15 p 344.
@ k_ra8_lpm_wupen1_off
WUPEN1 (32b) – HUM Ch 14.2.20 p 552.
@ k_ra8_lpm_sosccr_off
SOSCCR (8b) – HUM Ch 9.2.14 p 343.
@ k_ra8_lpm_pdramscr0_off
PDRAMSCR0 (16b) – HUM Ch 11.2.16 p 453.
@ k_ra8_lpm_dpsier2_off
DPSIER2 (8b) – HUM Ch 11.2.24 p 460.
@ k_ra8_lpm_prcr_off
PRCR (16b) – HUM Ch 11.2.18 p 456.
@ k_ra8_lpm_dpsifr3_off
DPSIFR3 (8b) – HUM Ch 11.2.31 p 462.
@ k_ra8_lpm_mosccr_off
MOSCCR (8b) – HUM Ch 9.2.13 p 343.
@ k_ra8_lpm_dpsifr1_off
DPSIFR1 (8b) – HUM Ch 11.2.29 p 462.
ra8_lpm_ldo_state_t
LDOCR.SKEEP encoding for ra8_lpm_set_ldo_standby.
@ k_ra8_lpm_ldo_disabled
LDO stops during standby (SKEEP=0).
@ k_ra8_lpm_ldo_retained
LDO retains state (SKEEP=1).
ra8_lpm_sscr1_bits_t
SSCR1 bit fields (HUM Ch 11.2.19 p 456).
@ k_ra8_lpm_sscr1_ss2lp_shift
SS2LP[1:0] starts at bit 2.
@ k_ra8_lpm_sscr1_ss2lp_mask
SS2LP[1:0] mask.
@ k_ra8_lpm_sscr1_ss2fr_mask
SS2FR @ bit 0 – fast return.
ra8_lpm_clock_stop_bits_t
Per-oscillator stop bit (HUM Ch 9.2.13..18 p 343..346).
@ k_ra8_lpm_clock_stop_mask
STOP @ bit 0 in every OCR.
static volatile uint16_t * ra8_lpm_sysc_reg16(ra8_lpm_off_t off)
Return a typed pointer to a 16-bit SYSC register.
ra8_lpm_dpsier3_bits_t
DPSIER3 cancel-source bit positions (HUM Ch 11.2.25 p 461).
@ k_ra8_lpm_dpsier3_dsostdie_mask
DSOSTDIE @ bit 6.
@ k_ra8_lpm_dpsier3_dulpt1ie_mask
DULPT1IE @ bit 3.
@ k_ra8_lpm_dpsier3_dvbattadie_msk
DVBATTADIE@ bit 7.
@ k_ra8_lpm_dpsier3_dusbfsie_mask
DUSBFSIE @ bit 0.
@ k_ra8_lpm_dpsier3_dulpt0ie_mask
DULPT0IE @ bit 2.
@ k_ra8_lpm_dpsier3_dusbhsie_mask
DUSBHSIE @ bit 1.
@ k_ra8_lpm_dpsier3_diwdtie_mask
DIWDTIE @ bit 5.
ra8_lpm_lpscr_bits_t
LPSCR bit fields (HUM Ch 11.2.20 p 457).
@ k_ra8_lpm_lpscr_lpmd_mask
LPMD[3:0] occupies bits 3..0.
ra8_lpm_prcr_bits_t
PRCR (write-protect) key + group masks (HUM Ch 11.2.18 p 456).
@ k_ra8_lpm_prcr_key
Mandatory password in upper byte.
@ k_ra8_lpm_prcr_prc0_msk
PRC0 – CGC + LVD group.
@ k_ra8_lpm_prcr_prc2_msk
PRC3 (LVD reset) – not used here.
@ k_ra8_lpm_prcr_prc1_msk
PRC1 – LPM/SYSC group.
ra8_lpm_wupen1_bits_t
WUPEN1 bit masks for ULPT/I3C/SOSC/PDM/COMP sources (HUM Ch 14.2.20 p 552).
@ k_ra8_lpm_wupen1_ulpt0a
ULP0AWUPEN @ bit 9.
@ k_ra8_lpm_wupen1_ulpt1a
ULP1AWUPEN @ bit 13.
@ k_ra8_lpm_wupen1_pdm
PDMWUPEN @ bit 15.
@ k_ra8_lpm_wupen1_ulpt1b
ULP1BWUPEN @ bit 14.
@ k_ra8_lpm_wupen1_ulpt1u
ULP1UWUPEN @ bit 12.
@ k_ra8_lpm_wupen1_i3c0
I3CWUPEN @ bit 11.
@ k_ra8_lpm_wupen1_comphs0
COMPHS0WUPEN @ bit 3.
@ k_ra8_lpm_wupen1_ulpt0b
ULP0BWUPEN @ bit 10.
@ k_ra8_lpm_wupen1_ulpt0u
ULP0UWUPEN @ bit 8.
@ k_ra8_lpm_wupen1_sosc
SOSCWUPEN @ bit 7.
static volatile uint8_t * ra8_lpm_sysc_reg8(ra8_lpm_off_t off)
Return a typed pointer to an 8-bit SYSC register.
ra8_lpm_opccr_bits_t
OPCCR bit fields (HUM Ch 11.2.11 p 451).
@ k_ra8_lpm_opccr_opcmtsf_msk
OPCMTSF @ bit 4 – mode-transition flag.
@ k_ra8_lpm_opccr_opcm_mask
OPCM[1:0] @ bits 1..0 – power mode.