ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_mstp_regs.h
Go to the documentation of this file.
1
52
53#pragma once
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59#include <stddef.h>
60#include <stdint.h>
61
62/* =============================================================================
63 * Base / layout
64 * =============================================================================
65 */
66
67typedef enum : uintptr_t {
68#ifdef RA8_PERIPH_NS_ALIAS
69 /* TrustZone Non-secure build (#96): reach MSTPCRA..E through the IDAU
70 * bit[28]=1 Non-secure alias (+0x1000_0000). Per-bit module-stop security
71 * follows the peripheral's PSAR attribution, so once the Secure side marks
72 * USBFS0 Non-secure (PSARB11) the NS image may clear MSTPCRB.MSTPB11 here;
73 * Secure-owned bits in the same word are write-ignored from NS. */
74 k_ra8_mstp_base_addr = 0x50203000UL,
75#else
76 k_ra8_mstp_base_addr = 0x40203000UL,
77#endif
79
87typedef struct {
88 volatile uint32_t MSTPCRA;
89 volatile uint32_t MSTPCRB;
90 volatile uint32_t MSTPCRC;
91 volatile uint32_t MSTPCRD;
92 volatile uint32_t MSTPCRE;
94
96typedef enum : uint8_t {
99
100static_assert(sizeof(r_mstp_regs_t) == (size_t)k_ra8_mstp_block_bytes,
101 "R_MSTP struct must be 20 bytes");
102
104static inline volatile r_mstp_regs_t* ra8_mstp(void)
105{
106 return (volatile r_mstp_regs_t*)k_ra8_mstp_base_addr;
107}
108
109/* =============================================================================
110 * Packed (register, bit) identifier
111 * =============================================================================
112 */
113
125
140typedef enum : uint16_t {
141 /* ---- MSTPCRA -- HUM 11.2.6 p 443 -- DMA, SRAM ----------------- */
143 k_ra8_mstp_sram1 = (uint16_t)((k_ra8_mstp_reg_a << 8) | 1U),
144 k_ra8_mstp_sram2 = (uint16_t)((k_ra8_mstp_reg_a << 8) | 2U),
145 k_ra8_mstp_sram3 = (uint16_t)((k_ra8_mstp_reg_a << 8) | 3U),
147 (uint16_t)((k_ra8_mstp_reg_a << 8) | 22U),
149 (uint16_t)((k_ra8_mstp_reg_a << 8) | 23U),
150
151 /* ---- MSTPCRB -- HUM 11.2.7 p 444..445 -- comms ---------------- */
152 k_ra8_mstp_i3c = (uint16_t)((k_ra8_mstp_reg_b << 8) | 4U),
153 k_ra8_mstp_iic2 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 7U),
154 k_ra8_mstp_iic1 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 8U),
155 k_ra8_mstp_iic0 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 9U),
156 k_ra8_mstp_usbfs = (uint16_t)((k_ra8_mstp_reg_b << 8) | 11U),
157 k_ra8_mstp_usbhs = (uint16_t)((k_ra8_mstp_reg_b << 8) | 12U),
158 k_ra8_mstp_ospi0 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 16U),
159 k_ra8_mstp_ospi1 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 17U),
160 k_ra8_mstp_spi1 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 18U),
161 k_ra8_mstp_spi0 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 19U),
162 k_ra8_mstp_sci9 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 22U),
163 k_ra8_mstp_sci8 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 23U),
164 k_ra8_mstp_sci7 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 24U),
165 k_ra8_mstp_sci6 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 25U),
166 k_ra8_mstp_sci5 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 26U),
167 k_ra8_mstp_sci4 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 27U),
168 k_ra8_mstp_sci3 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 28U),
169 k_ra8_mstp_sci2 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 29U),
170 k_ra8_mstp_sci1 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 30U),
171 k_ra8_mstp_sci0 = (uint16_t)((k_ra8_mstp_reg_b << 8) | 31U),
172
173 /* ---- MSTPCRC -- HUM 11.2.8 p 446..447 -- video, security ----- */
174 k_ra8_mstp_cac = (uint16_t)(k_ra8_mstp_reg_c << 8),
175 k_ra8_mstp_crc = (uint16_t)((k_ra8_mstp_reg_c << 8) | 1U),
176 k_ra8_mstp_glcdc = (uint16_t)((k_ra8_mstp_reg_c << 8) | 4U),
177 k_ra8_mstp_drw = (uint16_t)((k_ra8_mstp_reg_c << 8) | 6U),
178 k_ra8_mstp_ssie1 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 7U),
179 k_ra8_mstp_ssie0 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 8U),
180 k_ra8_mstp_mipi_dsi = (uint16_t)((k_ra8_mstp_reg_c << 8) | 10U),
181 k_ra8_mstp_sdhi1 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 11U),
182 k_ra8_mstp_sdhi0 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 12U),
183 k_ra8_mstp_doc = (uint16_t)((k_ra8_mstp_reg_c << 8) | 13U),
184 k_ra8_mstp_elc = (uint16_t)((k_ra8_mstp_reg_c << 8) | 14U),
185 k_ra8_mstp_ceu = (uint16_t)((k_ra8_mstp_reg_c << 8) | 16U),
186 k_ra8_mstp_mipi_csi = (uint16_t)((k_ra8_mstp_reg_c << 8) | 17U),
187 k_ra8_mstp_pdmif = (uint16_t)((k_ra8_mstp_reg_c << 8) | 24U),
188 k_ra8_mstp_canfd1 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 26U),
189 k_ra8_mstp_canfd0 = (uint16_t)((k_ra8_mstp_reg_c << 8) | 27U),
190 k_ra8_mstp_ethphyclk = (uint16_t)((k_ra8_mstp_reg_c << 8) | 28U),
191 k_ra8_mstp_eswm = (uint16_t)((k_ra8_mstp_reg_c << 8) | 30U),
192 k_ra8_mstp_rsip = (uint16_t)((k_ra8_mstp_reg_c << 8) | 31U),
193
194 /* ---- MSTPCRD -- HUM 11.2.9 p 448..449 -- timers, analog ------ */
195 k_ra8_mstp_agt1 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 4U),
196 k_ra8_mstp_agt0 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 5U),
197 k_ra8_mstp_pdg = (uint16_t)((k_ra8_mstp_reg_d << 8) | 6U),
198 k_ra8_mstp_poeg_d = (uint16_t)((k_ra8_mstp_reg_d << 8) | 11U),
199 k_ra8_mstp_poeg_c = (uint16_t)((k_ra8_mstp_reg_d << 8) | 12U),
200 k_ra8_mstp_poeg_b = (uint16_t)((k_ra8_mstp_reg_d << 8) | 13U),
201 k_ra8_mstp_poeg_a = (uint16_t)((k_ra8_mstp_reg_d << 8) | 14U),
202 k_ra8_mstp_dac12_1 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 19U),
203 k_ra8_mstp_dac12_0 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 20U),
204 k_ra8_mstp_adc16h = (uint16_t)((k_ra8_mstp_reg_d << 8) | 21U),
205 k_ra8_mstp_tsn = (uint16_t)((k_ra8_mstp_reg_d << 8) | 22U),
206 k_ra8_mstp_acmphs3 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 25U),
207 k_ra8_mstp_acmphs2 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 26U),
208 k_ra8_mstp_acmphs1 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 27U),
209 k_ra8_mstp_acmphs0 = (uint16_t)((k_ra8_mstp_reg_d << 8) | 28U),
210
211 /* ---- MSTPCRE -- HUM 11.2.10 p 449..450 -- ULPT, GPT ---------- */
212 k_ra8_mstp_ulpt1 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 8U),
213 k_ra8_mstp_ulpt0 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 9U),
214 k_ra8_mstp_gpt13 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 18U),
215 k_ra8_mstp_gpt12 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 19U),
216 k_ra8_mstp_gpt11 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 20U),
217 k_ra8_mstp_gpt10 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 21U),
218 k_ra8_mstp_gpt4_9 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 27U),
219 k_ra8_mstp_gpt3 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 28U),
220 k_ra8_mstp_gpt2 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 29U),
221 k_ra8_mstp_gpt1 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 30U),
222 k_ra8_mstp_gpt0 = (uint16_t)((k_ra8_mstp_reg_e << 8) | 31U),
223} ra8_mstp_t;
224
245
263uint8_t ra8_mstp_id_bit(ra8_mstp_t id);
264
265#ifdef __cplusplus
266}
267#endif
ra8_mstp_addr_t
@ k_ra8_mstp_base_addr
R_MSTP block base.
uint8_t ra8_mstp_id_bit(ra8_mstp_t id)
Extract the bit number from a packed MSTP id.
Definition ra8_mstp.c:139
static volatile r_mstp_regs_t * ra8_mstp(void)
Get pointer to the MSTP register block.
ra8_mstp_reg_t ra8_mstp_id_reg(ra8_mstp_t id)
Extract the register index from a packed MSTP id.
Definition ra8_mstp.c:134
ra8_mstp_block_size_t
Expected byte size of the MSTP register block.
@ k_ra8_mstp_block_bytes
5 x uint32_t = 20 bytes.
ra8_mstp_t
Packed (reg << 8) | bit module-stop identifier.
@ k_ra8_mstp_mipi_dsi
MSTPC10 MIPI DSI.
@ k_ra8_mstp_sci2
MSTPB29 SCI2.
@ k_ra8_mstp_sci4
MSTPB27 SCI4.
@ k_ra8_mstp_agt0
MSTPD5 AGT0.
@ k_ra8_mstp_gpt2
MSTPE29 GPT2.
@ k_ra8_mstp_sci7
MSTPB24 SCI7.
@ k_ra8_mstp_ulpt1
MSTPE8 ULPT1.
@ k_ra8_mstp_agt1
MSTPD4 AGT1.
@ k_ra8_mstp_ssie1
MSTPC7 SSIE1.
@ k_ra8_mstp_crc
MSTPC1 CRC.
@ k_ra8_mstp_pdmif
MSTPC24 PDM-IF.
@ k_ra8_mstp_gpt11
MSTPE20 GPT11.
@ k_ra8_mstp_dmac0_dtc0
MSTPA22 DMAC0+DTC0 (shared).
@ k_ra8_mstp_iic2
MSTPB7 IIC2.
@ k_ra8_mstp_sci9
MSTPB22 SCI9.
@ k_ra8_mstp_sram2
MSTPA2 SRAM2.
@ k_ra8_mstp_sci0
MSTPB31 SCI0.
@ k_ra8_mstp_gpt3
MSTPE28 GPT3.
@ k_ra8_mstp_ospi0
MSTPB16 OSPI0+DOTF0.
@ k_ra8_mstp_eswm
MSTPC30 ESWM.
@ k_ra8_mstp_iic0
MSTPB9 IIC0.
@ k_ra8_mstp_sci5
MSTPB26 SCI5.
@ k_ra8_mstp_adc16h
MSTPD21 ADC16H.
@ k_ra8_mstp_acmphs0
MSTPD28 ACMPHS0.
@ k_ra8_mstp_iic1
MSTPB8 IIC1.
@ k_ra8_mstp_gpt10
MSTPE21 GPT10.
@ k_ra8_mstp_ulpt0
MSTPE9 ULPT0.
@ k_ra8_mstp_cac
MSTPC0 CAC.
@ k_ra8_mstp_sram0
MSTPA0 SRAM0.
@ k_ra8_mstp_acmphs3
MSTPD25 ACMPHS3.
@ k_ra8_mstp_drw
MSTPC6 2D Drawing.
@ k_ra8_mstp_sdhi1
MSTPC11 SDHI1.
@ k_ra8_mstp_ssie0
MSTPC8 SSIE0.
@ k_ra8_mstp_spi0
MSTPB19 SPI0.
@ k_ra8_mstp_sram3
MSTPA3 SRAM3.
@ k_ra8_mstp_acmphs2
MSTPD26 ACMPHS2.
@ k_ra8_mstp_sci1
MSTPB30 SCI1.
@ k_ra8_mstp_rsip
MSTPC31 RSIP-E50D.
@ k_ra8_mstp_acmphs1
MSTPD27 ACMPHS1.
@ k_ra8_mstp_ceu
MSTPC16 CEU.
@ k_ra8_mstp_glcdc
MSTPC4 GLCDC.
@ k_ra8_mstp_ospi1
MSTPB17 OSPI1+DOTF1.
@ k_ra8_mstp_sdhi0
MSTPC12 SDHI0.
@ k_ra8_mstp_sci6
MSTPB25 SCI6.
@ k_ra8_mstp_poeg_c
MSTPD12 POEG group C.
@ k_ra8_mstp_dac12_0
MSTPD20 DAC12 ch 0.
@ k_ra8_mstp_canfd1
MSTPC26 CANFD1.
@ k_ra8_mstp_gpt4_9
MSTPE27 GPT4..GPT9.
@ k_ra8_mstp_gpt1
MSTPE30 GPT1.
@ k_ra8_mstp_poeg_a
MSTPD14 POEG group A.
@ k_ra8_mstp_tsn
MSTPD22 Temperature.
@ k_ra8_mstp_poeg_d
MSTPD11 POEG group D.
@ k_ra8_mstp_gpt13
MSTPE18 GPT13.
@ k_ra8_mstp_dac12_1
MSTPD19 DAC12 ch 1.
@ k_ra8_mstp_dmac1_dtc1
MSTPA23 DMAC1+DTC1 (shared).
@ k_ra8_mstp_canfd0
MSTPC27 CANFD0.
@ k_ra8_mstp_spi1
MSTPB18 SPI1.
@ k_ra8_mstp_mipi_csi
MSTPC17 MIPI CSI.
@ k_ra8_mstp_usbfs
MSTPB11 USBFS0.
@ k_ra8_mstp_sram1
MSTPA1 SRAM1.
@ k_ra8_mstp_gpt0
MSTPE31 GPT0.
@ k_ra8_mstp_doc
MSTPC13 DOC.
@ k_ra8_mstp_i3c
MSTPB4 I3C.
@ k_ra8_mstp_sci8
MSTPB23 SCI8.
@ k_ra8_mstp_gpt12
MSTPE19 GPT12.
@ k_ra8_mstp_usbhs
MSTPB12 USBHS.
@ k_ra8_mstp_pdg
MSTPD6 PDG.
@ k_ra8_mstp_poeg_b
MSTPD13 POEG group B.
@ k_ra8_mstp_ethphyclk
MSTPC28 Ether-PHY clock.
@ k_ra8_mstp_sci3
MSTPB28 SCI3.
@ k_ra8_mstp_elc
MSTPC14 ELC.
ra8_mstp_reg_t
Which of MSTPCRA..MSTPCRE owns the bit.
@ k_ra8_mstp_reg_d
RA8 mstp register d.
@ k_ra8_mstp_reg_b
RA8 mstp register b.
@ k_ra8_mstp_reg_e
RA8 mstp register e.
@ k_ra8_mstp_reg_a
RA8 mstp register a.
@ k_ra8_mstp_reg_c
RA8 mstp register c.
Memory layout of the Module Stop Control Register block.
volatile uint32_t MSTPCRB
Module Stop Control Register B (+0x04).
volatile uint32_t MSTPCRC
Module Stop Control Register C (+0x08).
volatile uint32_t MSTPCRD
Module Stop Control Register D (+0x0C).
volatile uint32_t MSTPCRE
Module Stop Control Register E (+0x10).
volatile uint32_t MSTPCRA
Module Stop Control Register A (+0x00).