// THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT

/**
 * Copyright (c) 2024 Raspberry Pi Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
#ifndef _HARDWARE_STRUCTS_M33_H
#define _HARDWARE_STRUCTS_M33_H

/**
 * \file rp2350/m33.h
 */

#include "hardware/address_mapped.h"
#include "hardware/regs/m33.h"

// Reference to datasheet: https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf#tab-registerlist_m33
//
// The _REG_ macro is intended to help make the register navigable in your IDE (for example, using the "Go to Definition" feature)
// _REG_(x) will link to the corresponding register in hardware/regs/m33.h.
//
// Bit-field descriptions are of the form:
// BITMASK [BITRANGE] FIELDNAME (RESETVALUE) DESCRIPTION

#if defined(__riscv) && PICO_FORBID_ARM_HEADERS_ON_RISCV
#error "Arm header included in a RISC-V build with PICO_FORBID_ARM_HEADERS_ON_RISCV=1"
#endif

typedef struct {
    // (Description copied from array index 0 register M33_ITM_STIM0 applies similarly to other array indexes)
    _REG_(M33_ITM_STIM0_OFFSET) // M33_ITM_STIM0
    // ITM Stimulus Port Register 0
    // 0xffffffff [31:0]  STIMULUS     (0x00000000) Data to write to the Stimulus Port FIFO, for forwarding...
    io_rw_32 itm_stim[32];

    uint32_t _pad0[864];

    _REG_(M33_ITM_TER0_OFFSET) // M33_ITM_TER0
    // Provide an individual enable bit for each ITM_STIM register
    // 0xffffffff [31:0]  STIMENA      (0x00000000) For STIMENA[m] in ITM_TER*n, controls whether...
    io_rw_32 itm_ter0;

    uint32_t _pad1[15];

    _REG_(M33_ITM_TPR_OFFSET) // M33_ITM_TPR
    // Controls which stimulus ports can be accessed by unprivileged code
    // 0x0000000f [3:0]   PRIVMASK     (0x0) Bit mask to enable tracing on ITM stimulus ports
    io_rw_32 itm_tpr;

    uint32_t _pad2[15];

    _REG_(M33_ITM_TCR_OFFSET) // M33_ITM_TCR
    // Configures and controls transfers through the ITM interface
    // 0x00800000 [23]    BUSY         (0) Indicates whether the ITM is currently processing events
    // 0x007f0000 [22:16] TRACEBUSID   (0x00) Identifier for multi-source trace stream formatting
    // 0x00000c00 [11:10] GTSFREQ      (0x0) Defines how often the ITM generates a global timestamp,...
    // 0x00000300 [9:8]   TSPRESCALE   (0x0) Local timestamp prescaler, used with the trace packet...
    // 0x00000020 [5]     STALLENA     (0) Stall the PE to guarantee delivery of Data Trace packets
    // 0x00000010 [4]     SWOENA       (0) Enables asynchronous clocking of the timestamp counter
    // 0x00000008 [3]     TXENA        (0) Enables forwarding of hardware event packet from the DWT...
    // 0x00000004 [2]     SYNCENA      (0) Enables Synchronization packet transmission for a...
    // 0x00000002 [1]     TSENA        (0) Enables Local timestamp generation
    // 0x00000001 [0]     ITMENA       (0) Enables the ITM
    io_rw_32 itm_tcr;

    uint32_t _pad3[27];

    _REG_(M33_INT_ATREADY_OFFSET) // M33_INT_ATREADY
    // Integration Mode: Read ATB Ready
    // 0x00000002 [1]     AFVALID      (0) A read of this bit returns the value of AFVALID
    // 0x00000001 [0]     ATREADY      (0) A read of this bit returns the value of ATREADY
    io_ro_32 int_atready;

    uint32_t _pad4;

    _REG_(M33_INT_ATVALID_OFFSET) // M33_INT_ATVALID
    // Integration Mode: Write ATB Valid
    // 0x00000002 [1]     AFREADY      (0) A write to this bit gives the value of AFREADY
    // 0x00000001 [0]     ATREADY      (0) A write to this bit gives the value of ATVALID
    io_rw_32 int_atvalid;

    uint32_t _pad5;

    _REG_(M33_ITM_ITCTRL_OFFSET) // M33_ITM_ITCTRL
    // Integration Mode Control Register
    // 0x00000001 [0]     IME          (0) Integration mode enable bit - The possible values are: ...
    io_rw_32 itm_itctrl;

    uint32_t _pad6[46];

    _REG_(M33_ITM_DEVARCH_OFFSET) // M33_ITM_DEVARCH
    // Provides CoreSight discovery information for the ITM
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
    // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
    // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
    // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
    // 0x00000fff [11:0]  ARCHPART     (0xa01) Defines the architecture of the component
    io_ro_32 itm_devarch;

    uint32_t _pad7[3];

    _REG_(M33_ITM_DEVTYPE_OFFSET) // M33_ITM_DEVTYPE
    // Provides CoreSight discovery information for the ITM
    // 0x000000f0 [7:4]   SUB          (0x4) Component sub-type
    // 0x0000000f [3:0]   MAJOR        (0x3) Component major type
    io_ro_32 itm_devtype;

    _REG_(M33_ITM_PIDR4_OFFSET) // M33_ITM_PIDR4
    // Provides CoreSight discovery information for the ITM
    // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
    io_ro_32 itm_pidr4;

    uint32_t _pad8[3];

    _REG_(M33_ITM_PIDR0_OFFSET) // M33_ITM_PIDR0
    // Provides CoreSight discovery information for the ITM
    // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
    io_ro_32 itm_pidr0;

    _REG_(M33_ITM_PIDR1_OFFSET) // M33_ITM_PIDR1
    // Provides CoreSight discovery information for the ITM
    // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
    io_ro_32 itm_pidr1;

    _REG_(M33_ITM_PIDR2_OFFSET) // M33_ITM_PIDR2
    // Provides CoreSight discovery information for the ITM
    // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
    // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
    // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
    io_ro_32 itm_pidr2;

    _REG_(M33_ITM_PIDR3_OFFSET) // M33_ITM_PIDR3
    // Provides CoreSight discovery information for the ITM
    // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
    io_ro_32 itm_pidr3;

    // (Description copied from array index 0 register M33_ITM_CIDR0 applies similarly to other array indexes)
    _REG_(M33_ITM_CIDR0_OFFSET) // M33_ITM_CIDR0
    // Provides CoreSight discovery information for the ITM
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
    io_ro_32 itm_cidr[4];

    _REG_(M33_DWT_CTRL_OFFSET) // M33_DWT_CTRL
    // Provides configuration and status information for the DWT unit, and used to control features of the unit
    // 0xf0000000 [31:28] NUMCOMP      (0x7) Number of DWT comparators implemented
    // 0x08000000 [27]    NOTRCPKT     (0) Indicates whether the implementation does not support trace
    // 0x04000000 [26]    NOEXTTRIG    (0) Reserved, RAZ
    // 0x02000000 [25]    NOCYCCNT     (1) Indicates whether the implementation does not include a...
    // 0x01000000 [24]    NOPRFCNT     (1) Indicates whether the implementation does not include...
    // 0x00800000 [23]    CYCDISS      (0) Controls whether the cycle counter is disabled in Secure state
    // 0x00400000 [22]    CYCEVTENA    (1) Enables Event Counter packet generation on POSTCNT underflow
    // 0x00200000 [21]    FOLDEVTENA   (1) Enables DWT_FOLDCNT counter
    // 0x00100000 [20]    LSUEVTENA    (1) Enables DWT_LSUCNT counter
    // 0x00080000 [19]    SLEEPEVTENA  (0) Enable DWT_SLEEPCNT counter
    // 0x00040000 [18]    EXCEVTENA    (1) Enables DWT_EXCCNT counter
    // 0x00020000 [17]    CPIEVTENA    (0) Enables DWT_CPICNT counter
    // 0x00010000 [16]    EXTTRCENA    (0) Enables generation of Exception Trace packets
    // 0x00001000 [12]    PCSAMPLENA   (1) Enables use of POSTCNT counter as a timer for Periodic...
    // 0x00000c00 [11:10] SYNCTAP      (0x2) Selects the position of the synchronization packet...
    // 0x00000200 [9]     CYCTAP       (0) Selects the position of the POSTCNT tap on the CYCCNT counter
    // 0x000001e0 [8:5]   POSTINIT     (0x1) Initial value for the POSTCNT counter
    // 0x0000001e [4:1]   POSTPRESET   (0x2) Reload value for the POSTCNT counter
    // 0x00000001 [0]     CYCCNTENA    (0) Enables CYCCNT
    io_rw_32 dwt_ctrl;

    _REG_(M33_DWT_CYCCNT_OFFSET) // M33_DWT_CYCCNT
    // Shows or sets the value of the processor cycle counter, CYCCNT
    // 0xffffffff [31:0]  CYCCNT       (0x00000000) Increments one on each processor clock cycle when DWT_CTRL
    io_rw_32 dwt_cyccnt;

    uint32_t _pad9;

    _REG_(M33_DWT_EXCCNT_OFFSET) // M33_DWT_EXCCNT
    // Counts the total cycles spent in exception processing
    // 0x000000ff [7:0]   EXCCNT       (0x00) Counts one on each cycle when all of the following are...
    io_rw_32 dwt_exccnt;

    uint32_t _pad10;

    _REG_(M33_DWT_LSUCNT_OFFSET) // M33_DWT_LSUCNT
    // Increments on the additional cycles required to execute all load or store instructions
    // 0x000000ff [7:0]   LSUCNT       (0x00) Counts one on each cycle when all of the following are...
    io_rw_32 dwt_lsucnt;

    _REG_(M33_DWT_FOLDCNT_OFFSET) // M33_DWT_FOLDCNT
    // Increments on the additional cycles required to execute all load or store instructions
    // 0x000000ff [7:0]   FOLDCNT      (0x00) Counts on each cycle when all of the following are true:...
    io_rw_32 dwt_foldcnt;

    uint32_t _pad11;

    _REG_(M33_DWT_COMP0_OFFSET) // M33_DWT_COMP0
    // Provides a reference value for use by watchpoint comparator 0
    // 0xffffffff [31:0]  DWT_COMP0    (0x00000000)
    io_rw_32 dwt_comp0;

    uint32_t _pad12;

    _REG_(M33_DWT_FUNCTION0_OFFSET) // M33_DWT_FUNCTION0
    // Controls the operation of watchpoint comparator 0
    // 0xf8000000 [31:27] ID           (0x0b) Identifies the capabilities for MATCH for comparator *n
    // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
    // 0x00000c00 [11:10] DATAVSIZE    (0x0) Defines the size of the object being watched for by Data...
    // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
    // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
    io_rw_32 dwt_function0;

    uint32_t _pad13;

    _REG_(M33_DWT_COMP1_OFFSET) // M33_DWT_COMP1
    // Provides a reference value for use by watchpoint comparator 1
    // 0xffffffff [31:0]  DWT_COMP1    (0x00000000)
    io_rw_32 dwt_comp1;

    uint32_t _pad14;

    _REG_(M33_DWT_FUNCTION1_OFFSET) // M33_DWT_FUNCTION1
    // Controls the operation of watchpoint comparator 1
    // 0xf8000000 [31:27] ID           (0x11) Identifies the capabilities for MATCH for comparator *n
    // 0x01000000 [24]    MATCHED      (1) Set to 1 when the comparator matches
    // 0x00000c00 [11:10] DATAVSIZE    (0x2) Defines the size of the object being watched for by Data...
    // 0x00000030 [5:4]   ACTION       (0x2) Defines the action on a match
    // 0x0000000f [3:0]   MATCH        (0x8) Controls the type of match generated by this comparator
    io_rw_32 dwt_function1;

    uint32_t _pad15;

    _REG_(M33_DWT_COMP2_OFFSET) // M33_DWT_COMP2
    // Provides a reference value for use by watchpoint comparator 2
    // 0xffffffff [31:0]  DWT_COMP2    (0x00000000)
    io_rw_32 dwt_comp2;

    uint32_t _pad16;

    _REG_(M33_DWT_FUNCTION2_OFFSET) // M33_DWT_FUNCTION2
    // Controls the operation of watchpoint comparator 2
    // 0xf8000000 [31:27] ID           (0x0a) Identifies the capabilities for MATCH for comparator *n
    // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
    // 0x00000c00 [11:10] DATAVSIZE    (0x0) Defines the size of the object being watched for by Data...
    // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
    // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
    io_rw_32 dwt_function2;

    uint32_t _pad17;

    _REG_(M33_DWT_COMP3_OFFSET) // M33_DWT_COMP3
    // Provides a reference value for use by watchpoint comparator 3
    // 0xffffffff [31:0]  DWT_COMP3    (0x00000000)
    io_rw_32 dwt_comp3;

    uint32_t _pad18;

    _REG_(M33_DWT_FUNCTION3_OFFSET) // M33_DWT_FUNCTION3
    // Controls the operation of watchpoint comparator 3
    // 0xf8000000 [31:27] ID           (0x04) Identifies the capabilities for MATCH for comparator *n
    // 0x01000000 [24]    MATCHED      (0) Set to 1 when the comparator matches
    // 0x00000c00 [11:10] DATAVSIZE    (0x2) Defines the size of the object being watched for by Data...
    // 0x00000030 [5:4]   ACTION       (0x0) Defines the action on a match
    // 0x0000000f [3:0]   MATCH        (0x0) Controls the type of match generated by this comparator
    io_rw_32 dwt_function3;

    uint32_t _pad19[984];

    _REG_(M33_DWT_DEVARCH_OFFSET) // M33_DWT_DEVARCH
    // Provides CoreSight discovery information for the DWT
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
    // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
    // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
    // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
    // 0x00000fff [11:0]  ARCHPART     (0xa02) Defines the architecture of the component
    io_ro_32 dwt_devarch;

    uint32_t _pad20[3];

    _REG_(M33_DWT_DEVTYPE_OFFSET) // M33_DWT_DEVTYPE
    // Provides CoreSight discovery information for the DWT
    // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
    // 0x0000000f [3:0]   MAJOR        (0x0) Component major type
    io_ro_32 dwt_devtype;

    _REG_(M33_DWT_PIDR4_OFFSET) // M33_DWT_PIDR4
    // Provides CoreSight discovery information for the DWT
    // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
    io_ro_32 dwt_pidr4;

    uint32_t _pad21[3];

    _REG_(M33_DWT_PIDR0_OFFSET) // M33_DWT_PIDR0
    // Provides CoreSight discovery information for the DWT
    // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
    io_ro_32 dwt_pidr0;

    _REG_(M33_DWT_PIDR1_OFFSET) // M33_DWT_PIDR1
    // Provides CoreSight discovery information for the DWT
    // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
    io_ro_32 dwt_pidr1;

    _REG_(M33_DWT_PIDR2_OFFSET) // M33_DWT_PIDR2
    // Provides CoreSight discovery information for the DWT
    // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
    // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
    // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
    io_ro_32 dwt_pidr2;

    _REG_(M33_DWT_PIDR3_OFFSET) // M33_DWT_PIDR3
    // Provides CoreSight discovery information for the DWT
    // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
    io_ro_32 dwt_pidr3;

    // (Description copied from array index 0 register M33_DWT_CIDR0 applies similarly to other array indexes)
    _REG_(M33_DWT_CIDR0_OFFSET) // M33_DWT_CIDR0
    // Provides CoreSight discovery information for the DWT
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
    io_ro_32 dwt_cidr[4];

    _REG_(M33_FP_CTRL_OFFSET) // M33_FP_CTRL
    // Provides FPB implementation information, and the global enable for the FPB unit
    // 0xf0000000 [31:28] REV          (0x6) Flash Patch and Breakpoint Unit architecture revision
    // 0x00007000 [14:12] NUM_CODE_14_12_ (0x5) Indicates the number of implemented instruction address...
    // 0x00000f00 [11:8]  NUM_LIT      (0x5) Indicates the number of implemented literal address comparators
    // 0x000000f0 [7:4]   NUM_CODE_7_4_ (0x8) Indicates the number of implemented instruction address...
    // 0x00000002 [1]     KEY          (0) Writes to the FP_CTRL are ignored unless KEY is...
    // 0x00000001 [0]     ENABLE       (0) Enables the FPB
    io_rw_32 fp_ctrl;

    _REG_(M33_FP_REMAP_OFFSET) // M33_FP_REMAP
    // Indicates whether the implementation supports Flash Patch remap and, if it does, holds the...
    // 0x20000000 [29]    RMPSPT       (0) Indicates whether the FPB unit supports the Flash Patch...
    // 0x1fffffe0 [28:5]  REMAP        (0x000000) Holds the bits[28:5] of the Flash Patch remap address
    io_ro_32 fp_remap;

    // (Description copied from array index 0 register M33_FP_COMP0 applies similarly to other array indexes)
    _REG_(M33_FP_COMP0_OFFSET) // M33_FP_COMP0
    // Holds an address for comparison
    // 0x00000001 [0]     BE           (0) Selects between flashpatch and breakpoint functionality
    io_rw_32 fp_comp[8];

    uint32_t _pad22[997];

    _REG_(M33_FP_DEVARCH_OFFSET) // M33_FP_DEVARCH
    // Provides CoreSight discovery information for the FPB
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
    // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
    // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
    // 0x0000f000 [15:12] ARCHVER      (0x1) Defines the architecture version of the component
    // 0x00000fff [11:0]  ARCHPART     (0xa03) Defines the architecture of the component
    io_ro_32 fp_devarch;

    uint32_t _pad23[3];

    _REG_(M33_FP_DEVTYPE_OFFSET) // M33_FP_DEVTYPE
    // Provides CoreSight discovery information for the FPB
    // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
    // 0x0000000f [3:0]   MAJOR        (0x0) Component major type
    io_ro_32 fp_devtype;

    _REG_(M33_FP_PIDR4_OFFSET) // M33_FP_PIDR4
    // Provides CoreSight discovery information for the FP
    // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
    io_ro_32 fp_pidr4;

    uint32_t _pad24[3];

    _REG_(M33_FP_PIDR0_OFFSET) // M33_FP_PIDR0
    // Provides CoreSight discovery information for the FP
    // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
    io_ro_32 fp_pidr0;

    _REG_(M33_FP_PIDR1_OFFSET) // M33_FP_PIDR1
    // Provides CoreSight discovery information for the FP
    // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
    io_ro_32 fp_pidr1;

    _REG_(M33_FP_PIDR2_OFFSET) // M33_FP_PIDR2
    // Provides CoreSight discovery information for the FP
    // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
    // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
    // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
    io_ro_32 fp_pidr2;

    _REG_(M33_FP_PIDR3_OFFSET) // M33_FP_PIDR3
    // Provides CoreSight discovery information for the FP
    // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
    io_ro_32 fp_pidr3;

    // (Description copied from array index 0 register M33_FP_CIDR0 applies similarly to other array indexes)
    _REG_(M33_FP_CIDR0_OFFSET) // M33_FP_CIDR0
    // Provides CoreSight discovery information for the FP
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
    io_ro_32 fp_cidr[4];

    uint32_t _pad25[11265];

    _REG_(M33_ICTR_OFFSET) // M33_ICTR
    // Provides information about the interrupt controller
    // 0x0000000f [3:0]   INTLINESNUM  (0x1) Indicates the number of the highest implemented register...
    io_ro_32 ictr;

    _REG_(M33_ACTLR_OFFSET) // M33_ACTLR
    // Provides IMPLEMENTATION DEFINED configuration and control options
    // 0x20000000 [29]    EXTEXCLALL   (0) External Exclusives Allowed with no MPU
    // 0x00001000 [12]    DISITMATBFLUSH (0) Disable ATB Flush
    // 0x00000400 [10]    FPEXCODIS    (0) Disable FPU exception outputs
    // 0x00000200 [9]     DISOOFP      (0) Disable out-of-order FP instruction completion
    // 0x00000004 [2]     DISFOLD      (0) Disable dual-issue
    // 0x00000001 [0]     DISMCYCINT   (0) Disable dual-issue
    io_rw_32 actlr;

    uint32_t _pad26;

    _REG_(M33_SYST_CSR_OFFSET) // M33_SYST_CSR
    // SysTick Control and Status Register
    // 0x00010000 [16]    COUNTFLAG    (0) Returns 1 if timer counted to 0 since last time this was read
    // 0x00000004 [2]     CLKSOURCE    (0) SysTick clock source
    // 0x00000002 [1]     TICKINT      (0) Enables SysTick exception request: +
    // 0x00000001 [0]     ENABLE       (0) Enable SysTick counter: +
    io_rw_32 syst_csr;

    _REG_(M33_SYST_RVR_OFFSET) // M33_SYST_RVR
    // SysTick Reload Value Register
    // 0x00ffffff [23:0]  RELOAD       (0x000000) Value to load into the SysTick Current Value Register...
    io_rw_32 syst_rvr;

    _REG_(M33_SYST_CVR_OFFSET) // M33_SYST_CVR
    // SysTick Current Value Register
    // 0x00ffffff [23:0]  CURRENT      (0x000000) Reads return the current value of the SysTick counter
    io_rw_32 syst_cvr;

    _REG_(M33_SYST_CALIB_OFFSET) // M33_SYST_CALIB
    // SysTick Calibration Value Register
    // 0x80000000 [31]    NOREF        (0) If reads as 1, the Reference clock is not provided - the...
    // 0x40000000 [30]    SKEW         (0) If reads as 1, the calibration value for 10ms is inexact...
    // 0x00ffffff [23:0]  TENMS        (0x000000) An optional Reload value to be used for 10ms (100Hz)...
    io_ro_32 syst_calib;

    uint32_t _pad27[56];

    // (Description copied from array index 0 register M33_NVIC_ISER0 applies similarly to other array indexes)
    _REG_(M33_NVIC_ISER0_OFFSET) // M33_NVIC_ISER0
    // Enables or reads the enabled state of each group of 32 interrupts
    // 0xffffffff [31:0]  SETENA       (0x00000000) For SETENA[m] in NVIC_ISER*n, indicates whether...
    io_rw_32 nvic_iser[2];

    uint32_t _pad28[30];

    // (Description copied from array index 0 register M33_NVIC_ICER0 applies similarly to other array indexes)
    _REG_(M33_NVIC_ICER0_OFFSET) // M33_NVIC_ICER0
    // Clears or reads the enabled state of each group of 32 interrupts
    // 0xffffffff [31:0]  CLRENA       (0x00000000) For CLRENA[m] in NVIC_ICER*n, indicates whether...
    io_rw_32 nvic_icer[2];

    uint32_t _pad29[30];

    // (Description copied from array index 0 register M33_NVIC_ISPR0 applies similarly to other array indexes)
    _REG_(M33_NVIC_ISPR0_OFFSET) // M33_NVIC_ISPR0
    // Enables or reads the pending state of each group of 32 interrupts
    // 0xffffffff [31:0]  SETPEND      (0x00000000) For SETPEND[m] in NVIC_ISPR*n, indicates whether...
    io_rw_32 nvic_ispr[2];

    uint32_t _pad30[30];

    // (Description copied from array index 0 register M33_NVIC_ICPR0 applies similarly to other array indexes)
    _REG_(M33_NVIC_ICPR0_OFFSET) // M33_NVIC_ICPR0
    // Clears or reads the pending state of each group of 32 interrupts
    // 0xffffffff [31:0]  CLRPEND      (0x00000000) For CLRPEND[m] in NVIC_ICPR*n, indicates whether...
    io_rw_32 nvic_icpr[2];

    uint32_t _pad31[30];

    // (Description copied from array index 0 register M33_NVIC_IABR0 applies similarly to other array indexes)
    _REG_(M33_NVIC_IABR0_OFFSET) // M33_NVIC_IABR0
    // For each group of 32 interrupts, shows the active state of each interrupt
    // 0xffffffff [31:0]  ACTIVE       (0x00000000) For ACTIVE[m] in NVIC_IABR*n, indicates the active state...
    io_rw_32 nvic_iabr[2];

    uint32_t _pad32[30];

    // (Description copied from array index 0 register M33_NVIC_ITNS0 applies similarly to other array indexes)
    _REG_(M33_NVIC_ITNS0_OFFSET) // M33_NVIC_ITNS0
    // For each group of 32 interrupts, determines whether each interrupt targets Non-secure or Secure state
    // 0xffffffff [31:0]  ITNS         (0x00000000) For ITNS[m] in NVIC_ITNS*n, `IAAMO the target Security...
    io_rw_32 nvic_itns[2];

    uint32_t _pad33[30];

    // (Description copied from array index 0 register M33_NVIC_IPR0 applies similarly to other array indexes)
    _REG_(M33_NVIC_IPR0_OFFSET) // M33_NVIC_IPR0
    // Sets or reads interrupt priorities
    // 0xf0000000 [31:28] PRI_N3       (0x0) For register NVIC_IPRn, the priority of interrupt number...
    // 0x00f00000 [23:20] PRI_N2       (0x0) For register NVIC_IPRn, the priority of interrupt number...
    // 0x0000f000 [15:12] PRI_N1       (0x0) For register NVIC_IPRn, the priority of interrupt number...
    // 0x000000f0 [7:4]   PRI_N0       (0x0) For register NVIC_IPRn, the priority of interrupt number...
    io_rw_32 nvic_ipr[16];

    uint32_t _pad34[560];

    _REG_(M33_CPUID_OFFSET) // M33_CPUID
    // Provides identification information for the PE, including an implementer code for the device and...
    // 0xff000000 [31:24] IMPLEMENTER  (0x41) This field must hold an implementer code that has been...
    // 0x00f00000 [23:20] VARIANT      (0x1) IMPLEMENTATION DEFINED variant number
    // 0x000f0000 [19:16] ARCHITECTURE (0xf) Defines the Architecture implemented by the PE
    // 0x0000fff0 [15:4]  PARTNO       (0xd21) IMPLEMENTATION DEFINED primary part number for the device
    // 0x0000000f [3:0]   REVISION     (0x0) IMPLEMENTATION DEFINED revision number for the device
    io_ro_32 cpuid;

    _REG_(M33_ICSR_OFFSET) // M33_ICSR
    // Controls and provides status information for NMI, PendSV, SysTick and interrupts
    // 0x80000000 [31]    PENDNMISET   (0) Indicates whether the NMI exception is pending
    // 0x40000000 [30]    PENDNMICLR   (0) Allows the NMI exception pend state to be cleared
    // 0x10000000 [28]    PENDSVSET    (0) Indicates whether the PendSV `FTSSS exception is pending
    // 0x08000000 [27]    PENDSVCLR    (0) Allows the PendSV exception pend state to be cleared `FTSSS
    // 0x04000000 [26]    PENDSTSET    (0) Indicates whether the SysTick `FTSSS exception is pending
    // 0x02000000 [25]    PENDSTCLR    (0) Allows the SysTick exception pend state to be cleared `FTSSS
    // 0x01000000 [24]    STTNS        (0) Controls whether in a single SysTick implementation, the...
    // 0x00800000 [23]    ISRPREEMPT   (0) Indicates whether a pending exception will be serviced...
    // 0x00400000 [22]    ISRPENDING   (0) Indicates whether an external interrupt, generated by...
    // 0x001ff000 [20:12] VECTPENDING  (0x000) The exception number of the highest priority pending and...
    // 0x00000800 [11]    RETTOBASE    (0) In Handler mode, indicates whether there is more than...
    // 0x000001ff [8:0]   VECTACTIVE   (0x000) The exception number of the current executing exception
    io_rw_32 icsr;

    _REG_(M33_VTOR_OFFSET) // M33_VTOR
    // Vector Table Offset Register
    // 0xffffff80 [31:7]  TBLOFF       (0x0000000) Vector table base offset field
    io_rw_32 vtor;

    _REG_(M33_AIRCR_OFFSET) // M33_AIRCR
    // Application Interrupt and Reset Control Register
    // 0xffff0000 [31:16] VECTKEY      (0x0000) Register key: +
    // 0x00008000 [15]    ENDIANESS    (0) Data endianness implemented: +
    // 0x00004000 [14]    PRIS         (0) Prioritize Secure exceptions
    // 0x00002000 [13]    BFHFNMINS    (0) BusFault, HardFault, and NMI Non-secure enable
    // 0x00000700 [10:8]  PRIGROUP     (0x0) Interrupt priority grouping field
    // 0x00000008 [3]     SYSRESETREQS (0) System reset request, Secure state only
    // 0x00000004 [2]     SYSRESETREQ  (0) This resets only the core on which SYSRESETREQ is...
    // 0x00000002 [1]     VECTCLRACTIVE (0) Clears all active state information for fixed and...
    io_rw_32 aircr;

    _REG_(M33_SCR_OFFSET) // M33_SCR
    // System Control Register
    // 0x00000010 [4]     SEVONPEND    (0) Send Event on Pending bit: +
    // 0x00000008 [3]     SLEEPDEEPS   (0) 0 SLEEPDEEP is available to both security states +
    // 0x00000004 [2]     SLEEPDEEP    (0) Controls whether the processor uses sleep or deep sleep...
    // 0x00000002 [1]     SLEEPONEXIT  (0) Indicates sleep-on-exit when returning from Handler mode...
    io_rw_32 scr;

    _REG_(M33_CCR_OFFSET) // M33_CCR
    // Sets or returns configuration and control data
    // 0x00040000 [18]    BP           (0) Enables program flow prediction `FTSSS
    // 0x00020000 [17]    IC           (0) This is a global enable bit for instruction caches in...
    // 0x00010000 [16]    DC           (0) Enables data caching of all data accesses to Normal memory `FTSSS
    // 0x00000400 [10]    STKOFHFNMIGN (0) Controls the effect of a stack limit violation while...
    // 0x00000200 [9]     RES1         (1) Reserved, RES1
    // 0x00000100 [8]     BFHFNMIGN    (0) Determines the effect of precise BusFaults on handlers...
    // 0x00000010 [4]     DIV_0_TRP    (0) Controls the generation of a DIVBYZERO UsageFault when...
    // 0x00000008 [3]     UNALIGN_TRP  (0) Controls the trapping of unaligned word or halfword accesses
    // 0x00000002 [1]     USERSETMPEND (0) Determines whether unprivileged accesses are permitted...
    // 0x00000001 [0]     RES1_1       (1) Reserved, RES1
    io_rw_32 ccr;

    // (Description copied from array index 0 register M33_SHPR1 applies similarly to other array indexes)
    _REG_(M33_SHPR1_OFFSET) // M33_SHPR1
    // Sets or returns priority for system handlers 4 - 7
    // 0xe0000000 [31:29] PRI_7_3      (0x0) Priority of system handler 7, SecureFault
    // 0x00e00000 [23:21] PRI_6_3      (0x0) Priority of system handler 6, SecureFault
    // 0x0000e000 [15:13] PRI_5_3      (0x0) Priority of system handler 5, SecureFault
    // 0x000000e0 [7:5]   PRI_4_3      (0x0) Priority of system handler 4, SecureFault
    io_rw_32 shpr[3];

    _REG_(M33_SHCSR_OFFSET) // M33_SHCSR
    // Provides access to the active and pending status of system exceptions
    // 0x00200000 [21]    HARDFAULTPENDED (0) `IAAMO the pending state of the HardFault exception `CTTSSS
    // 0x00100000 [20]    SECUREFAULTPENDED (0) `IAAMO the pending state of the SecureFault exception
    // 0x00080000 [19]    SECUREFAULTENA (0) `DW the SecureFault exception is enabled
    // 0x00040000 [18]    USGFAULTENA  (0) `DW the UsageFault exception is enabled `FTSSS
    // 0x00020000 [17]    BUSFAULTENA  (0) `DW the BusFault exception is enabled
    // 0x00010000 [16]    MEMFAULTENA  (0) `DW the MemManage exception is enabled `FTSSS
    // 0x00008000 [15]    SVCALLPENDED (0) `IAAMO the pending state of the SVCall exception `FTSSS
    // 0x00004000 [14]    BUSFAULTPENDED (0) `IAAMO the pending state of the BusFault exception
    // 0x00002000 [13]    MEMFAULTPENDED (0) `IAAMO the pending state of the MemManage exception `FTSSS
    // 0x00001000 [12]    USGFAULTPENDED (0) The UsageFault exception is banked between Security...
    // 0x00000800 [11]    SYSTICKACT   (0) `IAAMO the active state of the SysTick exception `FTSSS
    // 0x00000400 [10]    PENDSVACT    (0) `IAAMO the active state of the PendSV exception `FTSSS
    // 0x00000100 [8]     MONITORACT   (0) `IAAMO the active state of the DebugMonitor exception
    // 0x00000080 [7]     SVCALLACT    (0) `IAAMO the active state of the SVCall exception `FTSSS
    // 0x00000020 [5]     NMIACT       (0) `IAAMO the active state of the NMI exception
    // 0x00000010 [4]     SECUREFAULTACT (0) `IAAMO the active state of the SecureFault exception
    // 0x00000008 [3]     USGFAULTACT  (0) `IAAMO the active state of the UsageFault exception `FTSSS
    // 0x00000004 [2]     HARDFAULTACT (0) Indicates and allows limited modification of the active...
    // 0x00000002 [1]     BUSFAULTACT  (0) `IAAMO the active state of the BusFault exception
    // 0x00000001 [0]     MEMFAULTACT  (0) `IAAMO the active state of the MemManage exception `FTSSS
    io_rw_32 shcsr;

    _REG_(M33_CFSR_OFFSET) // M33_CFSR
    // Contains the three Configurable Fault Status Registers
    // 0x02000000 [25]    UFSR_DIVBYZERO (0) Sticky flag indicating whether an integer division by...
    // 0x01000000 [24]    UFSR_UNALIGNED (0) Sticky flag indicating whether an unaligned access error...
    // 0x00100000 [20]    UFSR_STKOF   (0) Sticky flag indicating whether a stack overflow error...
    // 0x00080000 [19]    UFSR_NOCP    (0) Sticky flag indicating whether a coprocessor disabled or...
    // 0x00040000 [18]    UFSR_INVPC   (0) Sticky flag indicating whether an integrity check error...
    // 0x00020000 [17]    UFSR_INVSTATE (0) Sticky flag indicating whether an EPSR
    // 0x00010000 [16]    UFSR_UNDEFINSTR (0) Sticky flag indicating whether an undefined instruction...
    // 0x00008000 [15]    BFSR_BFARVALID (0) Indicates validity of the contents of the BFAR register
    // 0x00002000 [13]    BFSR_LSPERR  (0) Records whether a BusFault occurred during FP lazy state...
    // 0x00001000 [12]    BFSR_STKERR  (0) Records whether a derived BusFault occurred during...
    // 0x00000800 [11]    BFSR_UNSTKERR (0) Records whether a derived BusFault occurred during...
    // 0x00000400 [10]    BFSR_IMPRECISERR (0) Records whether an imprecise data access error has occurred
    // 0x00000200 [9]     BFSR_PRECISERR (0) Records whether a precise data access error has occurred
    // 0x00000100 [8]     BFSR_IBUSERR (0) Records whether a BusFault on an instruction prefetch...
    // 0x000000ff [7:0]   MMFSR        (0x00) Provides information on MemManage exceptions
    io_rw_32 cfsr;

    _REG_(M33_HFSR_OFFSET) // M33_HFSR
    // Shows the cause of any HardFaults
    // 0x80000000 [31]    DEBUGEVT     (0) Indicates when a Debug event has occurred
    // 0x40000000 [30]    FORCED       (0) Indicates that a fault with configurable priority has...
    // 0x00000002 [1]     VECTTBL      (0) Indicates when a fault has occurred because of a vector...
    io_rw_32 hfsr;

    _REG_(M33_DFSR_OFFSET) // M33_DFSR
    // Shows which debug event occurred
    // 0x00000010 [4]     EXTERNAL     (0) Sticky flag indicating whether an External debug request...
    // 0x00000008 [3]     VCATCH       (0) Sticky flag indicating whether a Vector catch debug...
    // 0x00000004 [2]     DWTTRAP      (0) Sticky flag indicating whether a Watchpoint debug event...
    // 0x00000002 [1]     BKPT         (0) Sticky flag indicating whether a Breakpoint debug event...
    // 0x00000001 [0]     HALTED       (0) Sticky flag indicating that a Halt request debug event...
    io_rw_32 dfsr;

    _REG_(M33_MMFAR_OFFSET) // M33_MMFAR
    // Shows the address of the memory location that caused an MPU fault
    // 0xffffffff [31:0]  ADDRESS      (0x00000000) This register is updated with the address of a location...
    io_rw_32 mmfar;

    _REG_(M33_BFAR_OFFSET) // M33_BFAR
    // Shows the address associated with a precise data access BusFault
    // 0xffffffff [31:0]  ADDRESS      (0x00000000) This register is updated with the address of a location...
    io_rw_32 bfar;

    uint32_t _pad35;

    // (Description copied from array index 0 register M33_ID_PFR0 applies similarly to other array indexes)
    _REG_(M33_ID_PFR0_OFFSET) // M33_ID_PFR0
    // Gives top-level information about the instruction set supported by the PE
    // 0x000000f0 [7:4]   STATE1       (0x3) T32 instruction set support
    // 0x0000000f [3:0]   STATE0       (0x0) A32 instruction set support
    io_ro_32 id_pfr[2];

    _REG_(M33_ID_DFR0_OFFSET) // M33_ID_DFR0
    // Provides top level information about the debug system
    // 0x00f00000 [23:20] MPROFDBG     (0x2) Indicates the supported M-profile debug architecture
    io_ro_32 id_dfr0;

    _REG_(M33_ID_AFR0_OFFSET) // M33_ID_AFR0
    // Provides information about the IMPLEMENTATION DEFINED features of the PE
    // 0x0000f000 [15:12] IMPDEF3      (0x0) IMPLEMENTATION DEFINED meaning
    // 0x00000f00 [11:8]  IMPDEF2      (0x0) IMPLEMENTATION DEFINED meaning
    // 0x000000f0 [7:4]   IMPDEF1      (0x0) IMPLEMENTATION DEFINED meaning
    // 0x0000000f [3:0]   IMPDEF0      (0x0) IMPLEMENTATION DEFINED meaning
    io_ro_32 id_afr0;

    // (Description copied from array index 0 register M33_ID_MMFR0 applies similarly to other array indexes)
    _REG_(M33_ID_MMFR0_OFFSET) // M33_ID_MMFR0
    // Provides information about the implemented memory model and memory management support
    // 0x00f00000 [23:20] AUXREG       (0x1) Indicates support for Auxiliary Control Registers
    // 0x000f0000 [19:16] TCM          (0x0) Indicates support for tightly coupled memories (TCMs)
    // 0x0000f000 [15:12] SHARELVL     (0x1) Indicates the number of shareability levels implemented
    // 0x00000f00 [11:8]  OUTERSHR     (0xf) Indicates the outermost shareability domain implemented
    // 0x000000f0 [7:4]   PMSA         (0x4) Indicates support for the protected memory system...
    io_ro_32 id_mmfr[4];

    // (Description copied from array index 0 register M33_ID_ISAR0 applies similarly to other array indexes)
    _REG_(M33_ID_ISAR0_OFFSET) // M33_ID_ISAR0
    // Provides information about the instruction set implemented by the PE
    // 0x0f000000 [27:24] DIVIDE       (0x8) Indicates the supported Divide instructions
    // 0x00f00000 [23:20] DEBUG        (0x0) Indicates the implemented Debug instructions
    // 0x000f0000 [19:16] COPROC       (0x9) Indicates the supported Coprocessor instructions
    // 0x0000f000 [15:12] CMPBRANCH    (0x2) Indicates the supported combined Compare and Branch instructions
    // 0x00000f00 [11:8]  BITFIELD     (0x3) Indicates the supported bit field instructions
    // 0x000000f0 [7:4]   BITCOUNT     (0x0) Indicates the supported bit count instructions
    io_ro_32 id_isar[5];

    uint32_t _pad36[2];

    _REG_(M33_CTR_OFFSET) // M33_CTR
    // Provides information about the architecture of the caches
    // 0x80000000 [31]    RES1         (1) Reserved, RES1
    // 0x0f000000 [27:24] CWG          (0x0) Log2 of the number of words of the maximum size of...
    // 0x00f00000 [23:20] ERG          (0x0) Log2 of the number of words of the maximum size of the...
    // 0x000f0000 [19:16] DMINLINE     (0x0) Log2 of the number of words in the smallest cache line...
    // 0x0000c000 [15:14] RES1_1       (0x3) Reserved, RES1
    // 0x0000000f [3:0]   IMINLINE     (0x0) Log2 of the number of words in the smallest cache line...
    io_ro_32 ctr;

    uint32_t _pad37[2];

    _REG_(M33_CPACR_OFFSET) // M33_CPACR
    // Specifies the access privileges for coprocessors and the FP Extension
    // 0x00c00000 [23:22] CP11         (0x0) The value in this field is ignored
    // 0x00300000 [21:20] CP10         (0x0) Defines the access rights for the floating-point functionality
    // 0x0000c000 [15:14] CP7          (0x0) Controls access privileges for coprocessor 7
    // 0x00003000 [13:12] CP6          (0x0) Controls access privileges for coprocessor 6
    // 0x00000c00 [11:10] CP5          (0x0) Controls access privileges for coprocessor 5
    // 0x00000300 [9:8]   CP4          (0x0) Controls access privileges for coprocessor 4
    // 0x000000c0 [7:6]   CP3          (0x0) Controls access privileges for coprocessor 3
    // 0x00000030 [5:4]   CP2          (0x0) Controls access privileges for coprocessor 2
    // 0x0000000c [3:2]   CP1          (0x0) Controls access privileges for coprocessor 1
    // 0x00000003 [1:0]   CP0          (0x0) Controls access privileges for coprocessor 0
    io_rw_32 cpacr;

    _REG_(M33_NSACR_OFFSET) // M33_NSACR
    // Defines the Non-secure access permissions for both the FP Extension and coprocessors CP0 to CP7
    // 0x00000800 [11]    CP11         (0) Enables Non-secure access to the Floating-point Extension
    // 0x00000400 [10]    CP10         (0) Enables Non-secure access to the Floating-point Extension
    // 0x00000080 [7]     CP7          (0) Enables Non-secure access to coprocessor CP7
    // 0x00000040 [6]     CP6          (0) Enables Non-secure access to coprocessor CP6
    // 0x00000020 [5]     CP5          (0) Enables Non-secure access to coprocessor CP5
    // 0x00000010 [4]     CP4          (0) Enables Non-secure access to coprocessor CP4
    // 0x00000008 [3]     CP3          (0) Enables Non-secure access to coprocessor CP3
    // 0x00000004 [2]     CP2          (0) Enables Non-secure access to coprocessor CP2
    // 0x00000002 [1]     CP1          (0) Enables Non-secure access to coprocessor CP1
    // 0x00000001 [0]     CP0          (0) Enables Non-secure access to coprocessor CP0
    io_rw_32 nsacr;

    _REG_(M33_MPU_TYPE_OFFSET) // M33_MPU_TYPE
    // The MPU Type Register indicates how many regions the MPU `FTSSS supports
    // 0x0000ff00 [15:8]  DREGION      (0x08) Number of regions supported by the MPU
    // 0x00000001 [0]     SEPARATE     (0) Indicates support for separate instructions and data...
    io_ro_32 mpu_type;

    _REG_(M33_MPU_CTRL_OFFSET) // M33_MPU_CTRL
    // Enables the MPU and, when the MPU is enabled, controls whether the default memory map is enabled...
    // 0x00000004 [2]     PRIVDEFENA   (0) Controls whether the default memory map is enabled for...
    // 0x00000002 [1]     HFNMIENA     (0) Controls whether handlers executing with priority less...
    // 0x00000001 [0]     ENABLE       (0) Enables the MPU
    io_rw_32 mpu_ctrl;

    _REG_(M33_MPU_RNR_OFFSET) // M33_MPU_RNR
    // Selects the region currently accessed by MPU_RBAR and MPU_RLAR
    // 0x00000007 [2:0]   REGION       (0x0) Indicates the memory region accessed by MPU_RBAR and MPU_RLAR
    io_rw_32 mpu_rnr;

    _REG_(M33_MPU_RBAR_OFFSET) // M33_MPU_RBAR
    // Provides indirect read and write access to the base address of the currently selected MPU region `FTSSS
    // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
    // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
    // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
    // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
    io_rw_32 mpu_rbar;

    _REG_(M33_MPU_RLAR_OFFSET) // M33_MPU_RLAR
    // Provides indirect read and write access to the limit address of the currently selected MPU region `FTSSS
    // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
    // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
    // 0x00000001 [0]     EN           (0) Region enable
    io_rw_32 mpu_rlar;

    _REG_(M33_MPU_RBAR_A1_OFFSET) // M33_MPU_RBAR_A1
    // Provides indirect read and write access to the base address of the MPU region selected by...
    // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
    // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
    // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
    // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
    io_rw_32 mpu_rbar_a1;

    _REG_(M33_MPU_RLAR_A1_OFFSET) // M33_MPU_RLAR_A1
    // Provides indirect read and write access to the limit address of the currently selected MPU...
    // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
    // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
    // 0x00000001 [0]     EN           (0) Region enable
    io_rw_32 mpu_rlar_a1;

    _REG_(M33_MPU_RBAR_A2_OFFSET) // M33_MPU_RBAR_A2
    // Provides indirect read and write access to the base address of the MPU region selected by...
    // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
    // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
    // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
    // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
    io_rw_32 mpu_rbar_a2;

    _REG_(M33_MPU_RLAR_A2_OFFSET) // M33_MPU_RLAR_A2
    // Provides indirect read and write access to the limit address of the currently selected MPU...
    // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
    // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
    // 0x00000001 [0]     EN           (0) Region enable
    io_rw_32 mpu_rlar_a2;

    _REG_(M33_MPU_RBAR_A3_OFFSET) // M33_MPU_RBAR_A3
    // Provides indirect read and write access to the base address of the MPU region selected by...
    // 0xffffffe0 [31:5]  BASE         (0x0000000) Contains bits [31:5] of the lower inclusive limit of the...
    // 0x00000018 [4:3]   SH           (0x0) Defines the Shareability domain of this region for Normal memory
    // 0x00000006 [2:1]   AP           (0x0) Defines the access permissions for this region
    // 0x00000001 [0]     XN           (0) Defines whether code can be executed from this region
    io_rw_32 mpu_rbar_a3;

    _REG_(M33_MPU_RLAR_A3_OFFSET) // M33_MPU_RLAR_A3
    // Provides indirect read and write access to the limit address of the currently selected MPU...
    // 0xffffffe0 [31:5]  LIMIT        (0x0000000) Contains bits [31:5] of the upper inclusive limit of the...
    // 0x0000000e [3:1]   ATTRINDX     (0x0) Associates a set of attributes in the MPU_MAIR0 and...
    // 0x00000001 [0]     EN           (0) Region enable
    io_rw_32 mpu_rlar_a3;

    uint32_t _pad38;

    // (Description copied from array index 0 register M33_MPU_MAIR0 applies similarly to other array indexes)
    _REG_(M33_MPU_MAIR0_OFFSET) // M33_MPU_MAIR0
    // Along with MPU_MAIR1, provides the memory attribute encodings corresponding to the AttrIndex values
    // 0xff000000 [31:24] ATTR3        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 3
    // 0x00ff0000 [23:16] ATTR2        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 2
    // 0x0000ff00 [15:8]  ATTR1        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 1
    // 0x000000ff [7:0]   ATTR0        (0x00) Memory attribute encoding for MPU regions with an AttrIndex of 0
    io_rw_32 mpu_mair[2];

    uint32_t _pad39[2];

    _REG_(M33_SAU_CTRL_OFFSET) // M33_SAU_CTRL
    // Allows enabling of the Security Attribution Unit
    // 0x00000002 [1]     ALLNS        (0) When SAU_CTRL
    // 0x00000001 [0]     ENABLE       (0) Enables the SAU
    io_rw_32 sau_ctrl;

    _REG_(M33_SAU_TYPE_OFFSET) // M33_SAU_TYPE
    // Indicates the number of regions implemented by the Security Attribution Unit
    // 0x000000ff [7:0]   SREGION      (0x08) The number of implemented SAU regions
    io_ro_32 sau_type;

    _REG_(M33_SAU_RNR_OFFSET) // M33_SAU_RNR
    // Selects the region currently accessed by SAU_RBAR and SAU_RLAR
    // 0x000000ff [7:0]   REGION       (0x00) Indicates the SAU region accessed by SAU_RBAR and SAU_RLAR
    io_rw_32 sau_rnr;

    _REG_(M33_SAU_RBAR_OFFSET) // M33_SAU_RBAR
    // Provides indirect read and write access to the base address of the currently selected SAU region
    // 0xffffffe0 [31:5]  BADDR        (0x0000000) Holds bits [31:5] of the base address for the selected SAU region
    io_rw_32 sau_rbar;

    _REG_(M33_SAU_RLAR_OFFSET) // M33_SAU_RLAR
    // Provides indirect read and write access to the limit address of the currently selected SAU region
    // 0xffffffe0 [31:5]  LADDR        (0x0000000) Holds bits [31:5] of the limit address for the selected...
    // 0x00000002 [1]     NSC          (0) Controls whether Non-secure state is permitted to...
    // 0x00000001 [0]     ENABLE       (0) SAU region enable
    io_rw_32 sau_rlar;

    _REG_(M33_SFSR_OFFSET) // M33_SFSR
    // Provides information about any security related faults
    // 0x00000080 [7]     LSERR        (0) Sticky flag indicating that an error occurred during...
    // 0x00000040 [6]     SFARVALID    (0) This bit is set when the SFAR register contains a valid value
    // 0x00000020 [5]     LSPERR       (0) Stick flag indicating that an SAU or IDAU violation...
    // 0x00000010 [4]     INVTRAN      (0) Sticky flag indicating that an exception was raised due...
    // 0x00000008 [3]     AUVIOL       (0) Sticky flag indicating that an attempt was made to...
    // 0x00000004 [2]     INVER        (0) This can be caused by EXC_RETURN
    // 0x00000002 [1]     INVIS        (0) This bit is set if the integrity signature in an...
    // 0x00000001 [0]     INVEP        (0) This bit is set if a function call from the Non-secure...
    io_rw_32 sfsr;

    _REG_(M33_SFAR_OFFSET) // M33_SFAR
    // Shows the address of the memory location that caused a Security violation
    // 0xffffffff [31:0]  ADDRESS      (0x00000000) The address of an access that caused a attribution unit violation
    io_rw_32 sfar;

    uint32_t _pad40;

    _REG_(M33_DHCSR_OFFSET) // M33_DHCSR
    // Controls halting debug
    // 0x04000000 [26]    S_RESTART_ST (0) Indicates the PE has processed a request to clear DHCSR
    // 0x02000000 [25]    S_RESET_ST   (0) Indicates whether the PE has been reset since the last...
    // 0x01000000 [24]    S_RETIRE_ST  (0) Set to 1 every time the PE retires one of more instructions
    // 0x00100000 [20]    S_SDE        (0) Indicates whether Secure invasive debug is allowed
    // 0x00080000 [19]    S_LOCKUP     (0) Indicates whether the PE is in Lockup state
    // 0x00040000 [18]    S_SLEEP      (0) Indicates whether the PE is sleeping
    // 0x00020000 [17]    S_HALT       (0) Indicates whether the PE is in Debug state
    // 0x00010000 [16]    S_REGRDY     (0) Handshake flag to transfers through the DCRDR
    // 0x00000020 [5]     C_SNAPSTALL  (0) Allow imprecise entry to Debug state
    // 0x00000008 [3]     C_MASKINTS   (0) When debug is enabled, the debugger can write to this...
    // 0x00000004 [2]     C_STEP       (0) Enable single instruction step
    // 0x00000002 [1]     C_HALT       (0) PE enter Debug state halt request
    // 0x00000001 [0]     C_DEBUGEN    (0) Enable Halting debug
    io_rw_32 dhcsr;

    _REG_(M33_DCRSR_OFFSET) // M33_DCRSR
    // With the DCRDR, provides debug access to the general-purpose registers, special-purpose...
    // 0x00010000 [16]    REGWNR       (0) Specifies the access type for the transfer
    // 0x0000007f [6:0]   REGSEL       (0x00) Specifies the general-purpose register, special-purpose...
    io_rw_32 dcrsr;

    _REG_(M33_DCRDR_OFFSET) // M33_DCRDR
    // With the DCRSR, provides debug access to the general-purpose registers, special-purpose...
    // 0xffffffff [31:0]  DBGTMP       (0x00000000) Provides debug access for reading and writing the...
    io_rw_32 dcrdr;

    _REG_(M33_DEMCR_OFFSET) // M33_DEMCR
    // Manages vector catch behavior and DebugMonitor handling when debugging
    // 0x01000000 [24]    TRCENA       (0) Global enable for all DWT and ITM features
    // 0x00100000 [20]    SDME         (0) Indicates whether the DebugMonitor targets the Secure or...
    // 0x00080000 [19]    MON_REQ      (0) DebugMonitor semaphore bit
    // 0x00040000 [18]    MON_STEP     (0) Enable DebugMonitor stepping
    // 0x00020000 [17]    MON_PEND     (0) Sets or clears the pending state of the DebugMonitor exception
    // 0x00010000 [16]    MON_EN       (0) Enable the DebugMonitor exception
    // 0x00000800 [11]    VC_SFERR     (0) SecureFault exception halting debug vector catch enable
    // 0x00000400 [10]    VC_HARDERR   (0) HardFault exception halting debug vector catch enable
    // 0x00000200 [9]     VC_INTERR    (0) Enable halting debug vector catch for faults during...
    // 0x00000100 [8]     VC_BUSERR    (0) BusFault exception halting debug vector catch enable
    // 0x00000080 [7]     VC_STATERR   (0) Enable halting debug trap on a UsageFault exception...
    // 0x00000040 [6]     VC_CHKERR    (0) Enable halting debug trap on a UsageFault exception...
    // 0x00000020 [5]     VC_NOCPERR   (0) Enable halting debug trap on a UsageFault caused by an...
    // 0x00000010 [4]     VC_MMERR     (0) Enable halting debug trap on a MemManage exception
    // 0x00000001 [0]     VC_CORERESET (0) Enable Reset Vector Catch
    io_rw_32 demcr;

    uint32_t _pad41[2];

    _REG_(M33_DSCSR_OFFSET) // M33_DSCSR
    // Provides control and status information for Secure debug
    // 0x00020000 [17]    CDSKEY       (0) Writes to the CDS bit are ignored unless CDSKEY is...
    // 0x00010000 [16]    CDS          (0) This field indicates the current Security state of the processor
    // 0x00000002 [1]     SBRSEL       (0) If SBRSELEN is 1 this bit selects whether the Non-secure...
    // 0x00000001 [0]     SBRSELEN     (0) Controls whether the SBRSEL field or the current...
    io_rw_32 dscsr;

    uint32_t _pad42[61];

    _REG_(M33_STIR_OFFSET) // M33_STIR
    // Provides a mechanism for software to generate an interrupt
    // 0x000001ff [8:0]   INTID        (0x000) Indicates the interrupt to be pended
    io_rw_32 stir;

    uint32_t _pad43[12];

    _REG_(M33_FPCCR_OFFSET) // M33_FPCCR
    // Holds control data for the Floating-point extension
    // 0x80000000 [31]    ASPEN        (0) When this bit is set to 1, execution of a floating-point...
    // 0x40000000 [30]    LSPEN        (0) Enables lazy context save of floating-point state
    // 0x20000000 [29]    LSPENS       (1) This bit controls whether the LSPEN bit is writeable...
    // 0x10000000 [28]    CLRONRET     (0) Clear floating-point caller saved registers on exception return
    // 0x08000000 [27]    CLRONRETS    (0) This bit controls whether the CLRONRET bit is writeable...
    // 0x04000000 [26]    TS           (0) Treat floating-point registers as Secure enable
    // 0x00000400 [10]    UFRDY        (1) Indicates whether the software executing when the PE...
    // 0x00000200 [9]     SPLIMVIOL    (0) This bit is banked between the Security states and...
    // 0x00000100 [8]     MONRDY       (0) Indicates whether the software executing when the PE...
    // 0x00000080 [7]     SFRDY        (0) Indicates whether the software executing when the PE...
    // 0x00000040 [6]     BFRDY        (1) Indicates whether the software executing when the PE...
    // 0x00000020 [5]     MMRDY        (1) Indicates whether the software executing when the PE...
    // 0x00000010 [4]     HFRDY        (1) Indicates whether the software executing when the PE...
    // 0x00000008 [3]     THREAD       (0) Indicates the PE mode when it allocated the...
    // 0x00000004 [2]     S            (0) Security status of the floating-point context
    // 0x00000002 [1]     USER         (1) Indicates the privilege level of the software executing...
    // 0x00000001 [0]     LSPACT       (0) Indicates whether lazy preservation of the...
    io_rw_32 fpccr;

    _REG_(M33_FPCAR_OFFSET) // M33_FPCAR
    // Holds the location of the unpopulated floating-point register space allocated on an exception stack frame
    // 0xfffffff8 [31:3]  ADDRESS      (0x00000000) The location of the unpopulated floating-point register...
    io_rw_32 fpcar;

    _REG_(M33_FPDSCR_OFFSET) // M33_FPDSCR
    // Holds the default values for the floating-point status control data that the PE assigns to the...
    // 0x04000000 [26]    AHP          (0) Default value for FPSCR
    // 0x02000000 [25]    DN           (0) Default value for FPSCR
    // 0x01000000 [24]    FZ           (0) Default value for FPSCR
    // 0x00c00000 [23:22] RMODE        (0x0) Default value for FPSCR
    io_rw_32 fpdscr;

    // (Description copied from array index 0 register M33_MVFR0 applies similarly to other array indexes)
    _REG_(M33_MVFR0_OFFSET) // M33_MVFR0
    // Describes the features provided by the Floating-point Extension
    // 0xf0000000 [31:28] FPROUND      (0x6) Indicates the rounding modes supported by the FP Extension
    // 0x00f00000 [23:20] FPSQRT       (0x5) Indicates the support for FP square root operations
    // 0x000f0000 [19:16] FPDIVIDE     (0x4) Indicates the support for FP divide operations
    // 0x00000f00 [11:8]  FPDP         (0x6) Indicates support for FP double-precision operations
    // 0x000000f0 [7:4]   FPSP         (0x0) Indicates support for FP single-precision operations
    // 0x0000000f [3:0]   SIMDREG      (0x1) Indicates size of FP register file
    io_ro_32 mvfr[3];

    uint32_t _pad44[28];

    _REG_(M33_DDEVARCH_OFFSET) // M33_DDEVARCH
    // Provides CoreSight discovery information for the SCS
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) Defines the architect of the component
    // 0x00100000 [20]    PRESENT      (1) Defines that the DEVARCH register is present
    // 0x000f0000 [19:16] REVISION     (0x0) Defines the architecture revision of the component
    // 0x0000f000 [15:12] ARCHVER      (0x2) Defines the architecture version of the component
    // 0x00000fff [11:0]  ARCHPART     (0xa04) Defines the architecture of the component
    io_ro_32 ddevarch;

    uint32_t _pad45[3];

    _REG_(M33_DDEVTYPE_OFFSET) // M33_DDEVTYPE
    // Provides CoreSight discovery information for the SCS
    // 0x000000f0 [7:4]   SUB          (0x0) Component sub-type
    // 0x0000000f [3:0]   MAJOR        (0x0) CoreSight major type
    io_ro_32 ddevtype;

    _REG_(M33_DPIDR4_OFFSET) // M33_DPIDR4
    // Provides CoreSight discovery information for the SCS
    // 0x000000f0 [7:4]   SIZE         (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   DES_2        (0x4) See CoreSight Architecture Specification
    io_ro_32 dpidr4;

    uint32_t _pad46[3];

    _REG_(M33_DPIDR0_OFFSET) // M33_DPIDR0
    // Provides CoreSight discovery information for the SCS
    // 0x000000ff [7:0]   PART_0       (0x21) See CoreSight Architecture Specification
    io_ro_32 dpidr0;

    _REG_(M33_DPIDR1_OFFSET) // M33_DPIDR1
    // Provides CoreSight discovery information for the SCS
    // 0x000000f0 [7:4]   DES_0        (0xb) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   PART_1       (0xd) See CoreSight Architecture Specification
    io_ro_32 dpidr1;

    _REG_(M33_DPIDR2_OFFSET) // M33_DPIDR2
    // Provides CoreSight discovery information for the SCS
    // 0x000000f0 [7:4]   REVISION     (0x0) See CoreSight Architecture Specification
    // 0x00000008 [3]     JEDEC        (1) See CoreSight Architecture Specification
    // 0x00000007 [2:0]   DES_1        (0x3) See CoreSight Architecture Specification
    io_ro_32 dpidr2;

    _REG_(M33_DPIDR3_OFFSET) // M33_DPIDR3
    // Provides CoreSight discovery information for the SCS
    // 0x000000f0 [7:4]   REVAND       (0x0) See CoreSight Architecture Specification
    // 0x0000000f [3:0]   CMOD         (0x0) See CoreSight Architecture Specification
    io_ro_32 dpidr3;

    // (Description copied from array index 0 register M33_DCIDR0 applies similarly to other array indexes)
    _REG_(M33_DCIDR0_OFFSET) // M33_DCIDR0
    // Provides CoreSight discovery information for the SCS
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) See CoreSight Architecture Specification
    io_ro_32 dcidr[4];

    uint32_t _pad47[51201];

    _REG_(M33_TRCPRGCTLR_OFFSET) // M33_TRCPRGCTLR
    // Programming Control Register
    // 0x00000001 [0]     EN           (0) Trace Unit Enable
    io_rw_32 trcprgctlr;

    uint32_t _pad48;

    _REG_(M33_TRCSTATR_OFFSET) // M33_TRCSTATR
    // The TRCSTATR indicates the ETM-Teal status
    // 0x00000002 [1]     PMSTABLE     (0) Indicates whether the ETM-Teal registers are stable and...
    // 0x00000001 [0]     IDLE         (0) Indicates that the trace unit is inactive
    io_ro_32 trcstatr;

    _REG_(M33_TRCCONFIGR_OFFSET) // M33_TRCCONFIGR
    // The TRCCONFIGR sets the basic tracing options for the trace unit
    // 0x00001000 [12]    RS           (0) Return stack enable
    // 0x00000800 [11]    TS           (0) Global timestamp tracing
    // 0x000007e0 [10:5]  COND         (0x00) Conditional instruction tracing
    // 0x00000010 [4]     CCI          (0) Cycle counting in instruction trace
    // 0x00000008 [3]     BB           (0) Branch broadcast mode
    io_rw_32 trcconfigr;

    uint32_t _pad49[3];

    _REG_(M33_TRCEVENTCTL0R_OFFSET) // M33_TRCEVENTCTL0R
    // The TRCEVENTCTL0R controls the tracing of events in the trace stream
    // 0x00008000 [15]    TYPE1        (0) Selects the resource type for event 1
    // 0x00000700 [10:8]  SEL1         (0x0) Selects the resource number, based on the value of...
    // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
    // 0x00000007 [2:0]   SEL0         (0x0) Selects the resource number, based on the value of...
    io_rw_32 trceventctl0r;

    _REG_(M33_TRCEVENTCTL1R_OFFSET) // M33_TRCEVENTCTL1R
    // The TRCEVENTCTL1R controls how the events selected by TRCEVENTCTL0R behave
    // 0x00001000 [12]    LPOVERRIDE   (0) Low power state behavior override
    // 0x00000800 [11]    ATB          (0) ATB enabled
    // 0x00000002 [1]     INSTEN1      (0) One bit per event, to enable generation of an event...
    // 0x00000001 [0]     INSTEN0      (0) One bit per event, to enable generation of an event...
    io_rw_32 trceventctl1r;

    uint32_t _pad50;

    _REG_(M33_TRCSTALLCTLR_OFFSET) // M33_TRCSTALLCTLR
    // The TRCSTALLCTLR enables ETM-Teal to stall the processor if the ETM-Teal FIFO goes over the...
    // 0x00000400 [10]    INSTPRIORITY (0) Reserved, RES0
    // 0x00000100 [8]     ISTALL       (0) Stall processor based on instruction trace buffer space
    // 0x0000000c [3:2]   LEVEL        (0x0) Threshold at which stalling becomes active
    io_rw_32 trcstallctlr;

    _REG_(M33_TRCTSCTLR_OFFSET) // M33_TRCTSCTLR
    // The TRCTSCTLR controls the insertion of global timestamps into the trace stream
    // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
    // 0x00000003 [1:0]   SEL0         (0x0) Selects the resource number, based on the value of...
    io_rw_32 trctsctlr;

    _REG_(M33_TRCSYNCPR_OFFSET) // M33_TRCSYNCPR
    // The TRCSYNCPR specifies the period of trace synchronization of the trace streams
    // 0x0000001f [4:0]   PERIOD       (0x0a) Defines the number of bytes of trace between trace...
    io_ro_32 trcsyncpr;

    _REG_(M33_TRCCCCTLR_OFFSET) // M33_TRCCCCTLR
    // The TRCCCCTLR sets the threshold value for instruction trace cycle counting
    // 0x00000fff [11:0]  THRESHOLD    (0x000) Instruction trace cycle count threshold
    io_rw_32 trcccctlr;

    uint32_t _pad51[17];

    _REG_(M33_TRCVICTLR_OFFSET) // M33_TRCVICTLR
    // The TRCVICTLR controls instruction trace filtering
    // 0x00080000 [19]    EXLEVEL_S3   (0) In Secure state, each bit controls whether instruction...
    // 0x00010000 [16]    EXLEVEL_S0   (0) In Secure state, each bit controls whether instruction...
    // 0x00000800 [11]    TRCERR       (0) Selects whether a system error exception must always be traced
    // 0x00000400 [10]    TRCRESET     (0) Selects whether a reset exception must always be traced
    // 0x00000200 [9]     SSSTATUS     (0) Indicates the current status of the start/stop logic
    // 0x00000080 [7]     TYPE0        (0) Selects the resource type for event 0
    // 0x00000003 [1:0]   SEL0         (0x0) Selects the resource number, based on the value of...
    io_rw_32 trcvictlr;

    uint32_t _pad52[47];

    _REG_(M33_TRCCNTRLDVR0_OFFSET) // M33_TRCCNTRLDVR0
    // The TRCCNTRLDVR defines the reload value for the reduced function counter
    // 0x0000ffff [15:0]  VALUE        (0x0000) Defines the reload value for the counter
    io_rw_32 trccntrldvr0;

    uint32_t _pad53[15];

    _REG_(M33_TRCIDR8_OFFSET) // M33_TRCIDR8
    // TRCIDR8
    // 0xffffffff [31:0]  MAXSPEC      (0x00000000) reads as `ImpDef
    io_ro_32 trcidr8;

    _REG_(M33_TRCIDR9_OFFSET) // M33_TRCIDR9
    // TRCIDR9
    // 0xffffffff [31:0]  NUMP0KEY     (0x00000000) reads as `ImpDef
    io_ro_32 trcidr9;

    _REG_(M33_TRCIDR10_OFFSET) // M33_TRCIDR10
    // TRCIDR10
    // 0xffffffff [31:0]  NUMP1KEY     (0x00000000) reads as `ImpDef
    io_ro_32 trcidr10;

    _REG_(M33_TRCIDR11_OFFSET) // M33_TRCIDR11
    // TRCIDR11
    // 0xffffffff [31:0]  NUMP1SPC     (0x00000000) reads as `ImpDef
    io_ro_32 trcidr11;

    _REG_(M33_TRCIDR12_OFFSET) // M33_TRCIDR12
    // TRCIDR12
    // 0xffffffff [31:0]  NUMCONDKEY   (0x00000001) reads as `ImpDef
    io_ro_32 trcidr12;

    _REG_(M33_TRCIDR13_OFFSET) // M33_TRCIDR13
    // TRCIDR13
    // 0xffffffff [31:0]  NUMCONDSPC   (0x00000000) reads as `ImpDef
    io_ro_32 trcidr13;

    uint32_t _pad54[10];

    _REG_(M33_TRCIMSPEC_OFFSET) // M33_TRCIMSPEC
    // The TRCIMSPEC shows the presence of any IMPLEMENTATION SPECIFIC features, and enables any...
    // 0x0000000f [3:0]   SUPPORT      (0x0) Reserved, RES0
    io_ro_32 trcimspec;

    uint32_t _pad55[7];

    _REG_(M33_TRCIDR0_OFFSET) // M33_TRCIDR0
    // TRCIDR0
    // 0x20000000 [29]    COMMOPT      (1) reads as `ImpDef
    // 0x1f000000 [28:24] TSSIZE       (0x08) reads as `ImpDef
    // 0x00020000 [17]    TRCEXDATA    (0) reads as `ImpDef
    // 0x00018000 [16:15] QSUPP        (0x0) reads as `ImpDef
    // 0x00004000 [14]    QFILT        (0) reads as `ImpDef
    // 0x00003000 [13:12] CONDTYPE     (0x0) reads as `ImpDef
    // 0x00000c00 [11:10] NUMEVENT     (0x1) reads as `ImpDef
    // 0x00000200 [9]     RETSTACK     (1) reads as `ImpDef
    // 0x00000080 [7]     TRCCCI       (1) reads as `ImpDef
    // 0x00000040 [6]     TRCCOND      (1) reads as `ImpDef
    // 0x00000020 [5]     TRCBB        (1) reads as `ImpDef
    // 0x00000018 [4:3]   TRCDATA      (0x0) reads as `ImpDef
    // 0x00000006 [2:1]   INSTP0       (0x0) reads as `ImpDef
    // 0x00000001 [0]     RES1         (1) Reserved, RES1
    io_ro_32 trcidr0;

    _REG_(M33_TRCIDR1_OFFSET) // M33_TRCIDR1
    // TRCIDR1
    // 0xff000000 [31:24] DESIGNER     (0x41) reads as `ImpDef
    // 0x0000f000 [15:12] RES1         (0xf) Reserved, RES1
    // 0x00000f00 [11:8]  TRCARCHMAJ   (0x4) reads as 0b0100
    // 0x000000f0 [7:4]   TRCARCHMIN   (0x2) reads as 0b0000
    // 0x0000000f [3:0]   REVISION     (0x1) reads as `ImpDef
    io_ro_32 trcidr1;

    _REG_(M33_TRCIDR2_OFFSET) // M33_TRCIDR2
    // TRCIDR2
    // 0x1e000000 [28:25] CCSIZE       (0x0) reads as `ImpDef
    // 0x01f00000 [24:20] DVSIZE       (0x00) reads as `ImpDef
    // 0x000f8000 [19:15] DASIZE       (0x00) reads as `ImpDef
    // 0x00007c00 [14:10] VMIDSIZE     (0x00) reads as `ImpDef
    // 0x000003e0 [9:5]   CIDSIZE      (0x00) reads as `ImpDef
    // 0x0000001f [4:0]   IASIZE       (0x04) reads as `ImpDef
    io_ro_32 trcidr2;

    _REG_(M33_TRCIDR3_OFFSET) // M33_TRCIDR3
    // TRCIDR3
    // 0x80000000 [31]    NOOVERFLOW   (0) reads as `ImpDef
    // 0x70000000 [30:28] NUMPROC      (0x0) reads as `ImpDef
    // 0x08000000 [27]    SYSSTALL     (1) reads as `ImpDef
    // 0x04000000 [26]    STALLCTL     (1) reads as `ImpDef
    // 0x02000000 [25]    SYNCPR       (1) reads as `ImpDef
    // 0x01000000 [24]    TRCERR       (1) reads as `ImpDef
    // 0x00f00000 [23:20] EXLEVEL_NS   (0x0) reads as `ImpDef
    // 0x000f0000 [19:16] EXLEVEL_S    (0x9) reads as `ImpDef
    // 0x00000fff [11:0]  CCITMIN      (0x004) reads as `ImpDef
    io_ro_32 trcidr3;

    _REG_(M33_TRCIDR4_OFFSET) // M33_TRCIDR4
    // TRCIDR4
    // 0xf0000000 [31:28] NUMVMIDC     (0x0) reads as `ImpDef
    // 0x0f000000 [27:24] NUMCIDC      (0x0) reads as `ImpDef
    // 0x00f00000 [23:20] NUMSSCC      (0x1) reads as `ImpDef
    // 0x000f0000 [19:16] NUMRSPAIR    (0x1) reads as `ImpDef
    // 0x0000f000 [15:12] NUMPC        (0x4) reads as `ImpDef
    // 0x00000100 [8]     SUPPDAC      (0) reads as `ImpDef
    // 0x000000f0 [7:4]   NUMDVC       (0x0) reads as `ImpDef
    // 0x0000000f [3:0]   NUMACPAIRS   (0x0) reads as `ImpDef
    io_ro_32 trcidr4;

    _REG_(M33_TRCIDR5_OFFSET) // M33_TRCIDR5
    // TRCIDR5
    // 0x80000000 [31]    REDFUNCNTR   (1) reads as `ImpDef
    // 0x70000000 [30:28] NUMCNTR      (0x1) reads as `ImpDef
    // 0x0e000000 [27:25] NUMSEQSTATE  (0x0) reads as `ImpDef
    // 0x00800000 [23]    LPOVERRIDE   (1) reads as `ImpDef
    // 0x00400000 [22]    ATBTRIG      (1) reads as `ImpDef
    // 0x003f0000 [21:16] TRACEIDSIZE  (0x07) reads as 0x07
    // 0x00000e00 [11:9]  NUMEXTINSEL  (0x0) reads as `ImpDef
    // 0x000001ff [8:0]   NUMEXTIN     (0x004) reads as `ImpDef
    io_ro_32 trcidr5;

    uint32_t _pad56[4];

    // (Description copied from array index 0 register M33_TRCRSCTLR2 applies similarly to other array indexes)
    _REG_(M33_TRCRSCTLR2_OFFSET) // M33_TRCRSCTLR2
    // The TRCRSCTLR controls the trace resources
    // 0x00200000 [21]    PAIRINV      (0) Inverts the result of a combined pair of resources
    // 0x00100000 [20]    INV          (0) Inverts the selected resources
    // 0x00070000 [18:16] GROUP        (0x0) Selects a group of resource
    // 0x000000ff [7:0]   SELECT       (0x00) Selects one or more resources from the wanted group
    io_rw_32 trcrsctlr[2];

    uint32_t _pad57[36];

    _REG_(M33_TRCSSCSR_OFFSET) // M33_TRCSSCSR
    // Controls the corresponding single-shot comparator resource
    // 0x80000000 [31]    STATUS       (0) Single-shot status bit
    // 0x00000008 [3]     PC           (0) Reserved, RES1
    // 0x00000004 [2]     DV           (0) Reserved, RES0
    // 0x00000002 [1]     DA           (0) Reserved, RES0
    // 0x00000001 [0]     INST         (0) Reserved, RES0
    io_rw_32 trcsscsr;

    uint32_t _pad58[7];

    _REG_(M33_TRCSSPCICR_OFFSET) // M33_TRCSSPCICR
    // Selects the PE comparator inputs for Single-shot control
    // 0x0000000f [3:0]   PC           (0x0) Selects one or more PE comparator inputs for Single-shot control
    io_rw_32 trcsspcicr;

    uint32_t _pad59[19];

    _REG_(M33_TRCPDCR_OFFSET) // M33_TRCPDCR
    // Requests the system to provide power to the trace unit
    // 0x00000008 [3]     PU           (0) Powerup request bit:
    io_rw_32 trcpdcr;

    _REG_(M33_TRCPDSR_OFFSET) // M33_TRCPDSR
    // Returns the following information about the trace unit: - OS Lock status
    // 0x00000020 [5]     OSLK         (0) OS Lock status bit:
    // 0x00000002 [1]     STICKYPD     (1) Sticky powerdown status bit
    // 0x00000001 [0]     POWER        (1) Power status bit:
    io_ro_32 trcpdsr;

    uint32_t _pad60[755];

    _REG_(M33_TRCITATBIDR_OFFSET) // M33_TRCITATBIDR
    // Trace Integration ATB Identification Register
    // 0x0000007f [6:0]   ID           (0x00) Trace ID
    io_rw_32 trcitatbidr;

    uint32_t _pad61[3];

    _REG_(M33_TRCITIATBINR_OFFSET) // M33_TRCITIATBINR
    // Trace Integration Instruction ATB In Register
    // 0x00000002 [1]     AFVALIDM     (0) Integration Mode instruction AFVALIDM in
    // 0x00000001 [0]     ATREADYM     (0) Integration Mode instruction ATREADYM in
    io_rw_32 trcitiatbinr;

    uint32_t _pad62;

    _REG_(M33_TRCITIATBOUTR_OFFSET) // M33_TRCITIATBOUTR
    // Trace Integration Instruction ATB Out Register
    // 0x00000002 [1]     AFREADY      (0) Integration Mode instruction AFREADY out
    // 0x00000001 [0]     ATVALID      (0) Integration Mode instruction ATVALID out
    io_rw_32 trcitiatboutr;

    uint32_t _pad63[40];

    _REG_(M33_TRCCLAIMSET_OFFSET) // M33_TRCCLAIMSET
    // Claim Tag Set Register
    // 0x00000008 [3]     SET3         (1) When a write to one of these bits occurs, with the value:
    // 0x00000004 [2]     SET2         (1) When a write to one of these bits occurs, with the value:
    // 0x00000002 [1]     SET1         (1) When a write to one of these bits occurs, with the value:
    // 0x00000001 [0]     SET0         (1) When a write to one of these bits occurs, with the value:
    io_rw_32 trcclaimset;

    _REG_(M33_TRCCLAIMCLR_OFFSET) // M33_TRCCLAIMCLR
    // Claim Tag Clear Register
    // 0x00000008 [3]     CLR3         (0) When a write to one of these bits occurs, with the value:
    // 0x00000004 [2]     CLR2         (0) When a write to one of these bits occurs, with the value:
    // 0x00000002 [1]     CLR1         (0) When a write to one of these bits occurs, with the value:
    // 0x00000001 [0]     CLR0         (0) When a write to one of these bits occurs, with the value:
    io_rw_32 trcclaimclr;

    uint32_t _pad64[4];

    _REG_(M33_TRCAUTHSTATUS_OFFSET) // M33_TRCAUTHSTATUS
    // Returns the level of tracing that the trace unit can support
    // 0x000000c0 [7:6]   SNID         (0x0) Indicates whether the system enables the trace unit to...
    // 0x00000030 [5:4]   SID          (0x0) Indicates whether the trace unit supports Secure invasive debug:
    // 0x0000000c [3:2]   NSNID        (0x0) Indicates whether the system enables the trace unit to...
    // 0x00000003 [1:0]   NSID         (0x0) Indicates whether the trace unit supports Non-secure...
    io_ro_32 trcauthstatus;

    _REG_(M33_TRCDEVARCH_OFFSET) // M33_TRCDEVARCH
    // TRCDEVARCH
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) reads as 0b01000111011
    // 0x00100000 [20]    PRESENT      (1) reads as 0b1
    // 0x000f0000 [19:16] REVISION     (0x2) reads as 0b0000
    // 0x0000ffff [15:0]  ARCHID       (0x4a13) reads as 0b0100101000010011
    io_ro_32 trcdevarch;

    uint32_t _pad65[3];

    _REG_(M33_TRCDEVTYPE_OFFSET) // M33_TRCDEVTYPE
    // TRCDEVTYPE
    // 0x000000f0 [7:4]   SUB          (0x1) reads as 0b0001
    // 0x0000000f [3:0]   MAJOR        (0x3) reads as 0b0011
    io_ro_32 trcdevtype;

    _REG_(M33_TRCPIDR4_OFFSET) // M33_TRCPIDR4
    // TRCPIDR4
    // 0x000000f0 [7:4]   SIZE         (0x0) reads as `ImpDef
    // 0x0000000f [3:0]   DES_2        (0x4) reads as `ImpDef
    io_ro_32 trcpidr4;

    uint32_t _pad66[3];

    _REG_(M33_TRCPIDR0_OFFSET) // M33_TRCPIDR0
    // TRCPIDR0
    // 0x000000ff [7:0]   PART_0       (0x21) reads as `ImpDef
    io_ro_32 trcpidr0;

    _REG_(M33_TRCPIDR1_OFFSET) // M33_TRCPIDR1
    // TRCPIDR1
    // 0x000000f0 [7:4]   DES_0        (0xb) reads as `ImpDef
    // 0x0000000f [3:0]   PART_0       (0xd) reads as `ImpDef
    io_ro_32 trcpidr1;

    _REG_(M33_TRCPIDR2_OFFSET) // M33_TRCPIDR2
    // TRCPIDR2
    // 0x000000f0 [7:4]   REVISION     (0x2) reads as `ImpDef
    // 0x00000008 [3]     JEDEC        (1) reads as 0b1
    // 0x00000007 [2:0]   DES_0        (0x3) reads as `ImpDef
    io_ro_32 trcpidr2;

    _REG_(M33_TRCPIDR3_OFFSET) // M33_TRCPIDR3
    // TRCPIDR3
    // 0x000000f0 [7:4]   REVAND       (0x0) reads as `ImpDef
    // 0x0000000f [3:0]   CMOD         (0x0) reads as `ImpDef
    io_ro_32 trcpidr3;

    // (Description copied from array index 0 register M33_TRCCIDR0 applies similarly to other array indexes)
    _REG_(M33_TRCCIDR0_OFFSET) // M33_TRCCIDR0
    // TRCCIDR0
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) reads as 0b00001101
    io_ro_32 trccidr[4];

    _REG_(M33_CTICONTROL_OFFSET) // M33_CTICONTROL
    // CTI Control Register
    // 0x00000001 [0]     GLBEN        (0) Enables or disables the CTI
    io_rw_32 cticontrol;

    uint32_t _pad67[3];

    _REG_(M33_CTIINTACK_OFFSET) // M33_CTIINTACK
    // CTI Interrupt Acknowledge Register
    // 0x000000ff [7:0]   INTACK       (0x00) Acknowledges the corresponding ctitrigout output
    io_rw_32 ctiintack;

    _REG_(M33_CTIAPPSET_OFFSET) // M33_CTIAPPSET
    // CTI Application Trigger Set Register
    // 0x0000000f [3:0]   APPSET       (0x0) Setting a bit HIGH generates a channel event for the...
    io_rw_32 ctiappset;

    _REG_(M33_CTIAPPCLEAR_OFFSET) // M33_CTIAPPCLEAR
    // CTI Application Trigger Clear Register
    // 0x0000000f [3:0]   APPCLEAR     (0x0) Sets the corresponding bits in the CTIAPPSET to 0
    io_rw_32 ctiappclear;

    _REG_(M33_CTIAPPPULSE_OFFSET) // M33_CTIAPPPULSE
    // CTI Application Pulse Register
    // 0x0000000f [3:0]   APPULSE      (0x0) Setting a bit HIGH generates a channel event pulse for...
    io_rw_32 ctiapppulse;

    // (Description copied from array index 0 register M33_CTIINEN0 applies similarly to other array indexes)
    _REG_(M33_CTIINEN0_OFFSET) // M33_CTIINEN0
    // CTI Trigger to Channel Enable Registers
    // 0x0000000f [3:0]   TRIGINEN     (0x0) Enables a cross trigger event to the corresponding...
    io_rw_32 ctiinen[8];

    uint32_t _pad68[24];

    // (Description copied from array index 0 register M33_CTIOUTEN0 applies similarly to other array indexes)
    _REG_(M33_CTIOUTEN0_OFFSET) // M33_CTIOUTEN0
    // CTI Trigger to Channel Enable Registers
    // 0x0000000f [3:0]   TRIGOUTEN    (0x0) Enables a cross trigger event to ctitrigout when the...
    io_rw_32 ctiouten[8];

    uint32_t _pad69[28];

    _REG_(M33_CTITRIGINSTATUS_OFFSET) // M33_CTITRIGINSTATUS
    // CTI Trigger to Channel Enable Registers
    // 0x000000ff [7:0]   TRIGINSTATUS (0x00) Shows the status of the ctitrigin inputs
    io_ro_32 ctitriginstatus;

    _REG_(M33_CTITRIGOUTSTATUS_OFFSET) // M33_CTITRIGOUTSTATUS
    // CTI Trigger In Status Register
    // 0x000000ff [7:0]   TRIGOUTSTATUS (0x00) Shows the status of the ctitrigout outputs
    io_ro_32 ctitrigoutstatus;

    _REG_(M33_CTICHINSTATUS_OFFSET) // M33_CTICHINSTATUS
    // CTI Channel In Status Register
    // 0x0000000f [3:0]   CTICHOUTSTATUS (0x0) Shows the status of the ctichout outputs
    io_ro_32 ctichinstatus;

    uint32_t _pad70;

    _REG_(M33_CTIGATE_OFFSET) // M33_CTIGATE
    // Enable CTI Channel Gate register
    // 0x00000008 [3]     CTIGATEEN3   (1) Enable ctichout3
    // 0x00000004 [2]     CTIGATEEN2   (1) Enable ctichout2
    // 0x00000002 [1]     CTIGATEEN1   (1) Enable ctichout1
    // 0x00000001 [0]     CTIGATEEN0   (1) Enable ctichout0
    io_rw_32 ctigate;

    uint32_t _pad71[872];

    _REG_(M33_ITCHOUT_OFFSET) // M33_ITCHOUT
    // Integration Test Channel Output register
    // 0x0000000f [3:0]   CTCHOUT      (0x0) Sets the value of the ctichout outputs
    io_rw_32 itchout;

    _REG_(M33_ITTRIGOUT_OFFSET) // M33_ITTRIGOUT
    // Integration Test Trigger Output register
    // 0x000000ff [7:0]   CTTRIGOUT    (0x00) Sets the value of the ctitrigout outputs
    io_rw_32 ittrigout;

    uint32_t _pad72[2];

    _REG_(M33_ITCHIN_OFFSET) // M33_ITCHIN
    // Integration Test Channel Input register
    // 0x0000000f [3:0]   CTCHIN       (0x0) Reads the value of the ctichin inputs
    io_ro_32 itchin;

    uint32_t _pad73[2];

    _REG_(M33_ITCTRL_OFFSET) // M33_ITCTRL
    // Integration Mode Control register
    // 0x00000001 [0]     IME          (0) Integration Mode Enable
    io_rw_32 itctrl;

    uint32_t _pad74[46];

    _REG_(M33_DEVARCH_OFFSET) // M33_DEVARCH
    // Device Architecture register
    // 0xffe00000 [31:21] ARCHITECT    (0x23b) Indicates the component architect
    // 0x00100000 [20]    PRESENT      (1) Indicates whether the DEVARCH register is present
    // 0x000f0000 [19:16] REVISION     (0x0) Indicates the architecture revision
    // 0x0000ffff [15:0]  ARCHID       (0x1a14) Indicates the component
    io_ro_32 devarch;

    uint32_t _pad75[2];

    _REG_(M33_DEVID_OFFSET) // M33_DEVID
    // Device Configuration register
    // 0x000f0000 [19:16] NUMCH        (0x4) Number of ECT channels available
    // 0x0000ff00 [15:8]  NUMTRIG      (0x08) Number of ECT triggers available
    // 0x0000001f [4:0]   EXTMUXNUM    (0x00) Indicates the number of multiplexers available on...
    io_ro_32 devid;

    _REG_(M33_DEVTYPE_OFFSET) // M33_DEVTYPE
    // Device Type Identifier register
    // 0x000000f0 [7:4]   SUB          (0x1) Sub-classification of the type of the debug component as...
    // 0x0000000f [3:0]   MAJOR        (0x4) Major classification of the type of the debug component...
    io_ro_32 devtype;

    _REG_(M33_PIDR4_OFFSET) // M33_PIDR4
    // CoreSight Peripheral ID4
    // 0x000000f0 [7:4]   SIZE         (0x0) Always 0b0000
    // 0x0000000f [3:0]   DES_2        (0x4) Together, PIDR1
    io_ro_32 pidr4;

    uint32_t _pad76[3];

    _REG_(M33_PIDR0_OFFSET) // M33_PIDR0
    // CoreSight Peripheral ID0
    // 0x000000ff [7:0]   PART_0       (0x21) Bits[7:0] of the 12-bit part number of the component
    io_ro_32 pidr0;

    _REG_(M33_PIDR1_OFFSET) // M33_PIDR1
    // CoreSight Peripheral ID1
    // 0x000000f0 [7:4]   DES_0        (0xb) Together, PIDR1
    // 0x0000000f [3:0]   PART_1       (0xd) Bits[11:8] of the 12-bit part number of the component
    io_ro_32 pidr1;

    _REG_(M33_PIDR2_OFFSET) // M33_PIDR2
    // CoreSight Peripheral ID2
    // 0x000000f0 [7:4]   REVISION     (0x0) This device is at r1p0
    // 0x00000008 [3]     JEDEC        (1) Always 1
    // 0x00000007 [2:0]   DES_1        (0x3) Together, PIDR1
    io_ro_32 pidr2;

    _REG_(M33_PIDR3_OFFSET) // M33_PIDR3
    // CoreSight Peripheral ID3
    // 0x000000f0 [7:4]   REVAND       (0x0) Indicates minor errata fixes specific to the revision of...
    // 0x0000000f [3:0]   CMOD         (0x0) Customer Modified
    io_ro_32 pidr3;

    // (Description copied from array index 0 register M33_CIDR0 applies similarly to other array indexes)
    _REG_(M33_CIDR0_OFFSET) // M33_CIDR0
    // CoreSight Component ID0
    // 0x000000ff [7:0]   PRMBL_0      (0x0d) Preamble[0]
    io_ro_32 cidr[4];
} m33_hw_t;

#define m33_hw ((m33_hw_t *)PPB_BASE)
#define m33_ns_hw ((m33_hw_t *)PPB_NONSEC_BASE)
static_assert(sizeof (m33_hw_t) == 0x43000, "");

#endif // _HARDWARE_STRUCTS_M33_H
