ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_wdt_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
57typedef enum : uintptr_t {
58 /* HUM Ch 27.1 + FSP R7KA8D2KF_core0.h R_WDT_BASE = 0x40202600,
59 * R_WDT1_BASE = 0x40202700. The two instances are 0x100 apart,
60 * NOT 0x10000 as an earlier version of this header claimed. */
61 k_ra8_wdt_base_addr = 0x40202600UL,
62 k_ra8_wdt0_base_addr = 0x40202600UL,
63 k_ra8_wdt1_base_addr = 0x40202700UL,
65
75typedef enum : uint8_t {
79
91typedef enum : uint8_t {
96
122
133typedef enum : uint16_t {
138
147typedef enum : uint8_t {
150
159typedef enum : uint8_t {
162
176
193
204typedef enum : uint32_t {
207
253
254static_assert(k_ra8_wdt_ofs_field_mask ==
262 "k_ra8_wdt_ofs_field_mask must equal the union of the seven WDT fields");
263
276typedef struct {
277 /* HUM Ch 27.2 "Register Descriptions" p 1256 */ /* + FSP R_WDT_Type */
278 volatile uint8_t WDTRR;
279 volatile uint8_t _r0;
280 volatile uint16_t WDTCR;
281 volatile uint16_t WDTSR;
282 volatile uint8_t WDTRCR;
283 volatile uint8_t _r1;
284 volatile uint8_t WDTCSTPR;
285 volatile uint8_t _r2;
286 volatile uint16_t _r3;
288
301static inline volatile r_wdt_regs_t* ra8_wdt(void)
302{
303 /* HUM Ch 27.1 "Overview" p 1256 */
304 return (volatile r_wdt_regs_t*)k_ra8_wdt_base_addr;
305}
306
320static inline volatile r_wdt_regs_t* ra8_wdt_for(ra8_wdt_instance_t which)
321{
322 /* HUM Ch 27.1 "Overview" p 1256 */
323 switch (which) {
324 case k_ra8_wdt0:
325 return (volatile r_wdt_regs_t*)k_ra8_wdt0_base_addr;
326 case k_ra8_wdt1:
327 return (volatile r_wdt_regs_t*)k_ra8_wdt1_base_addr;
329 default:
330 return (volatile r_wdt_regs_t*)k_ra8_wdt0_base_addr;
331 }
332}
333
352static inline void ra8_wdt_refresh(void)
353{
354 /* HUM Ch 27.2.1 "WDTRR : WDT Refresh Register", p 1257 */
355 volatile r_wdt_regs_t* w = ra8_wdt();
358}
359
378{
379 /* HUM Ch 27.2.1 "WDTRR : WDT Refresh Register", p 1257 */
380 volatile r_wdt_regs_t* w = ra8_wdt_for(which);
383}
384
385#ifdef __cplusplus
386}
387#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
static void ra8_wdt_refresh(void)
Refresh the WDT0 instance using the two-byte unlock sequence.
static void ra8_wdt_refresh_instance(ra8_wdt_instance_t which)
Refresh a specific WDT instance.
static volatile r_wdt_regs_t * ra8_wdt_for(ra8_wdt_instance_t which)
Get pointer to a specific WDT instance.
ra8_wdt_cycles_t
TOPS-field decoded cycle counts.
@ k_ra8_wdt_cycles_1024
TOPS = 0b00.
@ k_ra8_wdt_cycles_8192
TOPS = 0b10.
@ k_ra8_wdt_cycles_16384
TOPS = 0b11.
@ k_ra8_wdt_cycles_4096
TOPS = 0b01.
ra8_wdt_wdtsr_layout_t
Bit definitions of the WDTSR (status) register.
@ k_ra8_wdt_sr_cnt_mask
CNTVAL[13:0] mask.
@ k_ra8_wdt_sr_refef
REFEF bit 15.
@ k_ra8_wdt_sr_undff
UNDFF bit 14.
ra8_wdt_ofs_layout_t
Bit positions and field widths of the WDT view of OFSm.
@ k_ra8_wdt_ofs_mask_rpss
2-bit field.
@ k_ra8_wdt_ofs_shift_rstirqs
OFSm.WDTRSTIRQS shift.
@ k_ra8_wdt_ofs_shift_tops
OFSm.WDTTOPS shift.
@ k_ra8_wdt_ofs_shift_rpss
OFSm.WDTRPSS shift.
@ k_ra8_wdt_ofs_mask_stpctl
1-bit field.
@ k_ra8_wdt_ofs_mask_tops
2-bit field.
@ k_ra8_wdt_ofs_shift_rpes
OFSm.WDTRPES shift.
@ k_ra8_wdt_ofs_shift_strt
OFSm.WDTSTRT shift.
@ k_ra8_wdt_ofs_shift_stpctl
OFSm.WDTSTPCTL shift.
@ k_ra8_wdt_ofs_mask_strt
1-bit field.
@ k_ra8_wdt_ofs_mask_rpes
2-bit field.
@ k_ra8_wdt_ofs_shift_cks
OFSm.WDTCKS shift.
@ k_ra8_wdt_ofs_mask_cks
4-bit field.
@ k_ra8_wdt_ofs_mask_rstirqs
1-bit field.
@ k_ra8_wdt_ofs_field_mask
Union of all seven fields.
ra8_wdt_nmier_layout_t
WDT-relevant bit in the ICU's NMIER register.
@ k_ra8_wdt_nmier_wdten_mask
NMIER.WDTEN = bit 1.
ra8_wdt_instance_t
Hardware instance selector used by per-instance helpers.
@ k_ra8_wdt1
WDT1 – Cortex-M33 side.
@ k_ra8_wdt0
WDT0 – Cortex-M85 side.
@ k_ra8_wdt_instance_count
Number of WDT instances on RA8D2.
static volatile r_wdt_regs_t * ra8_wdt(void)
Get pointer to WDT0 (the default / M85-side instance).
ra8_wdt_wdtrcr_layout_t
Bit definitions of the WDTRCR (reset control) register.
@ k_ra8_wdt_rcr_rstirqs
RSTIRQS = bit 7 (1 = reset, 0 = NMI / IRQ).
ra8_wdt_refresh_t
Two-byte unlock pattern written to WDTRR to refresh.
@ k_ra8_wdt_refresh_a
First byte of the refresh sequence.
@ k_ra8_wdt_refresh_b
Second byte of the refresh sequence.
ra8_wdt_div_value_t
CKS-field decoded numeric divisors.
@ k_ra8_wdt_div_value_128
RA8 wdt div value 128.
@ k_ra8_wdt_div_value_2048
RA8 wdt div value 2048.
@ k_ra8_wdt_div_value_8192
RA8 wdt div value 8192.
@ k_ra8_wdt_div_value_4
RA8 wdt div value 4.
@ k_ra8_wdt_div_value_64
RA8 wdt div value 64.
@ k_ra8_wdt_div_value_512
RA8 wdt div value 512.
ra8_wdt_wdtcr_layout_t
Bit-field layout of the WDTCR (control) register.
@ k_ra8_wdt_mask_rpss
RPSS field width (2 bits).
@ k_ra8_wdt_shift_cks
CKS occupies bits 7:4.
@ k_ra8_wdt_mask_tops
TOPS field width (2 bits).
@ k_ra8_wdt_shift_rpss
RPSS occupies bits 13:12.
@ k_ra8_wdt_shift_rpes
RPES occupies bits 9:8.
@ k_ra8_wdt_mask_rpes
RPES field width (2 bits).
@ k_ra8_wdt_shift_tops
TOPS occupies bits 1:0.
@ k_ra8_wdt_mask_cks
CKS field width (4 bits).
ra8_wdt_wdtcstpr_layout_t
Bit definitions of the WDTCSTPR (count stop control) register.
@ k_ra8_wdt_cstpr_slcstp
SLCSTP = bit 7 (1 = halt counter in Sleep).
ra8_wdt_addr_t
Base addresses of the WDT instances on RA8D2.
@ k_ra8_wdt0_base_addr
Alias for WDT0.
@ k_ra8_wdt_base_addr
WDT0 base (M85 side).
@ k_ra8_wdt1_base_addr
WDT1 base (M33 side).
Memory-mapped layout of one WDT instance.
volatile uint16_t WDTCR
+0x02 Control register.
volatile uint16_t _r3
+0x0A Reserved (pads to 0x0C).
volatile uint8_t _r1
+0x07 Reserved.
volatile uint8_t WDTCSTPR
+0x08 Count-stop control.
volatile uint8_t _r2
+0x09 Reserved.
volatile uint16_t WDTSR
+0x04 Status register.
volatile uint8_t WDTRCR
+0x06 Reset control register.
volatile uint8_t WDTRR
+0x00 Refresh register.
volatile uint8_t _r0
+0x01 Reserved.