ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_reset_regs.h
Go to the documentation of this file.
1
58
59#pragma once
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65#include <stdint.h>
66
67/* =============================================================================
68 * Base addresses
69 * =============================================================================
70 *
71 * The reset block lives inside SYSC. We re-state the base here so the
72 * driver does not need to pull in ra8_system_regs.h just to learn
73 * where SYSC sits (avoids a transitive include of every CGC / PRCR
74 * helper). The literal value matches ``k_ra8_system_base_addr`` in
75 * ``ra8_system_regs.h``; this is checked at compile time below.
76 */
77
82typedef enum : uintptr_t {
86
87/* =============================================================================
88 * Per-register byte offsets within the SYSC block
89 * =============================================================================
90 */
91
114
129
143
153
162
173
178typedef enum : uint8_t {
181
182/* =============================================================================
183 * RSTSR0 -- 8-bit (Power-on / voltage-monitor / Deep-software-standby)
184 * =============================================================================
185 */
186
214
215/* =============================================================================
216 * RSTSR1 -- 32-bit (IWDT / WDT / SW / Lockup / LM / BUS / CM / WDT1 / NW)
217 * =============================================================================
218 */
219
252
253/* =============================================================================
254 * RSTSR2 -- 8-bit (Cold/Warm Start)
255 * =============================================================================
256 */
257
266
267/* =============================================================================
268 * RSTSR3 -- 8-bit (Core voltage / Overcurrent / Temperature)
269 * =============================================================================
270 */
271
284
285/* =============================================================================
286 * RSTSAR -- 32-bit Reset Security Attribution
287 * =============================================================================
288 */
289
309
310/* =============================================================================
311 * SCB AIRCR (Cortex-M85) -- used by ra8_reset_software_reset()
312 * =============================================================================
313 */
314
336
337/* =============================================================================
338 * Inline pointer accessors
339 * =============================================================================
340 *
341 * Accessors return ``volatile`` pointers to the underlying register so
342 * the host-side ``ra8_fake_mmap`` shim can intercept reads / writes
343 * without any conditional compilation in the driver.
344 */
345
350static inline volatile uint8_t* ra8_reset_rstsr0(void)
351{
352 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_rstsr0);
353}
354
359static inline volatile uint32_t* ra8_reset_rstsr1(void)
360{
361 return (volatile uint32_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_rstsr1);
362}
363
368static inline volatile uint8_t* ra8_reset_rstsr2(void)
369{
370 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_rstsr2);
371}
372
377static inline volatile uint8_t* ra8_reset_rstsr3(void)
378{
379 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_rstsr3);
380}
381
386static inline volatile uint32_t* ra8_reset_rstsar(void)
387{
388 return (volatile uint32_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_rstsar);
389}
390
395static inline volatile uint32_t* ra8_reset_aircr(void)
396{
397 return (volatile uint32_t*)k_ra8_reset_scb_aircr_addr;
398}
399
404static inline volatile uint16_t* ra8_reset_prcr(void)
405{
406 return (volatile uint16_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_prcr);
407}
408
413static inline volatile uint8_t* ra8_reset_syrstmsk0(void)
414{
415 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_syrstmsk0);
416}
417
422static inline volatile uint8_t* ra8_reset_syrstmsk1(void)
423{
424 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_syrstmsk1);
425}
426
431static inline volatile uint8_t* ra8_reset_syrstmsk2(void)
432{
433 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_syrstmsk2);
434}
435
440static inline volatile uint8_t* ra8_reset_temprcr(void)
441{
442 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_temprcr);
443}
444
449static inline volatile uint8_t* ra8_reset_temprlr(void)
450{
451 return (volatile uint8_t*)(k_ra8_reset_sysc_base_addr + (uintptr_t)k_ra8_reset_off_temprlr);
452}
453
454#ifdef __cplusplus
455}
456#endif
static volatile uint8_t * ra8_reset_syrstmsk0(void)
Pointer to the 8-bit SYRSTMSK0 register.
ra8_rstsar_bits_t
RSTSAR bit positions / masks (per HUM Ch 6.2.1 p 256).
@ k_ra8_reset_rstsar_nonsec1_pos
NONSEC1 position.
@ k_ra8_reset_rstsar_field_msk
Defined bit window.
@ k_ra8_reset_rstsar_nonsec4_pos
NONSEC4 position.
@ k_ra8_reset_rstsar_nonsec2_pos
NONSEC2 position.
@ k_ra8_reset_rstsar_nonsec0_pos
NONSEC0 position.
@ k_ra8_reset_rstsar_nonsec3_pos
NONSEC3 position.
ra8_reset_offset_t
Offset (within SYSC) of every register the reset driver touches.
@ k_ra8_reset_off_prcr
PRCR (16-bit) write-protect.
@ k_ra8_reset_off_rstsr2
RSTSR2 (8-bit).
@ k_ra8_reset_off_syrstmsk0
SYRSTMSK0 (8-bit).
@ k_ra8_reset_off_syrstmsk2
SYRSTMSK2 (8-bit).
@ k_ra8_reset_off_rstsr1
RSTSR1 (32-bit).
@ k_ra8_reset_off_syrstmsk1
SYRSTMSK1 (8-bit).
@ k_ra8_reset_off_rstsr0
RSTSR0 (8-bit).
@ k_ra8_reset_off_temprlr
TEMPRLR (8-bit).
@ k_ra8_reset_off_temprcr
TEMPRCR (8-bit).
@ k_ra8_reset_off_rstsar
RSTSAR (32-bit).
@ k_ra8_reset_off_rstsr3
RSTSR3 (8-bit).
static volatile uint8_t * ra8_reset_temprlr(void)
Pointer to the 8-bit TEMPRLR register.
ra8_reset_addr_t
Memory-mapped base addresses used by the reset driver.
@ k_ra8_reset_scb_aircr_addr
Cortex-M85 SCB AIRCR (software reset).
@ k_ra8_reset_sysc_base_addr
R_SYSTEM (SYSC) base.
static volatile uint8_t * ra8_reset_rstsr2(void)
Pointer to the 8-bit RSTSR2 register.
ra8_rstsr3_bits_t
RSTSR3 bit positions / masks (per HUM Ch 6.2.5 p 261-262).
@ k_ra8_reset_rstsr3_temprf_msk
TEMPRF mask.
@ k_ra8_reset_rstsr3_cvmrf_msk
CVMRF mask.
@ k_ra8_reset_rstsr3_temprf_pos
TEMPRF: Temperature monitor.
@ k_ra8_reset_rstsr3_cvmrf_pos
CVMRF: Core voltage monitor.
@ k_ra8_reset_rstsr3_ocprf_msk
OCPRF mask.
@ k_ra8_reset_rstsr3_ocprf_pos
OCPRF: Overcurrent protection.
ra8_rstsr2_bits_t
RSTSR2 bit positions / masks (per HUM Ch 6.2.4 p 261).
@ k_ra8_reset_rstsr2_cwsf_pos
CWSF: 0 = cold start, 1 = warm start.
@ k_ra8_reset_rstsr2_cwsf_msk
CWSF mask.
static volatile uint32_t * ra8_reset_aircr(void)
Pointer to the Cortex-M85 SCB AIRCR register.
static volatile uint32_t * ra8_reset_rstsar(void)
Pointer to the 32-bit RSTSAR (security attribution) register.
ra8_reset_syrstmsk0_bits_t
SYRSTMSK0 mask bits (1 = reset disabled).
@ k_ra8_reset_syrstmsk0_lm0_msk
LM0MASK: local-memory-0 error.
@ k_ra8_reset_syrstmsk0_wdt0_msk
WDT0MASK: CPU0 WDT reset.
@ k_ra8_reset_syrstmsk0_cm_msk
CMMASK: common-memory error.
@ k_ra8_reset_syrstmsk0_clu0_msk
CLU0MASK: CPU0 lockup reset.
@ k_ra8_reset_syrstmsk0_iwdt_msk
IWDTMASK: independent WDT reset.
@ k_ra8_reset_syrstmsk0_bus_msk
BUSMASK: bus error reset.
@ k_ra8_reset_syrstmsk0_sw_msk
SWMASK: software reset.
static volatile uint8_t * ra8_reset_syrstmsk2(void)
Pointer to the 8-bit SYRSTMSK2 register.
static volatile uint8_t * ra8_reset_rstsr0(void)
Pointer to the 8-bit RSTSR0 register.
static volatile uint16_t * ra8_reset_prcr(void)
Pointer to the 16-bit PRCR write-protect register.
static volatile uint8_t * ra8_reset_syrstmsk1(void)
Pointer to the 8-bit SYRSTMSK1 register.
ra8_reset_syrstmsk1_bits_t
SYRSTMSK1 mask bits (1 = reset disabled).
@ k_ra8_reset_syrstmsk1_clu1_msk
CLU1MASK: CPU1 lockup reset.
@ k_ra8_reset_syrstmsk1_wdt1_msk
WDT1MASK: CPU1 WDT reset.
@ k_ra8_reset_syrstmsk1_lm1_msk
LM1MASK: local-memory-1 error.
ra8_reset_aircr_t
AIRCR fields touched when triggering a software reset.
@ k_ra8_reset_aircr_sysresetreq_pos
SYSRESETREQ bit pos.
@ k_ra8_reset_aircr_vectkey_value
Mandatory write key.
@ k_ra8_reset_aircr_sysresetreq_msk
SYSRESETREQ mask.
@ k_ra8_reset_aircr_vectkey_pos
VECTKEY field position.
ra8_reset_temprlr_bits_t
TEMPRLR (Temperature Monitor Reset Lock) bits.
@ k_ra8_reset_temprlr_lock_msk
LOCK: 1 = TEMPRCR locked (reset value).
ra8_reset_prcr_bits_t
PRCR (Protect Register) password + PRC5 enable bit.
@ k_ra8_reset_prcr_key
Mandatory 0xA5 password, upper byte.
@ k_ra8_reset_prcr_pr_bits_msk
Writable PR0..PR7 enable bits (low byte).
@ k_ra8_reset_prcr_prc5_msk
PRC5: reset-control register group.
ra8_rstsr0_bits_t
RSTSR0 bit positions / masks.
@ k_ra8_reset_rstsr0_lvd1rf_pos
LVD1RF: Voltage Monitor 1.
@ k_ra8_reset_rstsr0_lvd2rf_pos
LVD2RF: Voltage Monitor 2.
@ k_ra8_reset_rstsr0_porf_msk
PORF mask.
@ k_ra8_reset_rstsr0_lvd0rf_msk
LVD0RF mask.
@ k_ra8_reset_rstsr0_lvd5rf_pos
LVD5RF: Voltage Monitor 5.
@ k_ra8_reset_rstsr0_lvd0rf_pos
LVD0RF: Voltage Monitor 0.
@ k_ra8_reset_rstsr0_dpsrstf_msk
DPSRSTF mask.
@ k_ra8_reset_rstsr0_lvd5rf_msk
LVD5RF mask.
@ k_ra8_reset_rstsr0_lvd2rf_msk
LVD2RF mask.
@ k_ra8_reset_rstsr0_lvd1rf_msk
LVD1RF mask.
@ k_ra8_reset_rstsr0_lvd4rf_msk
LVD4RF mask.
@ k_ra8_reset_rstsr0_porf_pos
PORF: Power-On Reset.
@ k_ra8_reset_rstsr0_dpsrstf_pos
DPSRSTF: Deep SW Standby.
@ k_ra8_reset_rstsr0_lvd4rf_pos
LVD4RF: Voltage Monitor 4.
static volatile uint32_t * ra8_reset_rstsr1(void)
Pointer to the 32-bit RSTSR1 register.
ra8_rstsr1_bits_t
RSTSR1 bit positions and masks.
@ k_ra8_reset_rstsr1_cmrf_pos
CMRF.
@ k_ra8_reset_rstsr1_swrf_msk
SWRF mask.
@ k_ra8_reset_rstsr1_nwrf_msk
NWRF mask.
@ k_ra8_reset_rstsr1_nwrf_pos
NWRF (Network).
@ k_ra8_reset_rstsr1_lm0rf_msk
LM0RF mask.
@ k_ra8_reset_rstsr1_swrf_pos
SWRF.
@ k_ra8_reset_rstsr1_lm0rf_pos
LM0RF.
@ k_ra8_reset_rstsr1_iwdtrf_pos
IWDTRF.
@ k_ra8_reset_rstsr1_bussrf_pos
BUSSRF.
@ k_ra8_reset_rstsr1_iwdtrf_msk
IWDTRF mask.
@ k_ra8_reset_rstsr1_wdtrf_pos
WDTRF (CPU0).
@ k_ra8_reset_rstsr1_lm1rf_msk
LM1RF mask.
@ k_ra8_reset_rstsr1_cmrf_msk
CMRF mask.
@ k_ra8_reset_rstsr1_clurf_msk
CLURF mask.
@ k_ra8_reset_rstsr1_clurf_pos
CLURF (CPU0).
@ k_ra8_reset_rstsr1_wdt1rf_msk
WDT1RF mask.
@ k_ra8_reset_rstsr1_wdtrf_msk
WDTRF mask.
@ k_ra8_reset_rstsr1_wdt1rf_pos
WDT1RF (CPU1).
@ k_ra8_reset_rstsr1_bussrf_msk
BUSSRF mask.
@ k_ra8_reset_rstsr1_lm1rf_pos
LM1RF.
@ k_ra8_reset_rstsr1_clu1rf_msk
CLU1RF mask.
@ k_ra8_reset_rstsr1_clu1rf_pos
CLU1RF (CPU1).
ra8_reset_temprcr_bits_t
TEMPRCR (Temperature Monitor Reset Control) bits.
@ k_ra8_reset_temprcr_tempren_msk
TEMPREN: temperature reset enable.
@ k_ra8_reset_temprcr_tsnkeep_msk
TSNKEEP: 1 = close sensor latch.
@ k_ra8_reset_temprcr_tsnen_msk
TSNEN: temperature sensor enable.
@ k_ra8_reset_temprcr_cmpen_msk
CMPEN: comparator enable.
static volatile uint8_t * ra8_reset_rstsr3(void)
Pointer to the 8-bit RSTSR3 register.
static volatile uint8_t * ra8_reset_temprcr(void)
Pointer to the 8-bit TEMPRCR register.
ra8_reset_syrstmsk2_bits_t
SYRSTMSK2 mask bits (1 = reset disabled).
@ k_ra8_reset_syrstmsk2_pvd1_msk
PVD1MASK: voltage-monitor-1 reset.
@ k_ra8_reset_syrstmsk2_pvd2_msk
PVD2MASK: voltage-monitor-2 reset.